启动器功能,模型管理
This commit is contained in:
parent
30e21b71fb
commit
6888028201
|
|
@ -16,7 +16,7 @@ export const GetModelList = (params) => {
|
|||
export const GetModelDetails = (params) => {
|
||||
return get('/api/GetModelDetails', params)
|
||||
}
|
||||
|
||||
//
|
||||
// 新增成绩管理列表
|
||||
export const AddExam = (params) => {
|
||||
return post('/api/AddExam', params)
|
||||
|
|
@ -25,7 +25,18 @@ export const AddExam = (params) => {
|
|||
export const EditExamList = (params) => {
|
||||
return post('/api/EditExam', params)
|
||||
}
|
||||
|
||||
// 编辑启动器
|
||||
export const EditStarter = (params) => {
|
||||
return post('/api/EditStarter', params)
|
||||
}
|
||||
// 上传文件接口
|
||||
export const apiUploadList = (url, params) => {
|
||||
return uploadFile('/api/Upload' + url, params)
|
||||
}
|
||||
// 删除文件
|
||||
export const DeleteFile = (params) => {
|
||||
return get('/api/DeleteFile', params)
|
||||
}
|
||||
// 编辑器树结构
|
||||
export const GetFaultTree = (params) => {
|
||||
return get('/api/GetFaultTree', params)
|
||||
|
|
@ -92,9 +103,9 @@ export const GetPlatformArea = (params) => {
|
|||
export const GetLine = (params) => {
|
||||
return get('/api/GetLine', params)
|
||||
}
|
||||
|
||||
export const EditExam = (params) => {
|
||||
return post('/api/EditExam', params)
|
||||
// 编辑模型
|
||||
export const EditModel = (params) => {
|
||||
return post('/api/EditModel', params)
|
||||
}
|
||||
export const GetExamDetails = (params) => {
|
||||
return get('/api/GetExamDetails', params)
|
||||
|
|
|
|||
|
|
@ -4,7 +4,7 @@ const routes = [
|
|||
{
|
||||
path: '/',
|
||||
name: '',
|
||||
redirect: '/home'
|
||||
redirect: '/ExaminationManagement'
|
||||
},
|
||||
{
|
||||
path: '/login',
|
||||
|
|
@ -26,12 +26,12 @@ const routes = [
|
|||
{
|
||||
path: '/home',
|
||||
component: () => import('@/views/home/index.vue'),
|
||||
meta: { sort: 1, title: '测试', icon: '' }
|
||||
meta: { sort: 1, title: '模型管理', icon: '' }
|
||||
},
|
||||
{
|
||||
path: '/ExaminationManagement',
|
||||
component: () => import('@/views/ExaminationManagement/index.vue'),
|
||||
meta: { sort: 1, title: '考试管理', icon: '' }
|
||||
meta: { sort: 1, title: '启动器管理', icon: '' }
|
||||
}
|
||||
|
||||
// {
|
||||
|
|
|
|||
|
|
@ -1,58 +1,8 @@
|
|||
<template>
|
||||
<div class="PageContent">
|
||||
<!-- <div class="WebToolbar">
|
||||
<div class="FormComponent">
|
||||
<el-form :inline="true" :model="formInline" class="demo-form-inline">
|
||||
<el-form-item label="状态">
|
||||
<el-select v-model="formInline.Status" placeholder="请选择状态" clearable>
|
||||
<el-option label="未发布" value="未发布" />
|
||||
<el-option label="已发布" value="已发布" />
|
||||
<el-option label="已结束" value="已结束" />
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
<el-form-item label="软件名称">
|
||||
<el-input
|
||||
v-model="formInline.ExamName"
|
||||
placeholder="请输入考试名称"
|
||||
clearable
|
||||
/>
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
</div>
|
||||
<div class="ButtonAssembly">
|
||||
<el-button style="color: #fff" @click="queryData()">
|
||||
<img src="../../assets/menu/search.png" alt="" />
|
||||
<span>查询</span>
|
||||
</el-button>
|
||||
<el-button style="color: #1d2129" @click="resetFormInline">
|
||||
<img src="../../assets/menu/reset.png" alt="" />
|
||||
<span>重置</span>
|
||||
</el-button>
|
||||
</div>
|
||||
</div> -->
|
||||
<div class="Tabulation">
|
||||
<div class="actionBar">
|
||||
<h1>考试列表</h1>
|
||||
<!-- <div class="Worktop">
|
||||
<el-button @click="goToAboutPage">编辑器</el-button>
|
||||
<el-button @click="handleReleaseExam">发布</el-button>
|
||||
<el-button @click="handleRevokeReleaseExam">撤销发布</el-button>
|
||||
<el-button @click="handleFinishedExam">考试结束</el-button>
|
||||
<el-button @click="handleExamination">考试名单</el-button>
|
||||
|
||||
<el-button class="BlueBack" @click="handleCreate">
|
||||
<img src="../../assets/menu/Increased.png" alt="" />
|
||||
<span>新增</span>
|
||||
</el-button>
|
||||
<el-button class="BlueBack" @click="dialogToLead = true">
|
||||
<img src="../../assets/menu/toLead.png" alt="" />
|
||||
<span>导入</span>
|
||||
</el-button>
|
||||
<el-button class="Delete">
|
||||
<img src="../../assets/menu/delete.png" alt="" />
|
||||
<span>删除</span>
|
||||
</el-button>
|
||||
</div> -->
|
||||
</div>
|
||||
<div class="ExaminationForm">
|
||||
<el-table
|
||||
|
|
@ -93,12 +43,12 @@
|
|||
<!--新增弹框-->
|
||||
<el-dialog
|
||||
v-model="dialogFormVisible"
|
||||
:title="ExamId ? '编辑考试' : '新增考试'"
|
||||
title="编辑启动器"
|
||||
width="1050"
|
||||
center
|
||||
@close="closeDialog"
|
||||
>
|
||||
<el-form ref="formRef" :model="form" :rules="state.rules" :inline="true" :label-width="formLabelWidth">
|
||||
<el-form ref="formRef" :model="form" :rules="state.rules" :inline="false" :label-width="formLabelWidth">
|
||||
<el-form-item label="软件名称:" prop="SoftwareName">
|
||||
<el-input v-model="form.SoftwareName" />
|
||||
</el-form-item>
|
||||
|
|
@ -108,7 +58,7 @@
|
|||
>
|
||||
<el-input v-model="form.VersionNumber" />
|
||||
</el-form-item>
|
||||
<el-form-item label="启动器资源包" style="margin-top: 20%;margin-left: 10px;">
|
||||
<el-form-item label="启动器资源包:" style="margin-top: 5%;margin-left: 10px;">
|
||||
<el-upload
|
||||
:action="action"
|
||||
:before-remove="handleRemoveFile"
|
||||
|
|
@ -131,6 +81,7 @@
|
|||
<el-button size="mini" type="primary">上传文件</el-button>
|
||||
</template>
|
||||
</el-upload>
|
||||
|
||||
<!-- 文件列表 -->
|
||||
<transition-group
|
||||
class="upload-file-list el-upload-list el-upload-list--text"
|
||||
|
|
@ -140,24 +91,74 @@
|
|||
<li
|
||||
:key="file.uid"
|
||||
class="el-upload-list__item ele-upload-list__item-content"
|
||||
v-for="(file, index) in list"
|
||||
v-for="(file, index) in fileListFile"
|
||||
>
|
||||
<el-link :href="file.url" :underline="false" target="_blank">
|
||||
<el-link :href="file.filePath" :underline="false" target="_blank">
|
||||
<span class="el-icon-document">
|
||||
{{ getFileName(file.name) }}
|
||||
{{ file. fileName}}
|
||||
</span>
|
||||
</el-link>
|
||||
<div class="ele-upload-list__item-content-action">
|
||||
<!-- <div class="ele-upload-list__item-content-action">
|
||||
<el-link
|
||||
:underline="false"
|
||||
@click="handleDelete(index)"
|
||||
type="danger"
|
||||
>删除</el-link
|
||||
>
|
||||
</div>
|
||||
</div> -->
|
||||
</li>
|
||||
</transition-group>
|
||||
</el-form-item>
|
||||
<el-form-item label="更新包资源地址:" style="margin-top: 5%;margin-left: 10px;">
|
||||
<el-upload
|
||||
:action="action"
|
||||
:before-remove="handleRemoveFile1"
|
||||
:file-list="fileListFileM"
|
||||
multiple
|
||||
accept=".pdf,.doc,.docx,.excel,.ppt,.pptx,.word,.xlsx,.RTF, .xls"
|
||||
:on-error="handleUploadError"
|
||||
:on-exceed="handleExceed"
|
||||
:on-success="handleUploadSuccess"
|
||||
:on-change="handChangeFile"
|
||||
:on-preview="handleFormPreview"
|
||||
:http-request="httpRequest"
|
||||
:show-file-list="true"
|
||||
:auto-upload="false"
|
||||
class="upload-file-uploader horizontal-list"
|
||||
ref="upload"
|
||||
>
|
||||
<!-- 上传按钮 -->
|
||||
<template v-slot:trigger>
|
||||
<el-button size="mini" type="primary">上传文件</el-button>
|
||||
</template>
|
||||
</el-upload>
|
||||
<transition-group
|
||||
class="upload-file-list el-upload-list el-upload-list--text"
|
||||
name="el-fade-in-linear"
|
||||
tag="ul"
|
||||
>
|
||||
<li
|
||||
:key="file.uid"
|
||||
class="el-upload-list__item ele-upload-list__item-content"
|
||||
v-for="(file, index) in fileListFileM"
|
||||
>
|
||||
<el-link :href="file.filePath" :underline="false" target="_blank">
|
||||
<span class="el-icon-document">
|
||||
{{ file. fileName}}
|
||||
</span>
|
||||
</el-link>
|
||||
<!-- <div class="ele-upload-list__item-content-action">
|
||||
<el-link
|
||||
:underline="false"
|
||||
@click="handleDelete(index)"
|
||||
type="danger"
|
||||
>删除</el-link
|
||||
>
|
||||
</div> -->
|
||||
</li>
|
||||
</transition-group>
|
||||
</el-form-item>
|
||||
|
||||
</el-form>
|
||||
<template #footer>
|
||||
<div class="dialog-footer">
|
||||
|
|
@ -168,218 +169,7 @@
|
|||
</div>
|
||||
</template>
|
||||
</el-dialog>
|
||||
<!-- 编辑弹框-->
|
||||
<!-- <el-dialog
|
||||
v-model="EditFormVisible"
|
||||
title="新增考试"
|
||||
width="1050"
|
||||
center
|
||||
:data="EditExamtableData"
|
||||
v-if="false"
|
||||
>
|
||||
<el-form :model="form" :inline="true" :label-width="formLabelWidth">
|
||||
<el-form-item label="考试名称:" >
|
||||
<el-input v-model="form.name" />
|
||||
</el-form-item>
|
||||
<el-form-item
|
||||
label="场景:"
|
||||
class="demo-form-scene"
|
||||
>
|
||||
<el-select v-model="form.region" placeholder="">
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
<el-form-item label="台区:" >
|
||||
<el-select v-model="form.PlatformAreaName" placeholder="">
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
<el-form-item label="线路:" >
|
||||
<el-select v-model="form.region" placeholder="">
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
<el-form-item
|
||||
label="处理日期:"
|
||||
class="el-form-end"
|
||||
>
|
||||
<el-date-picker v-model="value2" type="date" placeholder="请选择时间" />
|
||||
</el-form-item>
|
||||
<el-form-item label="巡线日期:" >
|
||||
<el-date-picker v-model="value1" type="date" placeholder="请选择时间" />
|
||||
</el-form-item>
|
||||
<el-form-item
|
||||
label="工单内容:"
|
||||
class="backInformation"
|
||||
>
|
||||
<el-input
|
||||
v-model="form.WorkOrderContent"
|
||||
style="width: 240px"
|
||||
:rows="12"
|
||||
type="textarea"
|
||||
placeholder="Please input"
|
||||
/>
|
||||
</el-form-item>
|
||||
<el-form-item label="背景资料:" label-width="192px" >
|
||||
<el-input
|
||||
v-model="textarea"
|
||||
style="width: 240px"
|
||||
:rows="12"
|
||||
type="textarea"
|
||||
placeholder=""
|
||||
/>
|
||||
</el-form-item>
|
||||
<el-form-item label="考试时长:" >
|
||||
<el-input v-model="form.name" autocomplete="off" />
|
||||
</el-form-item>
|
||||
<el-form-item label="411电缆型号及长度:">
|
||||
<el-input v-model="form.name" autocomplete="off" />
|
||||
<span class="example">示例:YJV22-4*95/12米</span>
|
||||
</el-form-item>
|
||||
<el-form-item label="411电缆型号及长度:">
|
||||
<el-input v-model="form.name" autocomplete="off" />
|
||||
<span class="example">示例:YJV22-4*95/12米</span>
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
<template #footer>
|
||||
<div class="dialog-footer">
|
||||
<el-button @click="submit">确认</el-button>
|
||||
<el-button type="primary" @click="EditFormVisible = false">
|
||||
取消
|
||||
</el-button>
|
||||
</div>
|
||||
</template>
|
||||
</el-dialog> -->
|
||||
<!--考试名单 -->
|
||||
<!-- <el-dialog v-model="dialogTabular" title="考试学员考试题目" width="1800">
|
||||
<div class="functionalUnit">
|
||||
<el-form :model="stateA.queryForm" :inline="true" width="800">
|
||||
<el-form-item label="姓名:" width="200">
|
||||
<el-input v-model="stateA.queryForm.Name" autocomplete="off" />
|
||||
</el-form-item>
|
||||
<el-form-item label="账号:" width="200">
|
||||
<el-input v-model="stateA.queryForm.Account" autocomplete="off" />
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
<div class="functionalUnit">
|
||||
<el-button @click="getExamination">
|
||||
<img src="../../assets/menu/search.png" alt="" />
|
||||
<span>查询</span>
|
||||
</el-button>
|
||||
<el-button class="BlueBack" @click="dialogExamination = true" >
|
||||
<img src="../../assets/menu/Increased.png" alt="" />
|
||||
<span>新增</span>
|
||||
</el-button>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<P class="TabularTitle">
|
||||
<span style="margin-left: 20px">考试名单列表</span>
|
||||
</P>
|
||||
<div class="TabularList">
|
||||
<el-table :data="stateA.examRosterList" style="width: 100%">
|
||||
|
||||
<el-table-column prop="OwnCity" abel="所在市" width="280"/>
|
||||
<el-table-column prop="unit_name" label="单位" width="200"/>
|
||||
<el-table-column prop="dep_name" label="部门" />
|
||||
<el-table-column prop="login_name" label="账号" />
|
||||
<el-table-column prop="real_name" label="姓名" />
|
||||
<el-table-column prop="sex" label="性别"/>
|
||||
<el-table-column prop="" label="操作" >
|
||||
<template #default="{row}">
|
||||
<span class="register" @click="handleCancel(row)">删除</span>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<template #empty>
|
||||
<el-empty class="vab-data-empty" description="暂无数据" />
|
||||
</template>
|
||||
</el-table>
|
||||
</div>
|
||||
<div class="pagination">
|
||||
<el-pagination
|
||||
v-model:current-page="InlineForm.PageIndex"
|
||||
:page-size="InlineForm.PageSize"
|
||||
:small="small"
|
||||
:disabled="disabled"
|
||||
:background="background"
|
||||
layout="total, prev, pager, next"
|
||||
:total="stateA.total"
|
||||
@current-change="handleCurrentChangeA"
|
||||
/>
|
||||
</div>
|
||||
|
||||
<el-dialog v-model="dialogExamination" title="备选考试人员" width="1600">
|
||||
<div class="functionalUnit">
|
||||
<el-form :model="stateB.queryForm" :inline="true" width="800
|
||||
<el-form-item label="姓名:" width="200">
|
||||
<el-input v-model="stateB.queryForm.Name" autocomplete="off" />
|
||||
</el-form-item>
|
||||
<el-form-item label="账号:" width="200">
|
||||
<el-input v-model="stateB.queryForm.Account" autocomplete="off" />
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
<div class="functionalUnit">
|
||||
<el-button >
|
||||
<img src="../../assets/menu/search.png" alt="" />
|
||||
<span>查询</span>
|
||||
</el-button>
|
||||
</div>
|
||||
</div>
|
||||
<div class="ExaminationList">
|
||||
<P class="TabularTitle">
|
||||
<span>考试[下发各地市测试01]</span>
|
||||
<span style="margin-left: 20px">备选考试人员列表</span>
|
||||
</P>
|
||||
<div class="TabularList">
|
||||
<el-table
|
||||
:data="stateB.examRosterList"
|
||||
style="width: 100%"
|
||||
@selection-change="handleSelChange"
|
||||
>
|
||||
<el-table-column type="selection" />
|
||||
<el-table-column prop="LoginName" label="账号" />
|
||||
<el-table-column prop="RealName" label="姓名" />
|
||||
<el-table-column prop="Sex" label="性别"/>
|
||||
<template #empty>
|
||||
<el-empty class="vab-data-empty" description="暂无数据" />
|
||||
</template>
|
||||
</el-table>
|
||||
<div class="addSlip">
|
||||
<el-button @click="addExamRoster">
|
||||
<span>添加人员</span>
|
||||
</el-button>
|
||||
<el-pagination
|
||||
v-model:current-page="InlineForm.PageIndex"
|
||||
:page-size="InlineForm.PageSize"
|
||||
:small="small"
|
||||
:disabled="disabled"
|
||||
:background="background"
|
||||
layout="total, prev, pager, next"
|
||||
:total="stateB.total"
|
||||
@current-change="handleCurrentChangeB"
|
||||
/>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</el-dialog>
|
||||
</el-dialog> -->
|
||||
<!-- 导入 -->
|
||||
<!-- <el-dialog v-model="dialogToLead" title="导入" width="400">
|
||||
<el-upload
|
||||
ref="uploadRef"
|
||||
action="#"
|
||||
:http-request="toUpload"
|
||||
:auto-upload="false"
|
||||
:on-change="handleChange"
|
||||
:limit="1"
|
||||
:on-exceed="handleExceed"
|
||||
>
|
||||
<template #trigger>
|
||||
<el-button type="primary">选择</el-button>
|
||||
</template>
|
||||
|
||||
<el-button class="ml-3" type="success" @click="submitUpload">
|
||||
上传
|
||||
</el-button>
|
||||
</el-upload>
|
||||
</el-dialog> -->
|
||||
</template>
|
||||
|
||||
<script setup>
|
||||
|
|
@ -389,9 +179,10 @@ import { useRouter } from 'vue-router'
|
|||
import {
|
||||
GetStarterList,
|
||||
AddExam,
|
||||
EditExam,
|
||||
GetExamDetails,
|
||||
// EditExam,
|
||||
apiUploadList,
|
||||
EditExamList,
|
||||
DeleteFile,
|
||||
DeleteExam,
|
||||
GetScene,
|
||||
GetPlatformArea,
|
||||
|
|
@ -465,16 +256,16 @@ const form = reactive({
|
|||
onMounted(() => {
|
||||
getTable()
|
||||
// addTable()
|
||||
GetScene().then(res => {
|
||||
state.scenemList = res.data
|
||||
console.log(res.data, 'res.data--')
|
||||
})
|
||||
GetPlatformArea({
|
||||
SceneId: 'eab5920509b011ed844e7cd30a92bb1c'
|
||||
}).then(res => state.platformAreaList = res.data)
|
||||
GetLine({
|
||||
PlatformAreaId: '28f0723409b111ed844e7cd30a92bb1c'
|
||||
}).then(res => state.lineList = res.data)
|
||||
// ().then(res => {
|
||||
// state.scenemList = res.data
|
||||
// console.log(res.data, 'res.data--')
|
||||
// })
|
||||
// GetPlatformArea({
|
||||
// SceneId: 'eab5920509b011ed844e7cd30a92bb1c'
|
||||
// }).then(res => state.platformAreaList = res.data)
|
||||
// GetLine({
|
||||
// PlatformAreaId: '28f0723409b111ed844e7cd30a92bb1c'
|
||||
// }).then(res => state.lineList = res.data)
|
||||
})
|
||||
|
||||
// 考试列表
|
||||
|
|
@ -533,50 +324,131 @@ const handleCurrentChange = (val) => {
|
|||
getTable()
|
||||
}
|
||||
const ExamId = ref('')
|
||||
const fileM = ref('')
|
||||
const fileListN = ref([])
|
||||
const fileListFile = ref([])
|
||||
const fileListFileM = ref([])
|
||||
const handleEdit = async (row) => {
|
||||
const res = await GetExamDetails({ ExamId: row.ExamId })
|
||||
console.log(res.data, 'res--')
|
||||
for (const key in form) {
|
||||
form[key] = res.data[key]
|
||||
}
|
||||
ExamId.value = res.data.ExamId
|
||||
console.log('row', row)
|
||||
const fileListFileM1 = ref([])
|
||||
const fileListFile1 = ref([])
|
||||
form.SoftwareName = row.SoftwareName
|
||||
form.VersionNumber = row.VersionNumber
|
||||
const parts = row.LauncherResources.split('/')
|
||||
const parts2 = row.UpdateResources.split('/')
|
||||
fileListFile1.value.push({
|
||||
filePath: row.LauncherResources,
|
||||
fileName: parts[parts.length - 1]
|
||||
})
|
||||
fileListFileM1.value.push({
|
||||
filePath: row.UpdateResources,
|
||||
fileName: parts2[parts2.length - 1]
|
||||
})
|
||||
fileListFile.value = fileListFile1.value
|
||||
fileListFileM.value = fileListFileM1.value
|
||||
dialogFormVisible.value = true
|
||||
}
|
||||
const handleCopy = (row) => {
|
||||
ApiCopyExam({ ExamId: row.ExamId }).then(res => {
|
||||
console.log(res, 'res--')
|
||||
if (res.code === 0) {
|
||||
ElMessage({
|
||||
message: '操作成功',
|
||||
type: 'success'
|
||||
})
|
||||
queryData()
|
||||
} else {
|
||||
ElMessage.error(res?.data || '操作失敗')
|
||||
}
|
||||
const handChangeFile = (file, fileList) => {
|
||||
console.log('fileList', fileList)
|
||||
console.log('file', file)
|
||||
// fileListN = fileList
|
||||
fileM.value = file.raw
|
||||
fileListN.value = fileList
|
||||
loadSize('File')
|
||||
}
|
||||
// 删除文件
|
||||
const handleRemoveFile = (file, fileList) => {
|
||||
console.log('file', file.filePath)
|
||||
console.log('fileList', fileList)
|
||||
const formData = new FormData() // new一个formData事件
|
||||
formData.append('Path', file.filePath) // 将file属性添加到formData里
|
||||
// console.log(form.LauncherResources, 'data')
|
||||
DeleteFile({ Path: file.filePath }).then((res) => {
|
||||
console.log(res, 'res')
|
||||
form.LauncherResources = ''
|
||||
})
|
||||
}
|
||||
// 删除
|
||||
const handleDelete = (row) => {
|
||||
console.log(row.ExamId, 'row--')
|
||||
ElMessageBox.confirm('确定要删除吗?', {
|
||||
confirmButtonText: '确定',
|
||||
cancelButtonText: '取消',
|
||||
type: 'warning'
|
||||
}).then(() => {
|
||||
DeleteExam({ ExamId: row.ExamId }).then(res => {
|
||||
console.log(res, 'res--')
|
||||
if (res.code === 0) {
|
||||
ElMessage({
|
||||
message: '操作成功',
|
||||
type: 'success'
|
||||
const handleRemoveFile1 = (file, fileList) => {
|
||||
console.log('file', file.filePath)
|
||||
console.log('fileList', fileList)
|
||||
const formData = new FormData() // new一个formData事件
|
||||
formData.append('Path', file.filePath) // 将file属性添加到formData里
|
||||
// console.log(form.LauncherResources, 'data')
|
||||
DeleteFile({ Path: file.filePath }).then((res) => {
|
||||
console.log(res, 'res')
|
||||
form.UpdateResources = ''
|
||||
})
|
||||
queryData()
|
||||
} else {
|
||||
ElMessage.error(res?.data || '操作失敗')
|
||||
}
|
||||
const S4 = () => {
|
||||
return (((1 + Math.random()) * 0x10000) | 0).toString(16).substring(1)
|
||||
}
|
||||
const guid = () => {
|
||||
return (
|
||||
S4() +
|
||||
S4() +
|
||||
'-' +
|
||||
S4() +
|
||||
'-' +
|
||||
S4() +
|
||||
'-' +
|
||||
S4() +
|
||||
'-' +
|
||||
S4() +
|
||||
S4() +
|
||||
S4()
|
||||
)
|
||||
}
|
||||
const loadSize = (FolderName) => {
|
||||
const size = fileM.value.size // 文件大小
|
||||
const maxZrea = 8 // 设置每个分区大小 MB
|
||||
const bufferSize = maxZrea * (1024 * 1024)
|
||||
let fileStart = 0
|
||||
let fileEnd = bufferSize
|
||||
const arrFile = []
|
||||
while (fileStart < size) {
|
||||
const fileInfo = {
|
||||
File: fileM.value.slice(fileStart, fileEnd),
|
||||
Start: fileStart,
|
||||
End: fileEnd
|
||||
}
|
||||
arrFile.push(fileInfo)
|
||||
fileStart = fileEnd
|
||||
fileEnd = fileStart + bufferSize
|
||||
}
|
||||
const count = arrFile.length
|
||||
const filename = fileM.value.name + '~' + guid()
|
||||
const paramFilename = fileM.value.name// 上传filename
|
||||
// const filename = this.file.name; // 去掉文件后缀名
|
||||
test2(count, filename, bufferSize, arrFile, size, FolderName, paramFilename)
|
||||
}
|
||||
const test2 = async (count, filename, bufferSize, arrFile, size, FolderName, paramFilename) => {
|
||||
for (let i = 0; i < count; i++) {
|
||||
const formData = new FormData() // new一个formData事件
|
||||
formData.append('file', arrFile[i].File) // 将file属性添加到formData里
|
||||
const url =
|
||||
'?Name=' +
|
||||
filename +
|
||||
'&Number=' +
|
||||
i +
|
||||
'&BufferSize=' +
|
||||
bufferSize +
|
||||
'&Count=' +
|
||||
count +
|
||||
'&Start=' +
|
||||
arrFile[i].Start +
|
||||
'&End=' +
|
||||
arrFile[i].End +
|
||||
'&Size=' +
|
||||
size +
|
||||
'&FolderName=' +
|
||||
FolderName
|
||||
console.log('url', url)
|
||||
await apiUploadList(url, formData).then((res) => {
|
||||
console.log(filename, 'filename')
|
||||
|
||||
form.LauncherResources = res.data
|
||||
})
|
||||
})
|
||||
}
|
||||
}
|
||||
// 复制
|
||||
|
||||
|
|
@ -652,223 +524,6 @@ const handleUpdate = async () => {
|
|||
console.log(data.data, 'data')
|
||||
}
|
||||
|
||||
// 发布
|
||||
const handleReleaseExam = () => {
|
||||
if (multipleSelection.value?.length === 0) return ElMessage.error('请先选择')
|
||||
ElMessageBox.confirm('确定要发布吗?', {
|
||||
confirmButtonText: '确定',
|
||||
cancelButtonText: '取消',
|
||||
type: 'warning'
|
||||
}).then(() => {
|
||||
ApiReleaseExam({ ExamId: multipleSelection.value[0].ExamId }).then(res => {
|
||||
console.log(res, 'res--')
|
||||
if (res.code == 0) {
|
||||
ElMessage({
|
||||
message: '操作成功',
|
||||
type: 'success'
|
||||
})
|
||||
queryData()
|
||||
} else {
|
||||
ElMessage.error(res?.data || '操作失敗')
|
||||
}
|
||||
})
|
||||
})
|
||||
}
|
||||
|
||||
// 撤销发布
|
||||
const handleRevokeReleaseExam = () => {
|
||||
if (multipleSelection.value?.length === 0) return ElMessage.error('请先选择')
|
||||
ElMessageBox.confirm('确定要撤销发布吗?', {
|
||||
confirmButtonText: '确定',
|
||||
cancelButtonText: '取消',
|
||||
type: 'warning'
|
||||
}).then(() => {
|
||||
ApiRevokeReleaseExam({ ExamId: multipleSelection.value[0].ExamId }).then(res => {
|
||||
console.log(res, 'res--')
|
||||
if (res.code === 0) {
|
||||
ElMessage({
|
||||
message: '操作成功',
|
||||
type: 'success'
|
||||
})
|
||||
queryData()
|
||||
} else {
|
||||
ElMessage.error(res?.data || '操作失敗')
|
||||
}
|
||||
})
|
||||
})
|
||||
}
|
||||
|
||||
// 撤销发布
|
||||
const handleFinishedExam = () => {
|
||||
if (multipleSelection.value?.length === 0) return ElMessage.error('请先选择')
|
||||
ElMessageBox.confirm('确定要考试结束吗?', {
|
||||
confirmButtonText: '确定',
|
||||
cancelButtonText: '取消',
|
||||
type: 'warning'
|
||||
}).then(() => {
|
||||
ApiFinishedExam({ ExamId: multipleSelection.value[0].ExamId }).then(res => {
|
||||
console.log(res, 'res--')
|
||||
if (res.code === 0) {
|
||||
ElMessage({
|
||||
message: '操作成功',
|
||||
type: 'success'
|
||||
})
|
||||
queryData()
|
||||
} else {
|
||||
ElMessage.error(res?.data || '操作失敗')
|
||||
}
|
||||
})
|
||||
})
|
||||
}
|
||||
|
||||
// 考试名单
|
||||
const dialogTabular = ref(false)
|
||||
const stateA = reactive({
|
||||
total: 0,
|
||||
examRosterList: [],
|
||||
queryForm: {
|
||||
Name: '',
|
||||
Account: '',
|
||||
PageIndex: 1,
|
||||
PageSize: 10
|
||||
}
|
||||
})
|
||||
const handleExamination = async () => {
|
||||
if (multipleSelection.value?.length === 0) return ElMessage.error('请先选择')
|
||||
getExamination()
|
||||
getAddExamRosterListt()
|
||||
dialogTabular.value = true
|
||||
}
|
||||
|
||||
const getExamination = async () => {
|
||||
console.log(stateA.queryForm, ' stateA.queryForm--')
|
||||
const res = await ApiGetExamRosterList({
|
||||
ExamId: multipleSelection.value[0].ExamId,
|
||||
// ExamId: '048dd77b0a734856a86153e2feaa1d1d',
|
||||
...stateA.queryForm
|
||||
})
|
||||
dialogTabular.value = true
|
||||
stateA.examRosterList = res.data?.list || []
|
||||
stateA.total = res.data?.total
|
||||
console.log(res, 'res--ApiGetExamRosterList')
|
||||
}
|
||||
// 考试名单删除
|
||||
const handleCancel = (row) => {
|
||||
console.log(row.ExamUsersId, 'row--')
|
||||
ElMessageBox.confirm('确定要删除吗?', {
|
||||
confirmButtonText: '确定',
|
||||
cancelButtonText: '取消',
|
||||
type: 'warning'
|
||||
}).then(() => {
|
||||
DeleteExamRoster({ ExamUsersId: row.ExamUsersId }).then(res => {
|
||||
console.log(res, 'res--')
|
||||
if (res.code === 0) {
|
||||
ElMessage({
|
||||
message: '操作成功',
|
||||
type: 'success'
|
||||
})
|
||||
getExamination()
|
||||
getAddExamRosterListt()
|
||||
} else {
|
||||
ElMessage.error(res?.data || '操作失敗')
|
||||
}
|
||||
})
|
||||
})
|
||||
}
|
||||
|
||||
// 考试新增名单
|
||||
const dialogExamination = ref(false)
|
||||
|
||||
const rosterSelection = ref([])
|
||||
const handleSelChange = (val) => {
|
||||
console.log(val, 'val--')
|
||||
rosterSelection.value = val
|
||||
}
|
||||
|
||||
const stateB = reactive({
|
||||
total: 0,
|
||||
examRosterList: [],
|
||||
queryForm: {
|
||||
Name: '',
|
||||
Account: '',
|
||||
PageIndex: 1,
|
||||
PageSize: 10
|
||||
}
|
||||
})
|
||||
const handleCurrentChangeB = (val) => {
|
||||
stateB.queryForm.PageIndex = val
|
||||
getAddExamRosterListt()
|
||||
}
|
||||
const getAddExamRosterListt = async () => {
|
||||
console.log(stateA.queryForm, ' stateA.queryForm--')
|
||||
if (multipleSelection.value?.length === 0) return ElMessage.error('请先选择')
|
||||
const res = await ApiGetAddExamRosterListt({
|
||||
ExamId: multipleSelection.value[0].ExamId,
|
||||
// ExamId: '048dd77b0a734856a86153e2feaa1d1d',
|
||||
...stateB.queryForm
|
||||
})
|
||||
dialogTabular.value = true
|
||||
stateB.examRosterList = res.data?.list || []
|
||||
stateB.total = res.data?.total
|
||||
console.log(res, 'res--ApiGetExamRosterList')
|
||||
}
|
||||
|
||||
const addExamRoster = () => {
|
||||
if (multipleSelection.value?.length === 0) return ElMessage.error('请先选择')
|
||||
ApiAddExamRoster({
|
||||
ExamId: multipleSelection.value[0].ExamId,
|
||||
UserIdList: rosterSelection.value.map(item => item.UserId)
|
||||
}).then(res => {
|
||||
console.log(res, 'res--')
|
||||
if (res.code === 0) {
|
||||
ElMessage({
|
||||
message: '操作成功',
|
||||
type: 'success'
|
||||
})
|
||||
getExamination()
|
||||
getAddExamRosterListt()
|
||||
dialogExamination.value = false
|
||||
} else {
|
||||
ElMessage.error(res?.data || '操作失敗')
|
||||
}
|
||||
})
|
||||
}
|
||||
// 导入
|
||||
const dialogToLead = ref(false)
|
||||
|
||||
const uploadRef = ref()
|
||||
const handleExceed = (files) => {
|
||||
// submitUpload(files[0])
|
||||
uploadRef.value.clearFiles()
|
||||
nextTick(() => {
|
||||
uploadRef.value.handleStart(files[0])
|
||||
})
|
||||
}
|
||||
const handleChange = (uploadFile) => {
|
||||
console.log(uploadFile, 'uploadFile')
|
||||
// submitUpload(uploadFile.raw)
|
||||
}
|
||||
const submitUpload = () => {
|
||||
uploadRef.value.submit()
|
||||
}
|
||||
const toUpload = (param) => {
|
||||
if (!uploadRef.value) return ElMessage.error('请先上传文件')
|
||||
const formData = new FormData()
|
||||
formData.append('Files', param.file)
|
||||
apiUpload('', formData).then((res) => {
|
||||
console.log(res, 'res--')
|
||||
if (res.code === 0) {
|
||||
ElMessage({
|
||||
message: '上传成功',
|
||||
type: 'success'
|
||||
})
|
||||
queryData()
|
||||
} else {
|
||||
ElMessage.error(res?.data || '操作失敗')
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
</script>
|
||||
|
||||
<style scoped lang="scss">
|
||||
|
|
@ -1086,4 +741,20 @@ const toUpload = (param) => {
|
|||
.ml-3{
|
||||
margin-left: 20px;
|
||||
}
|
||||
.upload-file-uploader{
|
||||
width: 50%;
|
||||
}
|
||||
.el-upload-list .el-upload-list__item{
|
||||
width: 33% !important;
|
||||
float: left;
|
||||
margin-left: -385px;
|
||||
margin-top: 25px;
|
||||
|
||||
:deep(.horizontal-list ul .el-upload-list__item) {
|
||||
width: 33%;
|
||||
float: left; margin-top: 25px;
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
</style>
|
||||
|
|
|
|||
|
|
@ -39,8 +39,8 @@
|
|||
</div>
|
||||
<div class="Tabulation">
|
||||
<div class="actionBar">
|
||||
<h1>考试列表</h1>
|
||||
<div class="Worktop">
|
||||
<h1>模型列表</h1>
|
||||
<!-- <div class="Worktop">
|
||||
<el-button @click="goToAboutPage">编辑器</el-button>
|
||||
<el-button @click="handleReleaseExam">发布</el-button>
|
||||
<el-button @click="handleRevokeReleaseExam">撤销发布</el-button>
|
||||
|
|
@ -59,7 +59,7 @@
|
|||
<img src="../../assets/menu/delete.png" alt="" />
|
||||
<span>删除</span>
|
||||
</el-button>
|
||||
</div>
|
||||
</div> -->
|
||||
</div>
|
||||
<div class="ExaminationForm">
|
||||
<el-table
|
||||
|
|
@ -108,41 +108,97 @@
|
|||
center
|
||||
@close="closeDialog"
|
||||
>
|
||||
<el-form ref="formRef" :model="form" :rules="state.rules" :inline="true" :label-width="formLabelWidth">
|
||||
<el-form-item label="企业编号:" prop="ExamName">
|
||||
<el-input v-model="form.ExamName" />
|
||||
<el-form ref="formRef" :model="form" :rules="state.rules" :inline="false" :label-width="formLabelWidth">
|
||||
<!-- <el-form-item label="企业编号:" prop="EnterpriseCode" class="demo-form-scene">
|
||||
<el-input v-model="form.EnterpriseCode" />
|
||||
</el-form-item> -->
|
||||
<el-form-item label="企业编号:" prop="EnterpriseCode" class="demo-form-scene">
|
||||
<el-input v-model="form.EnterpriseCode" />
|
||||
</el-form-item>
|
||||
<el-form-item
|
||||
label="企业名称:"
|
||||
class="demo-form-scene"
|
||||
>
|
||||
<el-input v-model="form.ExamName" />
|
||||
<el-input v-model="form.EnterpriseName" />
|
||||
</el-form-item>
|
||||
<el-form-item
|
||||
label="关区编码:"
|
||||
class="demo-form-scene"
|
||||
>
|
||||
<el-input v-model="form.DistrictCode" />
|
||||
</el-form-item>
|
||||
<el-form-item label="模型名称:" >
|
||||
<el-input v-model="form.ExamName" />
|
||||
<el-input v-model="form.ModelName" />
|
||||
</el-form-item>
|
||||
<el-form-item label="版本号:" >
|
||||
<el-input v-model="form.ExamName" />
|
||||
<el-input v-model="form.VersionNumber" />
|
||||
</el-form-item>
|
||||
<el-form-item label="地图经度:" >
|
||||
<el-input v-model="form.ExaminationDuration" autocomplete="off" />
|
||||
<el-input v-model.number="form.MapLongitude" type="number" step="0.01"/>
|
||||
<span class="example">示例:YJV22-4*95/12米</span>
|
||||
</el-form-item>
|
||||
<el-form-item label="地图纬度:">
|
||||
<el-input v-model="form.IncomingLineModelLength" autocomplete="off" />
|
||||
<el-input v-model.number="form.MapLatitude" type="number" step="0.01" autocomplete="off" />
|
||||
<span class="example">示例:YJV22-4*95/12米</span>
|
||||
</el-form-item>
|
||||
<el-form-item label="模型包大小:">
|
||||
<el-input v-model="form.OutgoingLineModelLength" autocomplete="off" />
|
||||
<span class="example">示例:YJV22-4*95/12米</span>
|
||||
<el-input v-model="form.TrainingSize" autocomplete="off" />
|
||||
</el-form-item>
|
||||
<el-form-item label="模型包资源:">
|
||||
<el-input v-model="form.OutgoingLineModelLength" autocomplete="off" />
|
||||
<span class="example">示例:YJV22-4*95/12米</span>
|
||||
</el-form-item>
|
||||
<el-form-item label="更新时间:">
|
||||
<el-input v-model="form.OutgoingLineModelLength" autocomplete="off" />
|
||||
<span class="example">示例:YJV22-4*95/12米</span>
|
||||
<!-- <el-input v-model="form.ModelResources" autocomplete="off" /> -->
|
||||
<el-upload
|
||||
:action="action"
|
||||
:before-remove="handleRemoveFile"
|
||||
:file-list="fileListFile"
|
||||
multiple
|
||||
accept=".pdf,.doc,.docx,.excel,.ppt,.pptx,.word,.xlsx,.RTF, .xls"
|
||||
:on-error="handleUploadError"
|
||||
:on-exceed="handleExceed"
|
||||
:on-success="handleUploadSuccess"
|
||||
:on-change="handChangeFile"
|
||||
:on-preview="handleFormPreview"
|
||||
:http-request="httpRequest"
|
||||
:show-file-list="true"
|
||||
:auto-upload="false"
|
||||
class="upload-file-uploader horizontal-list"
|
||||
ref="upload"
|
||||
>
|
||||
<!-- 上传按钮 -->
|
||||
<template v-slot:trigger>
|
||||
<el-button size="mini" type="primary">上传文件</el-button>
|
||||
</template>
|
||||
</el-upload>
|
||||
<!-- 文件列表 -->
|
||||
<!-- 文件列表 -->
|
||||
<transition-group
|
||||
class="upload-file-list el-upload-list el-upload-list--text"
|
||||
name="el-fade-in-linear"
|
||||
tag="ul"
|
||||
>
|
||||
<li
|
||||
:key="file.uid"
|
||||
class="el-upload-list__item ele-upload-list__item-content"
|
||||
v-for="(file, index) in fileListFile"
|
||||
>
|
||||
<el-link :href="file.filePath" :underline="false" target="_blank">
|
||||
<span class="el-icon-document">
|
||||
{{ file. fileName}}
|
||||
</span>
|
||||
</el-link>
|
||||
<!-- <div class="ele-upload-list__item-content-action">
|
||||
<el-link
|
||||
:underline="false"
|
||||
@click="handleDelete(index)"
|
||||
type="danger"
|
||||
>删除</el-link
|
||||
>
|
||||
</div> -->
|
||||
</li>
|
||||
</transition-group>
|
||||
</el-form-item>
|
||||
<!-- <el-form-item label="最新更新时间:">
|
||||
<el-input v-model="form.UpdateTime" autocomplete="off" />
|
||||
</el-form-item> -->
|
||||
</el-form>
|
||||
<template #footer>
|
||||
<div class="dialog-footer">
|
||||
|
|
@ -162,24 +218,10 @@ import { ElTable, ElMessageBox, ElMessage } from 'element-plus'
|
|||
import { useRouter } from 'vue-router'
|
||||
import {
|
||||
GetModelList,
|
||||
AddExam,
|
||||
EditExam,
|
||||
apiUploadList,
|
||||
EditModel,
|
||||
GetModelDetails,
|
||||
EditExamList,
|
||||
DeleteExam,
|
||||
GetScene,
|
||||
GetPlatformArea,
|
||||
GetLine,
|
||||
ApiReleaseExam,
|
||||
ApiRevokeReleaseExam,
|
||||
ApiFinishedExam,
|
||||
ApiCopyExam,
|
||||
ApiDownloadExamm,
|
||||
ApiGetExamRosterList,
|
||||
DeleteExamRoster,
|
||||
ApiGetAddExamRosterListt,
|
||||
ApiAddExamRoster,
|
||||
apiUpload
|
||||
DeleteFile
|
||||
|
||||
} from '@/api/index.js'
|
||||
|
||||
|
|
@ -222,11 +264,12 @@ const state = reactive({
|
|||
const form = reactive({
|
||||
EnterpriseName: '',
|
||||
DistrictCode: '',
|
||||
EnterpriseCode: '',
|
||||
ModelName: '',
|
||||
VersionNumber: '',
|
||||
MapLongitude: '',
|
||||
MapLatitude: '',
|
||||
Trainingsize: '',
|
||||
TrainingSize: '',
|
||||
ModelResources: '',
|
||||
UpdateTime: ''
|
||||
// WorkOrderContent: '',
|
||||
|
|
@ -239,17 +282,6 @@ const form = reactive({
|
|||
// 查询列表
|
||||
onMounted(() => {
|
||||
getTable()
|
||||
// addTable()
|
||||
GetScene().then(res => {
|
||||
state.scenemList = res.data
|
||||
console.log(res.data, 'res.data--')
|
||||
})
|
||||
GetPlatformArea({
|
||||
SceneId: 'eab5920509b011ed844e7cd30a92bb1c'
|
||||
}).then(res => state.platformAreaList = res.data)
|
||||
GetLine({
|
||||
PlatformAreaId: '28f0723409b111ed844e7cd30a92bb1c'
|
||||
}).then(res => state.lineList = res.data)
|
||||
})
|
||||
|
||||
// 考试列表
|
||||
|
|
@ -276,6 +308,120 @@ const getTable = async () => {
|
|||
} catch (error) {}
|
||||
}
|
||||
|
||||
// 删除文件
|
||||
const handleRemoveFile = (file, fileList) => {
|
||||
console.log('file', file.filePath)
|
||||
console.log('fileList', fileList)
|
||||
const formData = new FormData() // new一个formData事件
|
||||
formData.append('Path', file.filePath) // 将file属性添加到formData里
|
||||
// console.log(form.ModelResources, 'data')
|
||||
DeleteFile({ Path: file.filePath }).then((res) => {
|
||||
console.log(res, 'res')
|
||||
form.ModelResources = ''
|
||||
})
|
||||
}
|
||||
const fileM = ref('')
|
||||
const fileListN = ref([])
|
||||
const fileListFile = ref([])
|
||||
/** 上传文件状态改变时调用 */
|
||||
const handChangeFile = (file, fileList) => {
|
||||
console.log('fileList', fileList)
|
||||
console.log('file', file)
|
||||
// fileListN = fileList
|
||||
fileM.value = file.raw
|
||||
fileListN.value = fileList
|
||||
loadSize('File')
|
||||
}
|
||||
|
||||
const S4 = () => {
|
||||
return (((1 + Math.random()) * 0x10000) | 0).toString(16).substring(1)
|
||||
}
|
||||
const guid = () => {
|
||||
return (
|
||||
S4() +
|
||||
S4() +
|
||||
'-' +
|
||||
S4() +
|
||||
'-' +
|
||||
S4() +
|
||||
'-' +
|
||||
S4() +
|
||||
'-' +
|
||||
S4() +
|
||||
S4() +
|
||||
S4()
|
||||
)
|
||||
}
|
||||
const loadSize = (FolderName) => {
|
||||
const size = fileM.value.size // 文件大小
|
||||
const maxZrea = 8 // 设置每个分区大小 MB
|
||||
const bufferSize = maxZrea * (1024 * 1024)
|
||||
let fileStart = 0
|
||||
let fileEnd = bufferSize
|
||||
const arrFile = []
|
||||
while (fileStart < size) {
|
||||
const fileInfo = {
|
||||
File: fileM.value.slice(fileStart, fileEnd),
|
||||
Start: fileStart,
|
||||
End: fileEnd
|
||||
}
|
||||
arrFile.push(fileInfo)
|
||||
fileStart = fileEnd
|
||||
fileEnd = fileStart + bufferSize
|
||||
}
|
||||
const count = arrFile.length
|
||||
const filename = fileM.value.name + '~' + guid()
|
||||
const paramFilename = fileM.value.name// 上传filename
|
||||
// const filename = this.file.name; // 去掉文件后缀名
|
||||
test2(count, filename, bufferSize, arrFile, size, FolderName, paramFilename)
|
||||
}
|
||||
const test2 = async (count, filename, bufferSize, arrFile, size, FolderName, paramFilename) => {
|
||||
for (let i = 0; i < count; i++) {
|
||||
const formData = new FormData() // new一个formData事件
|
||||
formData.append('file', arrFile[i].File) // 将file属性添加到formData里
|
||||
const url =
|
||||
'?Name=' +
|
||||
filename +
|
||||
'&Number=' +
|
||||
i +
|
||||
'&BufferSize=' +
|
||||
bufferSize +
|
||||
'&Count=' +
|
||||
count +
|
||||
'&Start=' +
|
||||
arrFile[i].Start +
|
||||
'&End=' +
|
||||
arrFile[i].End +
|
||||
'&Size=' +
|
||||
size +
|
||||
'&FolderName=' +
|
||||
FolderName
|
||||
console.log('url', url)
|
||||
await apiUploadList(url, formData).then((res) => {
|
||||
console.log(filename, 'filename')
|
||||
form.ModelResources = res.data
|
||||
})
|
||||
}
|
||||
}
|
||||
// 预览文档
|
||||
const handleFormPreview = (file) => {
|
||||
// file.url = file.name;//视频路径
|
||||
console.log('预览文件', file.name)
|
||||
let fileUrl = ''
|
||||
// 循环查找视频路径地址
|
||||
this.formData.FileData.forEach((item, index) => {
|
||||
if (file.name == item.FileName) {
|
||||
const href = window.location.href
|
||||
const regex = /^https?:\/\/([^/:]+):?(\d+)?/i
|
||||
const match = href.match(regex)
|
||||
console.log('match', match)
|
||||
fileUrl = match[0] + item.FilePath
|
||||
}
|
||||
})
|
||||
const blob = new Blob([fileUrl], { type: 'application/msword' })
|
||||
window.open(fileUrl, '_block')
|
||||
console.log(fileUrl, '文件')
|
||||
}
|
||||
const multipleTableRef = ref()
|
||||
const multipleSelection = ref([])
|
||||
const handleSelectionChange = (val) => {
|
||||
|
|
@ -307,67 +453,40 @@ const handleCurrentChange = (val) => {
|
|||
formInline.PageIndex = val
|
||||
getTable()
|
||||
}
|
||||
const ExamId = ref('')
|
||||
const EnterpriseCode = ref('')
|
||||
const handleEdit = async (row) => {
|
||||
// fileListFile.value = ref([])
|
||||
const fileListFile1 = ref([])
|
||||
const res = await GetModelDetails({ EnterpriseCode: row.EnterpriseCode })
|
||||
console.log(res.data, 'res--')
|
||||
for (const key in form) {
|
||||
form[key] = res.data[key]
|
||||
}
|
||||
// ExamId.value = res.data.ExamId
|
||||
EnterpriseCode.value = res.data.EnterpriseCode
|
||||
dialogFormVisible.value = true
|
||||
const parts = res.data.ModelResources.split('/')
|
||||
fileListFile1.value.push({
|
||||
filePath: res.data.ModelResources,
|
||||
fileName: parts[parts.length - 1]
|
||||
})
|
||||
fileListFile.value = fileListFile1.value
|
||||
}
|
||||
const handleCopy = (row) => {
|
||||
ApiCopyExam({ ExamId: row.ExamId }).then(res => {
|
||||
console.log(res, 'res--')
|
||||
if (res.code === 0) {
|
||||
ElMessage({
|
||||
message: '操作成功',
|
||||
type: 'success'
|
||||
})
|
||||
queryData()
|
||||
} else {
|
||||
ElMessage.error(res?.data || '操作失敗')
|
||||
}
|
||||
})
|
||||
}
|
||||
// 删除
|
||||
const handleDelete = (row) => {
|
||||
console.log(row.ExamId, 'row--')
|
||||
ElMessageBox.confirm('确定要删除吗?', {
|
||||
confirmButtonText: '确定',
|
||||
cancelButtonText: '取消',
|
||||
type: 'warning'
|
||||
}).then(() => {
|
||||
DeleteExam({ ExamId: row.ExamId }).then(res => {
|
||||
console.log(res, 'res--')
|
||||
if (res.code === 0) {
|
||||
ElMessage({
|
||||
message: '操作成功',
|
||||
type: 'success'
|
||||
})
|
||||
queryData()
|
||||
} else {
|
||||
ElMessage.error(res?.data || '操作失敗')
|
||||
}
|
||||
})
|
||||
})
|
||||
}
|
||||
|
||||
// 复制
|
||||
|
||||
// 保存
|
||||
const submit = () => {
|
||||
formRef.value.validate(async (valid) => {
|
||||
console.log(form, 'from--')
|
||||
if (valid) {
|
||||
const obj = state.platformAreaList.find(v => v.PlatformAreaId == form.PlatformAreaId)
|
||||
console.log(obj, 'obj--')
|
||||
// if (valid) {
|
||||
EditModel({
|
||||
EnterpriseCode: form.EnterpriseCode,
|
||||
ModelName: form.ModelName,
|
||||
VersionNumber: form.VersionNumber,
|
||||
MapLongitude: form.MapLongitude,
|
||||
MapLatitude: form.MapLatitude,
|
||||
TrainingSize: form.TrainingSize,
|
||||
ModelResources: form.ModelResources
|
||||
|
||||
if (ExamId.value) {
|
||||
EditExam({
|
||||
...form,
|
||||
PlatformArea: obj?.PlatformAreaName || '',
|
||||
ExamId: ExamId.value
|
||||
}).then(res => {
|
||||
console.log(res, 'res--')
|
||||
if (res.code == 0) {
|
||||
|
|
@ -381,26 +500,7 @@ const submit = () => {
|
|||
ElMessage.error(res?.data || '操作失敗')
|
||||
}
|
||||
})
|
||||
} else {
|
||||
form.Type = '考试'
|
||||
AddExam({
|
||||
...form,
|
||||
PlatformArea: obj?.PlatformAreaName || ''
|
||||
}).then(res => {
|
||||
console.log(res, 'res--')
|
||||
if (res.code == 0) {
|
||||
ElMessage({
|
||||
message: '操作成功.',
|
||||
type: 'success'
|
||||
})
|
||||
closeDialog()
|
||||
queryData()
|
||||
} else {
|
||||
ElMessage.error(res?.data || '操作失敗')
|
||||
}
|
||||
})
|
||||
}
|
||||
}
|
||||
// }
|
||||
})
|
||||
}
|
||||
// 取消
|
||||
|
|
@ -408,240 +508,22 @@ const closeDialog = () => {
|
|||
for (const key in form) {
|
||||
form[key] = ''
|
||||
}
|
||||
ExamId.value = ''
|
||||
EnterpriseCode.value = ''
|
||||
dialogFormVisible.value = false
|
||||
}
|
||||
|
||||
// 跳转编辑器
|
||||
const router = useRouter()
|
||||
const goToAboutPage = () => {
|
||||
if (multipleSelection.value?.length === 0) return ElMessage.error('请先选择')
|
||||
router.push(`/EditorMacros?ExamId=${multipleSelection.value[0].ExamId}`) // 跳转到指定路由
|
||||
}
|
||||
// 编辑弹框
|
||||
const EditFormVisible = ref(false)
|
||||
const EditExamtableData = ref()
|
||||
const handleUpdate = async () => {
|
||||
EditFormVisible.value = true
|
||||
const data = await EditExamList()
|
||||
console.log(data.data, 'data')
|
||||
}
|
||||
|
||||
// 发布
|
||||
const handleReleaseExam = () => {
|
||||
if (multipleSelection.value?.length === 0) return ElMessage.error('请先选择')
|
||||
ElMessageBox.confirm('确定要发布吗?', {
|
||||
confirmButtonText: '确定',
|
||||
cancelButtonText: '取消',
|
||||
type: 'warning'
|
||||
}).then(() => {
|
||||
ApiReleaseExam({ ExamId: multipleSelection.value[0].ExamId }).then(res => {
|
||||
console.log(res, 'res--')
|
||||
if (res.code == 0) {
|
||||
ElMessage({
|
||||
message: '操作成功',
|
||||
type: 'success'
|
||||
})
|
||||
queryData()
|
||||
} else {
|
||||
ElMessage.error(res?.data || '操作失敗')
|
||||
}
|
||||
})
|
||||
})
|
||||
}
|
||||
|
||||
// 撤销发布
|
||||
const handleRevokeReleaseExam = () => {
|
||||
if (multipleSelection.value?.length === 0) return ElMessage.error('请先选择')
|
||||
ElMessageBox.confirm('确定要撤销发布吗?', {
|
||||
confirmButtonText: '确定',
|
||||
cancelButtonText: '取消',
|
||||
type: 'warning'
|
||||
}).then(() => {
|
||||
ApiRevokeReleaseExam({ ExamId: multipleSelection.value[0].ExamId }).then(res => {
|
||||
console.log(res, 'res--')
|
||||
if (res.code === 0) {
|
||||
ElMessage({
|
||||
message: '操作成功',
|
||||
type: 'success'
|
||||
})
|
||||
queryData()
|
||||
} else {
|
||||
ElMessage.error(res?.data || '操作失敗')
|
||||
}
|
||||
})
|
||||
})
|
||||
}
|
||||
|
||||
// 撤销发布
|
||||
const handleFinishedExam = () => {
|
||||
if (multipleSelection.value?.length === 0) return ElMessage.error('请先选择')
|
||||
ElMessageBox.confirm('确定要考试结束吗?', {
|
||||
confirmButtonText: '确定',
|
||||
cancelButtonText: '取消',
|
||||
type: 'warning'
|
||||
}).then(() => {
|
||||
ApiFinishedExam({ ExamId: multipleSelection.value[0].ExamId }).then(res => {
|
||||
console.log(res, 'res--')
|
||||
if (res.code === 0) {
|
||||
ElMessage({
|
||||
message: '操作成功',
|
||||
type: 'success'
|
||||
})
|
||||
queryData()
|
||||
} else {
|
||||
ElMessage.error(res?.data || '操作失敗')
|
||||
}
|
||||
})
|
||||
})
|
||||
}
|
||||
|
||||
// 考试名单
|
||||
const dialogTabular = ref(false)
|
||||
const stateA = reactive({
|
||||
total: 0,
|
||||
examRosterList: [],
|
||||
queryForm: {
|
||||
Name: '',
|
||||
Account: '',
|
||||
PageIndex: 1,
|
||||
PageSize: 10
|
||||
}
|
||||
})
|
||||
const handleExamination = async () => {
|
||||
if (multipleSelection.value?.length === 0) return ElMessage.error('请先选择')
|
||||
getExamination()
|
||||
getAddExamRosterListt()
|
||||
dialogTabular.value = true
|
||||
}
|
||||
|
||||
const getExamination = async () => {
|
||||
console.log(stateA.queryForm, ' stateA.queryForm--')
|
||||
const res = await ApiGetExamRosterList({
|
||||
ExamId: multipleSelection.value[0].ExamId,
|
||||
// ExamId: '048dd77b0a734856a86153e2feaa1d1d',
|
||||
...stateA.queryForm
|
||||
})
|
||||
dialogTabular.value = true
|
||||
stateA.examRosterList = res.data?.list || []
|
||||
stateA.total = res.data?.total
|
||||
console.log(res, 'res--ApiGetExamRosterList')
|
||||
}
|
||||
// 考试名单删除
|
||||
const handleCancel = (row) => {
|
||||
console.log(row.ExamUsersId, 'row--')
|
||||
ElMessageBox.confirm('确定要删除吗?', {
|
||||
confirmButtonText: '确定',
|
||||
cancelButtonText: '取消',
|
||||
type: 'warning'
|
||||
}).then(() => {
|
||||
DeleteExamRoster({ ExamUsersId: row.ExamUsersId }).then(res => {
|
||||
console.log(res, 'res--')
|
||||
if (res.code === 0) {
|
||||
ElMessage({
|
||||
message: '操作成功',
|
||||
type: 'success'
|
||||
})
|
||||
getExamination()
|
||||
getAddExamRosterListt()
|
||||
} else {
|
||||
ElMessage.error(res?.data || '操作失敗')
|
||||
}
|
||||
})
|
||||
})
|
||||
}
|
||||
|
||||
// 考试新增名单
|
||||
const dialogExamination = ref(false)
|
||||
|
||||
const rosterSelection = ref([])
|
||||
const handleSelChange = (val) => {
|
||||
console.log(val, 'val--')
|
||||
rosterSelection.value = val
|
||||
}
|
||||
|
||||
const stateB = reactive({
|
||||
total: 0,
|
||||
examRosterList: [],
|
||||
queryForm: {
|
||||
Name: '',
|
||||
Account: '',
|
||||
PageIndex: 1,
|
||||
PageSize: 10
|
||||
}
|
||||
})
|
||||
const handleCurrentChangeB = (val) => {
|
||||
stateB.queryForm.PageIndex = val
|
||||
getAddExamRosterListt()
|
||||
}
|
||||
const getAddExamRosterListt = async () => {
|
||||
console.log(stateA.queryForm, ' stateA.queryForm--')
|
||||
if (multipleSelection.value?.length === 0) return ElMessage.error('请先选择')
|
||||
const res = await ApiGetAddExamRosterListt({
|
||||
ExamId: multipleSelection.value[0].ExamId,
|
||||
// ExamId: '048dd77b0a734856a86153e2feaa1d1d',
|
||||
...stateB.queryForm
|
||||
})
|
||||
dialogTabular.value = true
|
||||
stateB.examRosterList = res.data?.list || []
|
||||
stateB.total = res.data?.total
|
||||
console.log(res, 'res--ApiGetExamRosterList')
|
||||
}
|
||||
|
||||
const addExamRoster = () => {
|
||||
if (multipleSelection.value?.length === 0) return ElMessage.error('请先选择')
|
||||
ApiAddExamRoster({
|
||||
ExamId: multipleSelection.value[0].ExamId,
|
||||
UserIdList: rosterSelection.value.map(item => item.UserId)
|
||||
}).then(res => {
|
||||
console.log(res, 'res--')
|
||||
if (res.code === 0) {
|
||||
ElMessage({
|
||||
message: '操作成功',
|
||||
type: 'success'
|
||||
})
|
||||
getExamination()
|
||||
getAddExamRosterListt()
|
||||
dialogExamination.value = false
|
||||
} else {
|
||||
ElMessage.error(res?.data || '操作失敗')
|
||||
}
|
||||
})
|
||||
}
|
||||
// 导入
|
||||
const dialogToLead = ref(false)
|
||||
|
||||
const uploadRef = ref()
|
||||
const handleExceed = (files) => {
|
||||
// submitUpload(files[0])
|
||||
uploadRef.value.clearFiles()
|
||||
nextTick(() => {
|
||||
uploadRef.value.handleStart(files[0])
|
||||
})
|
||||
}
|
||||
const handleChange = (uploadFile) => {
|
||||
console.log(uploadFile, 'uploadFile')
|
||||
// submitUpload(uploadFile.raw)
|
||||
}
|
||||
const submitUpload = () => {
|
||||
uploadRef.value.submit()
|
||||
}
|
||||
const toUpload = (param) => {
|
||||
if (!uploadRef.value) return ElMessage.error('请先上传文件')
|
||||
const formData = new FormData()
|
||||
formData.append('Files', param.file)
|
||||
apiUpload('', formData).then((res) => {
|
||||
console.log(res, 'res--')
|
||||
if (res.code === 0) {
|
||||
ElMessage({
|
||||
message: '上传成功',
|
||||
message: '只允许上传1个文件.',
|
||||
type: 'success'
|
||||
})
|
||||
queryData()
|
||||
} else {
|
||||
ElMessage.error(res?.data || '操作失敗')
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
</script>
|
||||
|
|
@ -861,4 +743,24 @@ const toUpload = (param) => {
|
|||
.ml-3{
|
||||
margin-left: 20px;
|
||||
}
|
||||
.upload-file-uploader{
|
||||
width: 50%;
|
||||
}
|
||||
.el-upload-list .el-upload-list__item{
|
||||
width: 33% !important;
|
||||
float: left;
|
||||
margin-left: -385px;
|
||||
margin-top: 25px;
|
||||
:deep(.horizontal-list ul .el-upload-list__item) {
|
||||
width: 33% !important;
|
||||
float: left; margin-top: 25px;
|
||||
}
|
||||
:deep(.el-link__inner ) {
|
||||
display: inline-flex;
|
||||
justify-content: center;
|
||||
align-items: center;
|
||||
width: 200px;
|
||||
}
|
||||
}
|
||||
|
||||
</style>
|
||||
|
|
|
|||
Loading…
Reference in New Issue