维基官网
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 

279 lines
8.6 KiB

<template>
<div>
<a-button @click="showModal" type="primary">我要发榜</a-button>
<a-modal :confirm-loading="confirmLoading" :title="title" :visible="visible" @cancel="handleCancel" @ok="handleOk" width="50%">
<a-form :form="form">
<!-- 需求名称 -->
<a-form-item :label-col="formItemLayout.labelCol" :wrapper-col="formItemLayout.wrapperCol" class="mb-3" label="需求名称">
<a-input placeholder="请输入需求名称..." v-model.trim="platform.needName" />
</a-form-item>
<!-- 技术领域 -->
<a-form-item :label-col="formItemLayout.labelCol" :wrapper-col="formItemLayout.wrapperCol" class="mb-3" label="技术领域">
<a-input placeholder="请输入技术领域..." v-model.trim="platform.technicalField" />
</a-form-item>
<!-- 需求截止时间 -->
<a-form-item :label-col="formItemLayout.labelCol" :wrapper-col="formItemLayout.wrapperCol" class="mb-3" label="需求截止时间">
<a-date-picker @change="changeNeedTime" style="width: 100%" />
</a-form-item>
<!-- 需求类别 -->
<a-form-item :label-col="formItemLayout.labelCol" :wrapper-col="formItemLayout.wrapperCol" class="mb-3" label="需求类别">
<a-checkbox-group @change="onChange" class="line-height-30">
<a-checkbox v-for="(item, index) in typeList" :key="index" :value="item.id">{{ item.name }}</a-checkbox>
</a-checkbox-group>
</a-form-item>
<!-- 需求内容 -->
<a-form-item :label-col="formItemLayout.labelCol" :wrapper-col="formItemLayout.wrapperCol" class="mb-3" label="需求内容">
<quill-editor
:options="editorOption"
@blur="onEditorBlur($event)"
@change="onEditorChange($event)"
@focus="onEditorFocus($event)"
class="editor-box"
ref="myQuillEditor"
v-model="needContent"
></quill-editor>
<a-upload
accept="image/png, image/jpeg"
name="files"
:multiple="false"
style="display: none"
:action="action"
@change="fileChange"
>
<a-button id="upload-img"> <a-icon type="upload" /></a-button>
</a-upload>
</a-form-item>
<!-- 现有基础 -->
<a-form-item :label-col="formItemLayout.labelCol" :wrapper-col="formItemLayout.wrapperCol" class="mb-3" label="现有基础">
<a-textarea
placeholder="(已经开展的工作、所处阶段、投入资金和人力、仪器 设备、生产条件等)"
style="min-height: 100px"
v-model.trim="platform.basics"
/>
</a-form-item>
</a-form>
</a-modal>
<a-modal :confirm-loading="confirmLoading1" title="需要登录" :visible="visible1" @cancel="handleCancel1" @ok="handleOk1" width="50%">
还没有登录,请您先去登录 <span style="color: rgba(0, 0, 0, 0.65)"> 点击确定前往登录</span>
</a-modal>
</div>
</template>
<script>
import { mapState } from 'vuex';
import { quillEditor } from 'vue-quill-editor'; //调用编辑器
import 'quill/dist/quill.core.css';
import 'quill/dist/quill.snow.css';
import 'quill/dist/quill.bubble.css';
import { upload, addTelease, findTypeList } from 'config/api';
const formItemLayout = {
labelCol: { span: 5 },
wrapperCol: { span: 18 },
};
const formTailLayout = {
labelCol: { span: 6 },
wrapperCol: { span: 18, offset: 6 },
};
const toolbarOptions = [
['bold', 'italic', 'underline', 'strike'], //加粗,斜体,下划线,删除线
['blockquote', 'code-block'], //引用,代码块
[{ header: 1 }, { header: 2 }], // 标题,键值对的形式;1、2表示字体大小
[{ list: 'ordered' }, { list: 'bullet' }], //列表
[{ script: 'sub' }, { script: 'super' }], // 上下标
[{ indent: '-1' }, { indent: '+1' }], // 缩进
[{ direction: 'rtl' }], // 文本方向
// [{ size: ['small', false, 'large', 'huge'] }], // 字体大小
// [{ header: [1, 2, 3, 4, 5, 6, false] }], //几级标题
[{ color: [] }, { background: [] }], // 字体颜色,字体背景颜色
// [{ font: [] }], //字体
[{ align: [] }], //对齐方式
['clean'], //清除字体样式
['image', 'video'], //上传图片、上传视频
];
export default {
name: 'Enroll',
components: { quillEditor },
data() {
return {
form: this.$form.createForm(this, { name: 'submit' }),
visible: false,
visible1: false,
title: '发榜',
action: upload,
formItemLayout,
formTailLayout,
confirmLoading: false,
confirmLoading1: false,
needContent: ``,
editorOption: {
placeholder: '在这里输入...',
modules: {
toolbar: {
container: toolbarOptions, // 工具栏
handlers: {
image: function(value) {
if (value) {
// alert('自定义图片');
document.getElementById('upload-img').click();
} else {
this.quill.format('image', false);
}
},
video: function(value) {
if (value) {
alert('自定义视频');
} else {
this.quill.format('image', false);
}
},
},
},
},
},
platform: {
needName: '',
technicalField: '',
basics: '',
type: [],
buildTime: '',
},
hideMessage: null,
typeList: [],
};
},
computed: mapState('user', ['anyringToken']),
created() {
this.findType();
},
methods: {
// 需求截止时间
changeNeedTime(date, dateString) {
this.platform.buildTime = this.$moment(date).format('YYYY-MM-DD HH:mm:ss');
// console.log(this.$moment(date).unix(), dateString);
},
onEditorReady(editor) {
// 准备编辑器
},
onEditorBlur() {}, // 失去焦点事件
onEditorFocus() {}, // 获得焦点事件
onEditorChange() {
// 内容改变事件
// console.log(this.content);
},
onChange(e) {
console.log(e);
this.platform.type = e;
},
// 上传图片事件
fileChange(info) {
console.log(info);
if (info.file.status === 'uploading') {
if (!this.hideMessage) {
this.hideMessage = this.$message.loading('上传中...');
}
}
// this.fileList = info.fileList;
if (info.file.status === 'done') {
this.files = [];
const img = `<img src=${info.file.response.data[0].visitUrl} >`;
this.needContent += img;
setTimeout(this.hideMessage, 0);
this.$message.success('上传成功');
}
},
// 显示表单输入框
showModal() {
if (this.anyringToken) {
this.visible = true;
} else {
this.visible1 = true;
}
},
// 取消显示
handleCancel(e) {
this.visible = false;
},
// 点击确定
handleOk() {
this.subMitAdd();
},
handleCancel1() {
this.visible1 = false;
},
// 点击确定
handleOk1() {
this.$router.push('/login');
},
// 加入接口
async subMitAdd() {
this.confirmLoading = true;
try {
const params = {
param: {
title: this.platform.needName,
content: this.needContent,
servics: this.platform.technicalField,
deadline: this.platform.buildTime,
existingBasis: this.platform.basics,
models: this.platform.type,
},
};
const res = await addTelease(params);
const { code, msg, data } = res.data;
if (code === 200) {
this.$message.success('发榜成功');
this.visible = false;
this.confirmLoading = false;
for (let key in this.platform) {
this.platform[key] = '';
}
} else {
throw msg;
this.confirmLoading = false;
}
} catch (error) {
this.$message.error(error);
this.confirmLoading = false;
}
},
// 查询分类列表
async findType() {
try {
const res = await findTypeList();
const { code, msg, data } = res.data;
if (code === 200) {
this.typeList = data;
} else {
console.log(msg);
}
} catch (error) {
console.log(error);
}
},
},
};
</script>
<style lang="stylus" scoped>
.must-color {
color: red;
}
.code_img {
height: 32px;
width: 120px;
}
.ql-editor {
min-height: 600px;
max-height: 800px;
}
.editor-box >>> .ql-editor {
min-height: 150px;
}
</style>