Commit 41e7a6e5 by H.wb.wang.peixun

接口对接

parent b43868a1
......@@ -103,87 +103,22 @@ export default {
},
},
methods: {
// 上传前校检格式和大小
handleBeforeUpload(file) {
// 校检文件类型
if (this.fileType) {
const fileName = file.name.split('.');
const fileExt = fileName[fileName.length - 1];
const isTypeOk = this.fileType.indexOf(fileExt) >= 0;
if (!isTypeOk) {
this.$modal.msgError(`文件格式不正确, 请上传${this.fileType.join("/")}格式文件!`);
return false;
}
}
// 校检文件大小
if (this.fileSize) {
const isLt = file.size / 1024 / 1024 < this.fileSize;
if (!isLt) {
this.$modal.msgError(`上传文件大小不能超过 ${this.fileSize} MB!`);
return false;
}
}
this.$modal.loading("正在上传文件,请稍候...");
this.number++;
return true;
},
// 文件个数超出
handleExceed() {
this.$modal.msgError(`上传文件数量不能超过 ${this.limit} 个!`);
},
// 上传失败
handleUploadError(err) {
this.$modal.msgError("上传文件失败,请重试");
this.$modal.closeLoading();
},
// 上传成功回调
handleUploadSuccess(res, file) {
if (res.code === 200) {
this.uploadList.push({ name: res.data.fileName, url: res.data.url, ossId: res.data.ossId });
this.uploadedSuccessfully();
} else {
this.number--;
this.$modal.closeLoading();
this.$modal.msgError(res.msg);
this.$refs.fileUpload.handleRemove(file);
this.uploadedSuccessfully();
}
// 文件上传中处理
handleFileUploadProgress(event, file, fileList) {
this.upload.isUploading = true;
},
// 删除文件
handleDelete(index) {
let ossId = this.fileList[index].ossId;
delOss(ossId);
this.fileList.splice(index, 1);
this.$emit("input", this.listToString(this.fileList));
},
// 上传结束处理
uploadedSuccessfully() {
if (this.number > 0 && this.uploadList.length === this.number) {
this.fileList = this.fileList.concat(this.uploadList);
this.uploadList = [];
this.number = 0;
this.$emit("input", this.listToString(this.fileList));
this.$modal.closeLoading();
}
},
// 获取文件名称
getFileName(name) {
// 如果是url那么取最后的名字 如果不是直接返回
if (name.lastIndexOf("/") > -1) {
return name.slice(name.lastIndexOf("/") + 1);
} else {
return name;
}
},
// 对象转成指定字符串分隔
listToString(list, separator) {
let strs = "";
separator = separator || ",";
for (let i in list) {
strs += list[i].ossId + separator;
}
return strs != "" ? strs.substr(0, strs.length - 1) : "";
// 文件上传成功处理
handleFileSuccess(response, file, fileList) {
this.upload.open = false;
this.upload.isUploading = false;
this.$refs.upload.clearFiles();
this.$alert("<div style='overflow: auto;overflow-x: hidden;max-height: 70vh;padding: 10px 20px 0;'>" + response.msg + "</div>", "导入结果", { dangerouslyUseHTMLString: true });
this.getList();
},
// 提交上传文件
submitFileForm() {
this.$refs.upload.submit();
}
},
};
</script>
......
<template>
<div>
<el-upload
:action="uploadUrl"
:before-upload="handleBeforeUpload"
:on-success="handleUploadSuccess"
:on-error="handleUploadError"
name="file"
:show-file-list="false"
:headers="headers"
style="display: none"
ref="upload"
v-if="this.type == 'url'"
>
<el-upload :action="uploadUrl" :before-upload="handleBeforeUpload" :on-success="handleUploadSuccess"
:on-error="handleUploadError" name="file" :show-file-list="false" :headers="headers" style="display: none"
ref="upload" v-if="this.type == 'url'">
</el-upload>
<div class="editor" ref="editor" :style="styles"></div>
</div>
......@@ -23,6 +14,7 @@ import "quill/dist/quill.core.css";
import "quill/dist/quill.snow.css";
import "quill/dist/quill.bubble.css";
import { getToken } from "@/utils/auth";
import $axios from 'axios'
export default {
name: "Editor",
......@@ -111,10 +103,15 @@ export default {
watch: {
value: {
handler(val) {
console.log(val, 'val-------------')
if (val !== this.currentValue) {
this.currentValue = val === null ? "" : val;
console.log(this.currentValue, 'val-------------11111111')
if (this.Quill) {
this.Quill.pasteHTML(this.currentValue);
console.log(this.Quill, 'val-------------2222222222222')
}
}
},
......@@ -131,6 +128,48 @@ export default {
init() {
const editor = this.$refs.editor;
this.Quill = new Quill(editor, this.options);
window.addEventListener(
"paste",
(evt) => {
if (
evt.clipboardData &&
evt.clipboardData.files &&
evt.clipboardData.files.length
) {
evt.preventDefault();
[].forEach.call(evt.clipboardData.files, (file) => {
if (!file.type.match(/^image\/(gif|jpe?g|a?png|bmp)/i)) {
return;
}
const formData = new FormData();
formData.append("file", file);
$axios.post(`${process.env.VUE_APP_BASE_API}school-paper/banner/uploadFile`, formData, {
headers: {
'Authorization': 'Bearer ' + getToken()
}
}).then(
res => {
console.log(res);
if (res.data.code == 200) {
console.log(res.data.data.src)
let length = this.Quill.getSelection().index; //光标位置
// 插入图片地址
this.Quill.insertEmbed(length, "image", res.data.data.url);
// 光标后移一位
this.Quill.setSelection(length + 1);
} else {
this.$message({
message: res.data.message,
type: 'warning'
});
}
})
});
}
},
false
);
// 如果设置了上传地址则自定义图片上传事件
if (this.type == "url") {
let toolbar = this.Quill.getModule("toolbar");
......@@ -202,12 +241,15 @@ export default {
white-space: pre-wrap !important;
line-height: normal !important;
}
.quill-img {
display: none;
}
.ql-snow .ql-tooltip[data-mode="link"]::before {
content: "请输入链接地址:";
}
.ql-snow .ql-tooltip.ql-editing a.ql-action::after {
border-right: 0px;
content: "保存";
......@@ -222,14 +264,17 @@ export default {
.ql-snow .ql-picker.ql-size .ql-picker-item::before {
content: "14px";
}
.ql-snow .ql-picker.ql-size .ql-picker-label[data-value="small"]::before,
.ql-snow .ql-picker.ql-size .ql-picker-item[data-value="small"]::before {
content: "10px";
}
.ql-snow .ql-picker.ql-size .ql-picker-label[data-value="large"]::before,
.ql-snow .ql-picker.ql-size .ql-picker-item[data-value="large"]::before {
content: "18px";
}
.ql-snow .ql-picker.ql-size .ql-picker-label[data-value="huge"]::before,
.ql-snow .ql-picker.ql-size .ql-picker-item[data-value="huge"]::before {
content: "32px";
......@@ -239,26 +284,32 @@ export default {
.ql-snow .ql-picker.ql-header .ql-picker-item::before {
content: "文本";
}
.ql-snow .ql-picker.ql-header .ql-picker-label[data-value="1"]::before,
.ql-snow .ql-picker.ql-header .ql-picker-item[data-value="1"]::before {
content: "标题1";
}
.ql-snow .ql-picker.ql-header .ql-picker-label[data-value="2"]::before,
.ql-snow .ql-picker.ql-header .ql-picker-item[data-value="2"]::before {
content: "标题2";
}
.ql-snow .ql-picker.ql-header .ql-picker-label[data-value="3"]::before,
.ql-snow .ql-picker.ql-header .ql-picker-item[data-value="3"]::before {
content: "标题3";
}
.ql-snow .ql-picker.ql-header .ql-picker-label[data-value="4"]::before,
.ql-snow .ql-picker.ql-header .ql-picker-item[data-value="4"]::before {
content: "标题4";
}
.ql-snow .ql-picker.ql-header .ql-picker-label[data-value="5"]::before,
.ql-snow .ql-picker.ql-header .ql-picker-item[data-value="5"]::before {
content: "标题5";
}
.ql-snow .ql-picker.ql-header .ql-picker-label[data-value="6"]::before,
.ql-snow .ql-picker.ql-header .ql-picker-item[data-value="6"]::before {
content: "标题6";
......@@ -268,10 +319,12 @@ export default {
.ql-snow .ql-picker.ql-font .ql-picker-item::before {
content: "标准字体";
}
.ql-snow .ql-picker.ql-font .ql-picker-label[data-value="serif"]::before,
.ql-snow .ql-picker.ql-font .ql-picker-item[data-value="serif"]::before {
content: "衬线字体";
}
.ql-snow .ql-picker.ql-font .ql-picker-label[data-value="monospace"]::before,
.ql-snow .ql-picker.ql-font .ql-picker-item[data-value="monospace"]::before {
content: "等宽字体";
......
......@@ -99,11 +99,12 @@ export default {
// })
}
// 然后将数组转为对象数组
// this.fileList = list.map(item => {
// item = { url: item.url};
// item.uid = item.uid || new Date().getTime() + temp++;
// return item;
// });
this.fileList = list.map(item => {
item = { url: item.url,name:item.name};
// item.uid = item.uid || new Date().getTime() + temp++;
return item;
});
console.log(this.fileList,'fileList---------')
} else {
this.fileList = [];
return [];
......@@ -185,6 +186,7 @@ export default {
},
// 获取文件名称
getFileName(name) {
console.log(name,'===========')
// 如果是url那么取最后的名字 如果不是直接返回
if (name.lastIndexOf("/") > -1) {
return name.slice(name.lastIndexOf("/") + 1);
......
......@@ -2,12 +2,7 @@
<div class="app-container">
<el-form :model="queryParams" ref="queryForm" size="small" :inline="true" v-show="showSearch" label-width="68px">
<el-form-item label="资料管理" prop="profileName">
<el-input
v-model="queryParams.profileName"
placeholder="请输入资料名称搜索"
clearable
@keyup.enter.native="handleQuery"
/>
<el-input v-model="queryParams.profileName" placeholder="请输入资料名称搜索" clearable @keyup.enter.native="handleQuery" />
</el-form-item>
<!-- <el-form-item label="资料地址" prop="profileUrl">
<el-input
......@@ -25,12 +20,8 @@
<el-row :gutter="10" class="mb8">
<el-col :span="1.5">
<el-button
type="primary"
size="mini"
@click="handleAdd"
v-hasPermi="['school-paper:profile:add']"
>上传资料</el-button>
<el-button type="primary" size="mini" @click="handleAdd"
v-hasPermi="['school-paper:profile:add']">上传资料</el-button>
</el-col>
<!-- <el-col :span="1.5">
<el-button
......@@ -70,40 +61,25 @@
<el-table v-loading="loading" :data="profileList" @selection-change="handleSelectionChange">
<!-- <el-table-column type="selection" width="55" align="center" /> -->
<!-- <el-table-column label="主键id" align="center" prop="id" v-if="true"/> -->
<el-table-column label="资料名称" prop="profileName" />
<el-table-column label="上传者" prop="createBy" />
<el-table-column label="资料名称" prop="profileName" />
<el-table-column label="上传者" prop="createBy" />
<!-- <el-table-column label="备注" align="center" prop="remark" />
<el-table-column label="状态:0正常,1删除" align="center" prop="status" /> -->
<el-table-column label="操作" align="center" class-name="small-padding fixed-width">
<template slot-scope="scope">
<el-button
size="mini"
type="text"
icon="el-icon-edit"
@click="handleUpdate(scope.row)"
v-hasPermi="['school-paper:profile:edit']"
>下载</el-button>
<el-button
size="mini"
type="text"
icon="el-icon-delete"
@click="handleDelete(scope.row)"
v-hasPermi="['school-paper:profile:remove']"
>删除</el-button>
<el-button size="mini" type="text" icon="el-icon-edit" @click="handleUpdate(scope.row)"
v-hasPermi="['school-paper:profile:edit']">下载</el-button>
<el-button size="mini" type="text" icon="el-icon-delete" @click="handleDelete(scope.row)"
v-hasPermi="['school-paper:profile:remove']">删除</el-button>
</template>
</el-table-column>
</el-table>
<pagination
v-show="total>0"
:total="total"
:page.sync="queryParams.pageNum"
:limit.sync="queryParams.pageSize"
@pagination="getList"
/>
<pagination v-show="total > 0" :total="total" :page.sync="queryParams.pageNum" :limit.sync="queryParams.pageSize"
@pagination="getList" />
<!-- 添加或修改资料对话框 -->
<el-dialog :title="title" :visible.sync="open" width="500px" append-to-body>
<!-- <el-dialog :title="title" :visible.sync="open" width="500px" append-to-body>
<el-form ref="form" :model="form" :rules="rules" label-width="80px">
<el-form-item label="资料名称" prop="profileName">
<el-input v-model="form.profileName" placeholder="请输入资料名称" />
......@@ -116,17 +92,54 @@
<el-button @click="cancel">取 消</el-button>
<el-button :loading="buttonLoading" type="primary" @click="submitForm">上 传</el-button>
</div>
</el-dialog> -->
<!-- 用户导入对话框 -->
<el-dialog :title="upload.title" :visible.sync="upload.open" width="400px" append-to-body>
<el-form ref="form" :model="form" :rules="rules" label-width="80px">
<el-form-item label="资料名称" prop="profileName">
<el-input v-model="form.profileName" placeholder="请输入资料名称" />
</el-form-item>
<el-upload ref="upload" :limit="1" accept=".xlsx, .xls" :headers="upload.headers"
:action="upload.url + '?updateSupport=' + upload.updateSupport" :disabled="upload.isUploading"
:on-progress="handleFileUploadProgress" :on-success="handleFileSuccess" :auto-upload="false" drag>
<i class="el-icon-upload"></i>
<div class="el-upload__text">将文件拖到此处,或<em>点击上传</em></div>
<div class="el-upload__tip text-center" slot="tip">
<span>仅允许导入xls、xlsx格式文件。</span>
</div>
</el-upload>
</el-form>
<div slot="footer" class="dialog-footer" style="text-align: center;">
<el-button @click="cancel">取 消</el-button>
<el-button :loading="buttonLoading" type="primary" @click="submitForm">上 传</el-button>
</div>
</el-dialog>
</div>
</template>
<script>
import { listProfile, getProfile, delProfile, addProfile, updateProfile } from "@/api/school-paper/profile";
import { getToken } from "@/utils/auth";
export default {
name: "Profile",
data() {
return {
// 用户导入参数
upload: {
// 是否显示弹出层(用户导入)
open: false,
// 弹出层标题(用户导入)
title: "",
// 是否禁用上传
isUploading: false,
// 是否更新已经存在的用户数据
updateSupport: 0,
// 设置上传的请求头部
headers: { Authorization: "Bearer " + getToken() },
// 上传的地址
url: process.env.VUE_APP_BASE_API + "school-paper/banner/uploadFile"
},
// 按钮loading
buttonLoading: false,
// 遮罩层
......@@ -160,9 +173,6 @@ export default {
profileName: [
{ required: true, message: "资料名称不能为空", trigger: "blur" }
],
profileUrl: [
{ required: true, message: "资料地址不能为空", trigger: "blur" }
],
}
};
},
......@@ -205,13 +215,13 @@ export default {
// 多选框选中数据
handleSelectionChange(selection) {
this.ids = selection.map(item => item.id)
this.single = selection.length!==1
this.single = selection.length !== 1
this.multiple = !selection.length
},
/** 新增按钮操作 */
handleAdd() {
this.reset();
this.open = true;
this.upload.open = true;
this.title = "添加资料";
},
/** 下载操作 */
......@@ -264,6 +274,22 @@ export default {
this.download('school-paper/profile/export', {
...this.queryParams
}, `profile_${new Date().getTime()}.xlsx`)
},
// 文件上传中处理
handleFileUploadProgress(event, file, fileList) {
this.upload.isUploading = true;
},
// 文件上传成功处理
handleFileSuccess(response, file, fileList) {
this.upload.open = false;
this.upload.isUploading = false;
this.$refs.upload.clearFiles();
this.$alert("<div style='overflow: auto;overflow-x: hidden;max-height: 70vh;padding: 10px 20px 0;'>" + response.msg + "</div>", "导入结果", { dangerouslyUseHTMLString: true });
this.getList();
},
// 提交上传文件
submitFileForm() {
this.$refs.upload.submit();
}
}
};
......
......@@ -223,7 +223,7 @@
</el-select>
</el-form-item>
<el-form-item label="年级阶段:" prop="phaseId">
<el-select clearable v-model="form.phaseId" placeholder="请选择阶段" @change="handleQuery">
<el-select clearable v-model="form.phaseId" placeholder="请选择阶段" >
<el-option v-for="item in PhaseList" :key="item.deptId" :label="item.deptName" :value="item.deptId">
</el-option>
</el-select>
......@@ -241,7 +241,7 @@
</el-form-item>
<el-form-item label="习题种类:" prop="species">
<!-- 1填空,2选择,3解答 -->
<el-select clearable v-model="form.species" placeholder="请选择习题种类" @change="changeSpecies">
<el-select clearable v-model="form.species" placeholder="请选择习题种类" >
<el-option v-for="item in [
{ label: '填空', value: 1 },
{ label: '选择', value: 2 },
......@@ -578,6 +578,7 @@ export default {
rightAnswersPic: undefined,
resolveCourse: undefined,
resolveVideo: undefined,
resolveVideoName:undefined,
remark: undefined,
status: undefined,
createTime: undefined,
......@@ -733,13 +734,14 @@ export default {
}
})
if (self.form.resolveVideo) {
let arr = self.form.resolveVideo.split(','),
brr = [];
arr.forEach((item) => {
brr.push({
url: item
let brr = [];
// arr.forEach((item) => {
// })
brr.push({
url: self.form.resolveVideo,
name:self.form.resolveVideoName
})
})
self.form.resolveVideo = brr
// self.$refs['refFileupload'].fileList = brr
}
......@@ -810,8 +812,10 @@ export default {
}
if (this.form.type == 1) {
this.form.resolveVideo = this.$refs['refFileupload'].fileList
this.form.resolveVideoName = this.$refs['refFileupload'].fileList[0].name
}
// console.log(this.form.resolveVideo,this.$refs['refFileupload'].fileList,'------------')
// return
this.form.rightAnswers = arr[this.form.rightAnswers]
// 判断是否是填空题
if (self.form.species == 1) {
......
<template>
<!-- <div class="main">
<div class="tree"> -->
<Treeselect
v-model="value"
:options="options"
:placeholder="'请选择人员'"
:multiple="multiple"
@input="treeSelectInput"
@select="treeSelectChange"
@deselect="treeSelectDeselect"
@search-change="treeSelectSearch"
@open="treeSelectOpen"
@close="treeSelectClose"
/>
<!-- </div>
<Treeselect v-model="value" :options="options" :placeholder="'请选择人员'" :multiple="multiple" @input="treeSelectInput"
@select="treeSelectChange" @deselect="treeSelectDeselect" @search-change="treeSelectSearch" @open="treeSelectOpen"
@close="treeSelectClose" />
<!-- </div>
</div> -->
</template>
<script>
......@@ -26,16 +17,17 @@ export default {
data() {
return {
value: null,
options: []
options: [],
rawList: [],
}
},
props:{
multiple:{
type:false
props: {
multiple: {
type: false
}
},
components: { Treeselect },
mounted(){
mounted() {
// 延迟模拟请求数据
setTimeout(() => {
// this.options = treeData
......@@ -43,7 +35,7 @@ export default {
}, 300)
this.getDeptTree()
},
methods:{
methods: {
/** 查询部门下拉树结构 */
getDeptTree() {
deptTreeSelect().then(response => {
......@@ -58,8 +50,20 @@ export default {
// 选中触发(清除值的时候不会触发)
treeSelectChange(raw, instanceId) {
console.log(raw, '当前的对象')
let self = this
this.rawList = raw
setTimeout(() => { // 如果用到this.value 需要setTimeout延迟一下拿到最新的值
console.log(this.value, 'this.value -- select')
console.log(this.value, raw, 'this.value -- select')
if (!this.multiple) {
if (raw.children == undefined) {
} else {
if (self.value == raw.id) {
self.value = null
}
}
}
})
},
// 移除选项时触发 当设置multiple为true时生效 raw为当前移除的对象
......@@ -76,7 +80,7 @@ export default {
},
// 关闭触发
treeSelectClose(value, instanceId) {
console.log(value, '当前的value值')
console.log(value, this.rawList.id, '当前的value值')
},
// 字段默认 id label 用于规范化数据源
tenantIdnormalizer(node, instanceId) {
......@@ -98,12 +102,12 @@ export default {
height: 100%;
padding: 60px 0 0 200px;
}
.main .tree {
width: 240px;
height: 40px;
}
::v-deep .vue-treeselect__label {
color: #606266;
}
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment