Browse Source

创业学院修改

master
aBin 4 years ago
parent
commit
566f586d48
  1. 4
      src/common/portrait.styl
  2. 2
      src/components/BtnCom/BtnCon.vue
  3. 18
      src/config/api.js
  4. 6
      src/router/index.js
  5. 2
      src/views/BannerManage/BannerManage.vue
  6. 26
      src/views/Challenge/Challenge.vue
  7. 384
      src/views/Challenge/components/ChallengeAdd.vue
  8. 187
      src/views/Challenge/components/ChallengeDate.vue
  9. 321
      src/views/Challenge/components/ChallengeEdit.vue
  10. 48
      src/views/Challenge/components/ChallengeSearch.vue
  11. 44
      src/views/Challenge/components/UnveSearch.vue
  12. 251
      src/views/Challenge/components/UnveilingDate.vue
  13. 4
      src/views/College/College.vue
  14. 3
      src/views/College/components/CollegeDate.vue
  15. 4
      src/views/College/components/CollegeSearch.vue

4
src/common/portrait.styl

@ -310,3 +310,7 @@ h2{
.fill-height{ .fill-height{
height:100%; height:100%;
} }
.ant-checkbox-wrapper {
margin-left: 0 !important;
}

2
src/components/BtnCom/BtnCon.vue

@ -8,7 +8,7 @@
<!-- <div @click="jump('/communication-community')" class="btn">交流社区</div> --> <!-- <div @click="jump('/communication-community')" class="btn">交流社区</div> -->
<div @click="jump('/event-announcement')" class="btn">活动公告</div> <div @click="jump('/event-announcement')" class="btn">活动公告</div>
<div @click="jump('/innovation-policy')" class="btn">创新政策</div> <div @click="jump('/innovation-policy')" class="btn">创新政策</div>
<div @click="jump('/')" class="btn">创新挑战</div> <div @click="jump('/Challenge')" class="btn">创新挑战</div>
<div @click="jump('/College')" class="btn">创业学院</div> <div @click="jump('/College')" class="btn">创业学院</div>
<!-- <div @click="jump('/talent-recruitment')" class="btn">人才招聘</div> --> <!-- <div @click="jump('/talent-recruitment')" class="btn">人才招聘</div> -->
<div @click="jump('/cooperative-partner')" class="btn">合作伙伴</div> <div @click="jump('/cooperative-partner')" class="btn">合作伙伴</div>

18
src/config/api.js

@ -263,6 +263,9 @@ export const academyUpdate = params => axios.post(`${academy}/update`, params);
export const queryMold = params => axios.post(`${academy}/queryMold`, params); export const queryMold = params => axios.post(`${academy}/queryMold`, params);
// 创新挑战查看发榜列表 // 创新挑战查看发榜列表
export const selTelease = params => axios.post(`${releaseTheList}/selTelease`, params);
// 创新挑战查看某个榜的揭榜列表
export const selfulUnveilingList = params => axios.post(`${releaseTheList}/selfulUnveilingList`, params); export const selfulUnveilingList = params => axios.post(`${releaseTheList}/selfulUnveilingList`, params);
// 创新挑战修改 // 创新挑战修改
@ -270,3 +273,18 @@ export const updateTelease = params => axios.post(`${releaseTheList}/updateTelea
// 创新挑战增加 // 创新挑战增加
export const addTelease = params => axios.post(`${releaseTheList}/addTelease`, params); export const addTelease = params => axios.post(`${releaseTheList}/addTelease`, params);
// 创新挑战发榜类型查询
export const findTypeList = params => axios.post(`${releaseTheList}/findTypeList`, params);
// 创新挑战发榜类型查询
export const selTeleaseById = params => axios.post(`${releaseTheList}/selTeleaseById`, params);
// 创新挑战发榜审核
export const upPublished = params => axios.post(`${releaseTheList}/upPublishedSuccessfully`, params);
// 创新挑战揭榜列表
export const selfulUnveiling = params => axios.post(`${releaseTheList}/selfulUnveilingList`, params);
// 创新挑战修改揭榜审核状态
export const upUnveiling = params => axios.post(`${releaseTheList}/upSuccessfulUnveiling`, params);

6
src/router/index.js

@ -178,6 +178,12 @@ const routes = [
name: 'IndustryDemandReport', name: 'IndustryDemandReport',
component: () => import(/* webpackChunkName: "industry-demand-report" */ 'views/IndustryDemandReport/IndustryDemandReport.vue'), component: () => import(/* webpackChunkName: "industry-demand-report" */ 'views/IndustryDemandReport/IndustryDemandReport.vue'),
}, },
// 需求填报
{
path: '/Challenge',
name: 'Challenge',
component: () => import(/* webpackChunkName: "industry-demand-report" */ 'views/Challenge/Challenge.vue'),
},
// 创业学院 // 创业学院
{ {
path: '/College', path: '/College',

2
src/views/BannerManage/BannerManage.vue

@ -43,7 +43,7 @@ export default {
if (condition && condition.current) { if (condition && condition.current) {
this.pageNum = condition.current; this.pageNum = condition.current;
this.pageSize = condition.pageSize; this.pageSize = condition.pageSize;
} else if (condition && !condition.pageNum) { } else if (condition && !condition.current) {
this.paramData = condition; this.paramData = condition;
} }
const params = { const params = {

26
src/views/Challenge/Challenge.vue

@ -8,7 +8,7 @@
<script> <script>
import ChallengeSearch from './components/ChallengeSearch.vue'; import ChallengeSearch from './components/ChallengeSearch.vue';
import ChallengeDate from './components/ChallengeDate.vue'; import ChallengeDate from './components/ChallengeDate.vue';
import { selfulUnveilingList } from 'config/api'; import { selTelease } from 'config/api';
export default { export default {
name: 'Challenge', name: 'Challenge',
@ -25,9 +25,12 @@ export default {
pageNum: 1, pageNum: 1,
pageSize: 10, pageSize: 10,
paramData: { paramData: {
banner: [],
type: '',
title: '', title: '',
companyName: '',
startTime: '',
endTime: '',
servics: '',
billboardStatus: '',
}, },
}; };
}, },
@ -43,19 +46,26 @@ export default {
if (condition && condition.current) { if (condition && condition.current) {
this.pageNum = condition.current; this.pageNum = condition.current;
this.pageSize = condition.pageSize; this.pageSize = condition.pageSize;
} else if (condition && !condition.pageNum) { } else if (condition && !condition.current) {
this.paramData = condition; let { paramData } = this;
console.log(paramData);
paramData = { ...condition };
this.paramData = paramData;
} }
const params = { const params = {
param: { param: {
address: '',
billboardStatus: this.paramData.billboardStatus,
companyName: this.paramData.companyName,
startTime: this.paramData.startTime,
endTime: this.paramData.endTime,
servics: this.paramData.servics,
title: this.paramData.title, title: this.paramData.title,
type: this.paramData.type,
banner: this.paramData.banner,
pageNum: this.pageNum, pageNum: this.pageNum,
pageSize: this.pageSize, pageSize: this.pageSize,
}, },
}; };
const res = await selfulUnveilingList(params); const res = await selTelease(params);
const { code, msg, data } = res.data; const { code, msg, data } = res.data;
if (code === 200) { if (code === 200) {
this.lists = data; this.lists = data;

384
src/views/Challenge/components/ChallengeAdd.vue

@ -1,230 +1,278 @@
<template> <template>
<div class="d-flex flex-wrap pb-3"> <div>
<!-- 添加 --> <a-button @click="showModal" type="primary">增加</a-button>
<a-modal <a-modal
:mask-closable="false"
@cancel="$emit('closeModal')"
destroy-on-close destroy-on-close
footer :confirm-loading="confirmLoading"
title="创业学院添加" :title="title"
v-model="visible" :visible="visible"
width="700px" @cancel="handleCancel"
@ok="handleOk"
width="50%"
> >
<a-form :form="form" @submit="handleSubmit"> <a-form :form="form">
<!-- 标题 --> <!-- 需求名称 -->
<a-form-item :label-col="formItemLayout.labelCol" :wrapper-col="formItemLayout.wrapperCol" label="标题"> <a-form-item :label-col="formItemLayout.labelCol" :wrapper-col="formItemLayout.wrapperCol" class="mb-3" label="需求名称">
<a-input <a-input placeholder="请输入需求名称..." v-model.trim="platform.needName" />
@change="changeIpt($event, 'title')"
class="ml-3"
placeholder="标题"
v-decorator="[
'title',
{
rules: [
{ required: true, message: '标题不能为空' },
{ whitespace: true, message: '标题不能为空' },
{ max: 140, massage: '标题最多140个字符' },
],
},
]"
/>
</a-form-item>
<!-- 内容链接 -->
<a-form-item :label-col="formItemLayout.labelCol" :wrapper-col="formItemLayout.wrapperCol" label="内容链接">
<a-input
@change="changeIpt($event, 'contentUrl')"
class="ml-3"
placeholder="内容链接"
v-decorator="[
'contentUrl',
{
rules: [
{ required: true, message: '内容链接不能为空' },
{ whitespace: true, message: '内容链接不能为空' },
{ max: 300, massage: '内容链接最多30个字符' },
],
},
]"
/>
</a-form-item>
<!-- 简介 -->
<a-form-item :label-col="formItemLayout.labelCol" :wrapper-col="formItemLayout.wrapperCol" label="简介">
<a-textarea
@change="changeIpt($event, 'intro')"
class="ml-3"
placeholder="简介"
v-decorator="[
'intro',
{
rules: [
{ required: true, message: '简介不能为空' },
{ whitespace: true, message: '简介不能为空' },
{ max: 140, massage: '简介最多140个字符' },
],
},
]"
/>
</a-form-item>
<!-- 封面图片 -->
<a-form-item :label-col="formItemLayout.labelCol" :wrapper-col="formItemLayout.wrapperCol" label="封面图片">
<a-upload :action="upload" :before-upload="beforeUpload" @change="handleChange" class="ml-3" list-type="picture" name="files">
<a-button v-show="fileList.length - 0 === 0"> <a-icon type="upload" />选择封面图片 </a-button>
</a-upload>
</a-form-item> </a-form-item>
<!-- 时间 --> <!-- 公司名称 -->
<a-form-item :label-col="formItemLayout.labelCol" :wrapper-col="formItemLayout.wrapperCol" label="时间"> <a-form-item :label-col="formItemLayout.labelCol" :wrapper-col="formItemLayout.wrapperCol" class="mb-3" label="公司名称">
<a-date-picker class="ml-3" @change="changeBirthday" show-time /> <a-input placeholder="请输入公司名称..." v-model.trim="platform.companyName" />
</a-form-item> </a-form-item>
<!-- 类型 --> <!-- 技术领域 -->
<a-form-item :label-col="formItemLayout.labelCol" :wrapper-col="formItemLayout.wrapperCol" label="类型"> <a-form-item :label-col="formItemLayout.labelCol" :wrapper-col="formItemLayout.wrapperCol" class="mb-3" label="技术领域">
<a-select @change="getUse($event, 'type')" class="ml-3" default-value="视频" style="width: 100%"> <a-input placeholder="请输入技术领域..." v-model.trim="platform.technicalField" />
<a-select-option :key="index" :value="index + 1" v-for="(item, index) in recStatusList">{{ item }}</a-select-option>
</a-select>
</a-form-item> </a-form-item>
<!-- 是否在首页展示 --> <!-- 需求截止时间 -->
<a-form-item :label-col="formItemLayout.labelCol" :wrapper-col="formItemLayout.wrapperCol" label="是否在首页展示"> <a-form-item :label-col="formItemLayout.labelCol" :wrapper-col="formItemLayout.wrapperCol" class="mb-3" label="截止时间">
<a-radio-group class="ml-3" v-model="whetherShow" @change="onChange"> <a-date-picker @change="changeNeedTime" style="width: 100%" />
<a-radio :value="0"> </a-radio>
<a-radio :value="1"> </a-radio>
</a-radio-group>
</a-form-item> </a-form-item>
<!-- 栏目 --> <!-- 需求类别 -->
<a-form-item :label-col="formItemLayout.labelCol" :wrapper-col="formItemLayout.wrapperCol" label="栏目"> <a-form-item :label-col="formItemLayout.labelCol" :wrapper-col="formItemLayout.wrapperCol" class="mb-3" label="需求类别">
<a-checkbox-group class="ml-3" @change="onChangeBan"> <a-checkbox-group @change="onChange" class="line-height-30">
<a-checkbox class="my-2" v-for="(item, index) in bannersList" :key="index" :value="item.moldId">{{ item.moldName }}</a-checkbox> <a-checkbox style="width: 100%" v-for="(item, index) in typeList" :key="index" :value="item.id">{{ item.name }}</a-checkbox>
</a-checkbox-group> </a-checkbox-group>
</a-form-item> </a-form-item>
<a-form-item class="d-flex flex-row-reverse"> <!-- 需求内容 -->
<a-button @click="$emit('closeModal')" class="mr-3">取消</a-button> <a-form-item :label-col="formItemLayout.labelCol" :wrapper-col="formItemLayout.wrapperCol" class="mb-3" label="需求内容">
<a-button class="white--text" html-type="submit" type="primary">保存</a-button> <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-item>
</a-form> </a-form>
</a-modal> </a-modal>
</div> </div>
</template> </template>
<script> <script>
import { upload, academySave, queryMold } from 'config/api'; 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 = { const formItemLayout = {
labelCol: { span: 5 },
wrapperCol: { span: 18 },
};
const formTailLayout = {
labelCol: { span: 6 }, labelCol: { span: 6 },
wrapperCol: { span: 16 }, wrapperCol: { span: 18, offset: 6 },
}; };
const toolbarOptions = [
const tailItemLayout = { wrapperCol: { span: 16, offset: 6 } }; ['bold', 'italic', 'underline', 'strike'], //线线
['blockquote', 'code-block'], //
[{ header: 1 }, { header: 2 }], // 12
[{ 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 { export default {
name: 'CollegeAdd', name: 'Enroll',
props: { visible: { type: Boolean, default: false } }, components: { quillEditor },
data() { data() {
return { return {
form: this.$form.createForm(this, { name: 'submit' }),
visible: false,
title: '发榜',
action: upload,
formItemLayout, formItemLayout,
tailItemLayout, formTailLayout,
form: this.$form.createForm(this, { name: 'r-d-member-add' }), confirmLoading: false,
upload: upload, needContent: ``,
fileList: [], editorOption: {
// placeholder: '在这里输入...',
beforeUpload: file => { modules: {
const isJpgOrPng = file.type === 'image/jpeg' || file.type === 'image/png'; toolbar: {
if (!isJpgOrPng) { container: toolbarOptions, //
this.$message.error('仅支持 JPG/PNG 格式的图片!'); handlers: {
image: function(value) {
if (value) {
// alert('');
document.getElementById('upload-img').click();
} else {
this.quill.format('image', false);
} }
return isJpgOrPng; },
}, video: function(value) {
recStatusList: ['视频', '音频', 'PPT'], if (value) {
bannersList: [], alert('自定义视频');
banner: [], } else {
title: '', this.quill.format('image', false);
contentUrl: '', }
intro: '', },
times: '', },
type: 1, },
whetherShow: 0, },
},
platform: {
needName: '',
technicalField: '',
basics: '',
companyName: '',
type: [],
buildTime: '',
},
hideMessage: null,
typeList: [],
}; };
}, },
computed: mapState('user', ['anyringToken']),
created() { created() {
this.getQueryMold(); this.findType();
}, },
methods: { methods: {
changeBirthday(date, dateString) { //
// console.log(this.$moment(date._e).format('YYYY-MM-DD HH:mm:ss')); changeNeedTime(date, dateString) {
this.times = this.$moment(date._e).format('YYYY-MM-DD HH:mm:ss'); this.platform.buildTime = this.$moment(date).format('YYYY-MM-DD HH:mm:ss');
// console.log(this.$moment(date).unix(), dateString);
}, },
onChange(e) {
console.log(this.whetherShow); onEditorReady(editor) {
//
},
onEditorBlur() {}, //
onEditorFocus() {}, //
onEditorChange() {
//
// console.log(this.content);
}, },
onChangeBan(e) { onChange(e) {
this.banner = e; console.log(e);
this.platform.type = e;
}, },
// //
handleChange(info) { fileChange(info) {
// this.fileList = fileList;
console.log(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') { if (info.file.status === 'done') {
this.fileList.push(info.file.response.data[0].id); this.files = [];
} else if (info.file.status === 'removed') { const img = `<img src=${info.file.response.data[0].visitUrl} >`;
this.fileList = info.fileList; this.needContent += img;
setTimeout(this.hideMessage, 0);
this.$message.success('上传成功');
} }
}, },
changeIpt(e, str) {
this[str] = e.target.value; //
showModal() {
this.visible = true;
}, },
getUse(e, str) { //
this[str] = e; handleCancel(e) {
this.visible = false;
}, },
async getQueryMold() { //
try { handleOk() {
const res = await queryMold(); this.subMitAdd();
const { code, msg, data } = res.data;
if (code === 200) {
this.bannersList = data;
} else {
this.$message.error(msg);
}
} catch (error) {
this.$message.error(error);
}
}, },
// //
handleSubmit(e) { async subMitAdd() {
e.preventDefault(); this.confirmLoading = true;
this.form.validateFieldsAndScroll(async (err, values) => {
if (!err) {
if (this.fileList.length > 0) {
try { try {
this.picId = this.fileList[0];
const params = { const params = {
param: { param: {
banners: this.banners, address: '123',
contentUrl: this.contentUrl, title: this.platform.needName,
coverPicture: this.fileList[0], content: this.needContent,
intro: this.intro, servics: this.platform.technicalField,
times: this.times, companyName: this.platform.companyName,
title: this.title, deadline: this.platform.buildTime,
type: this.type, existingBasis: this.platform.basics,
whetherShow: this.whetherShow, models: this.platform.type,
}, },
}; };
const res = await academySave(params); const res = await addTelease(params);
const { data, msg, code } = res.data; const { code, msg, data } = res.data;
if (code === 200) { if (code === 200) {
this.$emit('handleTableChange');
this.$emit('closeModal');
this.$message.success('添加成功'); this.$message.success('添加成功');
this.visible = false;
this.confirmLoading = false;
for (let key in this.platform) {
this.platform[key] = '';
}
} else { } else {
throw msg; throw msg;
this.confirmLoading = false;
} }
} catch (error) { } catch (error) {
this.$message.error(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 { } else {
this.$message.error('请上传图片'); console.log(msg);
} }
} catch (error) {
console.log(error);
} }
});
}, },
}, },
}; };
</script> </script>
<style scoped lang="stylus"></style> <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>

187
src/views/Challenge/components/ChallengeDate.vue

@ -16,41 +16,46 @@
<span>{{ index + 1 }}</span> <span>{{ index + 1 }}</span>
</template> </template>
<template slot="coverPicture" slot-scope="text, record"> <template slot="content" slot-scope="text, record">
<img :src="record.coverPicture" width="50" height="50" /> <div v-dompurify-html="record.content"></div>
</template> </template>
<template slot="type" slot-scope="text, record"> <template slot="bid" slot-scope="text, record">
<span v-if="record.type === 1">视频</span> <span style="cursor: pointer; color: #2db7f5" @click="showList(record)">查看揭榜列表</span>
<span v-else-if="record.type === 2">音频</span>
<span v-else-if="record.type === 3">ppt</span>
</template> </template>
<template slot="whetherShow" slot-scope="text, record">
<span v-if="record.whetherShow === 0"></span> <template slot="billboardStatus" slot-scope="text, record">
<span v-else-if="record.whetherShow === 1"></span> <a-tag v-if="record.billboardStatus === 0" color="#108ee9"> 待审核 </a-tag>
<a-tag v-else-if="record.billboardStatus === 1" color="#87d068"> 审核通过 </a-tag>
<a-tag v-else-if="record.billboardStatus === 2" color="#2db7f5"> 完成 </a-tag>
<a-tag v-else-if="record.billboardStatus === 3" color="#ccc"> 发榜取消 </a-tag>
</template> </template>
<template slot="edit" slot-scope="text, record"> <template slot="edit" slot-scope="text, record">
<a-icon @click="showEditModal(record)" class="pointer" theme="twoTone" type="edit" /> <a-icon @click="showEditModal(record)" class="pointer" theme="twoTone" type="edit" />
<a-popconfirm @confirm="() => onDelete(record.academyId)" title="确定要删除这一条?" v-if="lists.list.length"> <a-tag color="blue" class="ml-3" style="cursor: pointer" @click="changeStatus(record.bid)"> 审核 </a-tag>
<a-icon class="ml-4 pointer" theme="twoTone" two-tone-color="#ff0000" type="delete" />
</a-popconfirm>
</template> </template>
<div class="d-flex flex-nowrap justify-space-between" slot="expandedRowRender" slot-scope="record" style="margin: 0">
{{ getselContent(record.id) }}
</div>
</a-table> </a-table>
</div> </div>
<a-empty v-else /> <a-empty v-else />
<a-modal title="发榜审核" :visible="visible" :confirm-loading="confirmLoading" @ok="handleOk" @cancel="handleCancel" destroy-on-close>
<a-select style="width: 240px" @change="handleChange">
<a-select-option v-for="(item, index) in statusList" :value="index" :key="index">
{{ item }}
</a-select-option>
</a-select>
</a-modal>
<!-- 编辑 --> <!-- 编辑 -->
<!-- <challenge-edit :edit-visible="editVisible" :edit-data="editData" @getData="getData" :contents="contents" @closeModal="closeModal" /> --> <challenge-edit :edit-visible="editVisible" :edit-data="editData" @getData="getData" :contents="contents" @closeModal="closeModal" />
<!-- 揭榜列表 -->
<unveiling-date :unvu-visible="unvuVisible" :obj-data="objData" @getData="getData" @closeModal1="closeModal1" />
</div> </div>
</template> </template>
<script> <script>
// import ChallengeEdit from 'components/Challenge/ChallengeEdit.vue'; import ChallengeEdit from './ChallengeEdit.vue';
import { academyDelete } from 'config/api'; import UnveilingDate from './UnveilingDate.vue';
import { academyDelete, upPublished } from 'config/api';
const columns = [ const columns = [
{ {
title: '序号', title: '序号',
@ -67,45 +72,51 @@ const columns = [
key: 'title', key: 'title',
}, },
{ {
title: '内容链接', title: '公司名称',
align: 'center', align: 'center',
dataIndex: 'contentUrl', dataIndex: 'companyName',
key: 'contentUrl', key: 'companyName',
}, },
// {
// title: '',
// align: 'center',
// dataIndex: 'companyName',
// key: 'companyName',
// },
{ {
title: '封面图片', title: '需求内容',
align: 'center', align: 'center',
dataIndex: 'coverPicture', dataIndex: 'content',
key: 'coverPicture', key: 'content',
scopedSlots: { customRender: 'coverPicture' }, scopedSlots: { customRender: 'content' },
}, },
{ {
title: '简介', title: '截止时间',
align: 'center', align: 'center',
dataIndex: 'intro', dataIndex: 'deadline',
key: 'intro', key: 'deadline',
// scopedSlots: { customRender: 'picUrl' }, // scopedSlots: { customRender: 'picUrl' },
}, },
{ {
title: '类型', title: '所属领域',
align: 'center', align: 'center',
dataIndex: 'type', dataIndex: 'servics',
key: 'type', key: 'servics',
scopedSlots: { customRender: 'type' }, scopedSlots: { customRender: 'servics' },
}, },
{ {
title: '时间', title: '揭榜列表',
align: 'center', align: 'center',
dataIndex: 'times', dataIndex: 'bid',
key: 'times', key: 'bid',
scopedSlots: { customRender: 'times' }, scopedSlots: { customRender: 'bid' },
}, },
{ {
title: '是否在首页展示', title: '审核状态',
align: 'center', align: 'center',
dataIndex: 'whetherShow', dataIndex: 'billboardStatus',
key: 'whetherShow', key: 'billboardStatus',
scopedSlots: { customRender: 'whetherShow' }, scopedSlots: { customRender: 'billboardStatus' },
}, },
{ {
title: '编辑', title: '编辑',
@ -118,21 +129,25 @@ const columns = [
export default { export default {
name: 'CollegeDate', name: 'CollegeDate',
// components: { components: { ChallengeEdit, UnveilingDate },
// ChallengeEdit,
// },
// props: { lists: { type: Array, default: () => {} } },
props: { lists: { type: Object, default: () => {} }, pagination: { type: Object, default: () => {} } }, props: { lists: { type: Object, default: () => {} }, pagination: { type: Object, default: () => {} } },
data() { data() {
return { return {
columns, columns,
visible: false,
loading: false, loading: false,
confirmLoading: false,
editingKey: '', editingKey: '',
height: '', height: '',
editVisible: false, editVisible: false,
editData: null, editData: null,
contents: '', contents: '',
statusList: ['待审核', '审核通过', '完成', '发榜取消'],
recordId: '',
recordStatus: '',
objData: null,
unvuVisible: false,
}; };
}, },
@ -148,14 +163,44 @@ export default {
}; };
}, },
methods: { methods: {
async handleOk() {
try {
this.confirmLoading = true;
const params = {
param: {
id: this.recordId,
billboardStatus: this.recordStatus,
},
};
const res = await upPublished(params);
const { code, msg, data } = res.data;
if (code === 200) {
this.$message.success('修改成功');
this.$emit('getListData');
this.visible = false;
} else {
this.$message.error(msg);
}
} catch (error) {
this.$message.error(error);
}
this.confirmLoading = false;
},
handleCancel() {
this.visible = false;
},
handleChange(e) {
this.recordStatus = e;
},
showEditModal(data) { showEditModal(data) {
this.editData = data; this.editData = data;
this.contents = this.getselContent(data.id);
this.editVisible = true; this.editVisible = true;
}, },
closeModal(data) {
closeModal() { this.editVisible = data;
this.editVisible = false; },
closeModal1(data) {
this.unvuVisible = data;
}, },
handleTableChange(pagination) { handleTableChange(pagination) {
const { current, pageSize } = pagination; const { current, pageSize } = pagination;
@ -165,43 +210,13 @@ export default {
getData() { getData() {
this.$emit('getListData'); this.$emit('getListData');
}, },
// changeStatus(id) {
async onDelete(academyId) { this.recordId = id;
try { this.visible = true;
const params = { param: { academyId } };
const res = await academyDelete(params);
const { data, msg, code } = res.data;
if (code === 200) {
this.$emit('getListData');
this.$message.success('删除成功');
// TODO:
} else {
throw msg;
}
} catch (error) {
this.$message.error(error || '删除失败');
}
}, },
// showList(data) {
getselContent(id) { this.objData = data;
try { this.unvuVisible = true;
const parmas = {
param: {
id: +id,
serviceType: 2,
},
};
const res = selContent(params);
const { code, msg, data } = res.data;
if (code === 200) {
// console.log(data);
return data.content;
} else {
return '暂无内容';
}
} catch (error) {
return '暂无内容';
}
}, },
}, },
}; };

321
src/views/Challenge/components/ChallengeEdit.vue

@ -0,0 +1,321 @@
<template>
<div>
<a-modal :confirm-loading="confirmLoading" :title="title" :visible="editVisible" @cancel="handleCancel" @ok="handleOk" width="50%">
<a-spin v-if="platform.id === ''" />
<a-form :form="form" v-else>
<!-- 需求名称 -->
<a-form-item :label-col="formItemLayout.labelCol" :wrapper-col="formItemLayout.wrapperCol" class="mb-3" label="需求名称">
<a-input placeholder="请输入需求名称..." v-model.trim="platform.title" />
</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.companyName" />
</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.servics" />
</a-form-item>
<!-- 需求截止时间 -->
<a-form-item :label-col="formItemLayout.labelCol" :wrapper-col="formItemLayout.wrapperCol" class="mb-3" label="截止时间">
<a-date-picker :default-value="$moment(platform.deadline, dateFormat)" @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 :default-value="platform.models" @change="onChange" class="line-height-30">
<a-checkbox style="width: 100%" 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="platform.content"
></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.existingBasis"
/>
</a-form-item>
</a-form>
</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, updateTelease, findTypeList, selTeleaseById } 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 }], // 12
[{ 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: 'ChallengeEdit',
components: { quillEditor },
props: {
editVisible: {
type: Boolean,
default: false,
},
editData: {
type: Object,
default: () => {},
},
},
data() {
return {
form: this.$form.createForm(this, { name: 'submit' }),
title: '发榜',
action: upload,
formItemLayout,
formTailLayout,
confirmLoading: 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);
}
},
},
},
},
},
dateFormat: 'YYYY-MM-DD',
platform: {
id: '',
title: '',
companyName: '',
content: '',
servics: '',
deadline: '',
existingBasis: '',
models: [],
},
hideMessage: null,
typeList: [],
};
},
computed: mapState('user', ['anyringToken']),
watch: {
editVisible(val) {
if (val) {
this.confirmLoading = true;
this.getDetail(this.editData.bid);
}
},
},
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);
},
async getDetail(id) {
try {
const params = { param: { id } };
const res = await selTeleaseById(params);
const { code, msg, data } = res.data;
if (code === 200) {
this.platform.id = data.bid;
this.platform.title = data.title;
this.platform.content = data.content;
this.platform.companyName = data.companyName;
this.platform.servics = data.servics;
this.platform.deadline = data.deadline;
this.platform.existingBasis = data.existingBasis;
this.platform.models = this.getModelId(data.list);
console.log(this.platform.models);
this.confirmLoading = false;
} else {
console.log(msg);
this.confirmLoading = false;
}
} catch (error) {
console.log(error);
this.confirmLoading = false;
}
},
getModelId(list) {
console.log(list);
this.platform.models = [];
let idList = [];
for (var i = 0; i < list.length; i++) {
idList.push(list[i].moid);
}
return idList;
},
onEditorReady(editor) {
//
},
onEditorBlur() {}, //
onEditorFocus() {}, //
onEditorChange() {
//
// console.log(this.content);
},
onChange(e) {
console.log(e);
this.platform.models = 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('上传成功');
}
},
//
handleCancel(e) {
for (let key in this.platform) {
this.platform[key] = '';
}
this.$emit('closeModal', false);
},
//
handleOk() {
this.subMitAdd();
},
//
async subMitAdd() {
this.confirmLoading = true;
try {
const params = {
param: {
id: this.platform.id,
title: this.platform.title,
content: this.platform.content,
servics: this.platform.servics,
deadline: this.platform.deadline,
existingBasis: this.platform.existingBasis,
models: this.platform.models,
},
};
const res = await updateTelease(params);
const { code, msg, data } = res.data;
if (code === 200) {
this.$message.success('修改成功');
this.$emit('getData');
this.handleCancel();
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>

48
src/views/Challenge/components/ChallengeSearch.vue

@ -2,44 +2,45 @@
<div class="d-flex flex-wrap pb-3"> <div class="d-flex flex-wrap pb-3">
<div> <div>
<a-input placeholder="标题" style="width: 150px" v-model="title" allow-clear /> <a-input placeholder="标题" style="width: 150px" v-model="title" allow-clear />
<span class="ml-3"> 类型:</span> <a-input placeholder="公司名称" class="ml-3 mb-3" style="width: 150px" v-model="companyName" allow-clear />
<a-select @change="handleChangeSelect" class="ml-3" style="width: 150px" placeholder="类型" allow-clear> <span class="ml-3"> 截止时间:</span>
<a-select-option :key="item" :value="index + 1" v-for="(item, index) in statusList">{{ item }}</a-select-option> <a-range-picker class="ml-3 mb-3" @change="onChange" allow-clear />
<br />
<a-input placeholder="所属领域" style="width: 150px" v-model="servics" allow-clear />
<span class="ml-3"> 审核状态:</span>
<a-select @change="handleChangeSelect" class="ml-3" style="width: 150px" placeholder="状态" allow-clear>
<a-select-option :key="item" :value="index" v-for="(item, index) in statusList">{{ item }}</a-select-option>
</a-select> </a-select>
<span class="ml-3"> 栏目:</span>
<a-checkbox-group class="ml-3" @change="onChange">
<a-checkbox class="my-2" v-for="(item, index) in bannersList" :key="index" :value="item.moldId">{{ item.moldName }}</a-checkbox>
</a-checkbox-group>
<a-button @click="handleTableChange" class="mx-2" type="primary">搜索</a-button> <a-button @click="handleTableChange" class="mx-2" type="primary">搜索</a-button>
</div> </div>
<div class="flex-1"></div> <div class="flex-1"></div>
<a-button type="primary" @click="showModal" class="editable-add-btn">增加</a-button> <!-- <a-button type="primary" @click="showModal" class="editable-add-btn">增加</a-button> -->
<!-- 添加 --> <!-- 添加 -->
<college-add :visible="visible" @closeModal="closeModal" @handleTableChange="handleTableChange" /> <challenge-add :visible="visible" @handleTableChange="handleTableChange" />
</div> </div>
</template> </template>
<script> <script>
import CollegeAdd from './CollegeAdd.vue'; import ChallengeAdd from './ChallengeAdd.vue';
import { queryMold } from 'config/api'; import { queryMold } from 'config/api';
export default { export default {
name: 'CollegeSearch', name: 'CollegeSearch',
components: { components: { ChallengeAdd },
CollegeAdd,
},
data() { data() {
return { return {
visible: false, visible: false,
title: '', title: '',
statusList: ['视频', '音频', 'ppt'], statusList: ['待审核', '审核通过', '完成', '发榜取消'],
bannersList: [], companyName: '',
banner: [], startTime: '',
type: '', endTime: '',
servics: '',
billboardStatus: '',
}; };
}, },
created() { created() {
@ -47,7 +48,10 @@ export default {
}, },
methods: { methods: {
onChange(e) { onChange(e) {
this.banner = e; console.log(this.$moment(e[0]._d).format('YYYY-MM-DD HH:mm:ss'));
console.log(this.$moment(e[1]._d).format('YYYY-MM-DD HH:mm:ss'));
this.startTime = this.$moment(e[0]._d).format('YYYY-MM-DD HH:mm:ss');
this.endTime = this.$moment(e[1]._d).format('YYYY-MM-DD HH:mm:ss');
}, },
showModal() { showModal() {
@ -59,14 +63,14 @@ export default {
}, },
handleChangeSelect(e) { handleChangeSelect(e) {
// this[type] = value; // console.log(e);
this.type = e; this.billboardStatus = e;
}, },
async handleTableChange() { async handleTableChange() {
const { title, type, banner } = this; const { title, companyName, startTime, endTime, servics, billboardStatus } = this;
// //
const condition = { title, type, banner }; const condition = { title, companyName, startTime, endTime, servics, billboardStatus };
await this.$emit('getListData', condition); await this.$emit('getListData', condition);
}, },
async getQueryMold() { async getQueryMold() {

44
src/views/Challenge/components/UnveSearch.vue

@ -0,0 +1,44 @@
<template>
<div class="d-flex flex-wrap pb-3">
<div>
<a-input placeholder="揭榜人" style="width: 150px" v-model="accepterName" allow-clear />
<span class="ml-3"> 揭榜状态:</span>
<a-select @change="handleChangeSelect" class="ml-3" style="width: 150px" placeholder="状态" allow-clear>
<a-select-option :key="item" :value="index" v-for="(item, index) in statusList">{{ item }}</a-select-option>
</a-select>
<a-button @click="handleTableChange" class="mx-2" type="primary">搜索</a-button>
</div>
<div class="flex-1"></div>
</div>
</template>
<script>
export default {
name: 'UnveSearch',
data() {
return {
visible: false,
title: '',
statusList: ['待审核', '成功', '未成功'],
orderStatus: '',
accepterName: '',
};
},
methods: {
handleChangeSelect(e) {
this.orderStatus = e;
},
handleTableChange() {
const { orderStatus, accepterName } = this;
//
const condition = { orderStatus, accepterName };
this.$emit('getData', condition);
},
},
};
</script>
<!-- Add "scoped" attribute to limit CSS to this component only -->
<style scoped lang="stylus"></style>

251
src/views/Challenge/components/UnveilingDate.vue

@ -0,0 +1,251 @@
<template>
<div>
<a-modal
:footer="false"
:confirm-loading="confirmLoading"
:title="title"
:visible="unvuVisible"
@cancel="handleCancel"
@ok="handleOk"
width="80%"
>
<unve-search @getData="getData" />
<a-table
:columns="columns"
:data-source="dataList"
:loading="loading"
:row-key="record => record.id"
:pagination="pagination"
@change="handleTableChange"
bordered
class="white"
>
<template slot="id" slot-scope="text, record, index">
<span>{{ index + 1 }}</span>
</template>
<template slot="orderStatus" slot-scope="text, record">
<div style="width: 120px; text-align: center; margin: auto" v-if="!record.editable">
<span v-if="record.orderStatus === 0">待审核</span>
<span v-else-if="record.orderStatus === 1">成功</span>
<span v-else-if="record.orderStatus === 2">未成功</span>
</div>
<div v-else>
<a-select style="width: 120px" @change="changeRecord">
<a-select-option v-for="(item, index) in statusList" :key="index" :value="index">
{{ item }}
</a-select-option>
</a-select>
</div>
</template>
<template slot="edit" slot-scope="text, record, index">
<a-icon v-if="!record.editable" @click="changeStatus(record, index)" class="pointer" theme="twoTone" type="edit" />
<span v-else>
<a @click="saveStatus(index)">保存</a>
<a class="ml-3" @click="changeStatus(record.id, index)">取消</a>
</span>
</template>
</a-table>
</a-modal>
</div>
</template>
<script>
import { mapState } from 'vuex';
import UnveSearch from './UnveSearch.vue';
import { selfulUnveiling, upUnveiling } from 'config/api';
const columns = [
{
title: '序号',
align: 'center',
dataIndex: 'id',
key: 'id',
width: '7%',
scopedSlots: { customRender: 'id' },
},
{
title: '揭榜人',
align: 'center',
dataIndex: 'accepterName',
key: 'accepterName',
},
{
title: '揭榜单位',
align: 'center',
dataIndex: 'unit',
key: 'unit',
},
{
title: '手机号',
align: 'center',
dataIndex: 'phone',
key: 'phone',
},
{
title: '时间',
align: 'center',
dataIndex: 'times',
key: 'times',
},
{
title: '方案简述',
align: 'center',
dataIndex: 'planIntro',
key: 'planIntro',
},
{
title: '揭榜状态',
align: 'center',
dataIndex: 'orderStatus',
key: 'orderStatus',
scopedSlots: { customRender: 'orderStatus' },
},
{
title: '操作',
align: 'center',
dataIndex: 'edit',
key: 'edit',
width: '15%',
scopedSlots: { customRender: 'edit' },
},
];
export default {
name: 'UnveilingDate',
components: { UnveSearch },
props: {
unvuVisible: {
type: Boolean,
default: false,
},
objData: {
type: Object,
default: () => {},
},
},
data() {
return {
title: '发榜',
confirmLoading: false,
loading: false,
columns: columns,
pagination: { current: 1, pageSize: 10 },
billboardId: '',
orderStatus: '',
accepterName: '',
pageNum: 1,
pageSize: 10,
dataList: [],
statusList: ['待审核', '成功', '未成功'],
status: '',
id: '',
};
},
watch: {
objData(val) {
if (val.bid) {
this.getData();
}
},
},
methods: {
handleCancel() {
this.$emit('closeModal1', false);
},
handleOk() {
this.$emit('closeModal1', false);
},
async getData(condition) {
try {
if (condition && condition.current) {
this.pageNum = condition.current;
this.pageSize = condition.pageSize;
} else if (condition) {
this.orderStatus = condition.orderStatus;
this.accepterName = condition.accepterName;
this.pageNum = 1;
this.pageSize = 10;
}
const params = {
param: {
accepterName: this.accepterName,
billboardId: this.objData.bid,
orderStatus: this.orderStatus,
pageNum: this.pageNum,
pageSize: this.pageSize,
},
};
const res = await selfulUnveiling(params);
const { code, msg, data } = res.data;
if (code === 200) {
this.dataList = data.list;
for (let i = 0; i < this.dataList.length; i++) {
this.dataList.editable = true;
}
} else {
this.$message.error(msg);
}
} catch (error) {
this.$message.error(error);
}
},
handleTableChange(pagination) {
const { current, pageSize } = pagination;
const condition = { current, pageSize };
this.getData();
},
changeStatus(data, index) {
const newDataList = [...this.dataList];
newDataList[index].editable = !newDataList[index].editable;
this.dataList = newDataList;
this.status = data.orderStatus;
this.id = data.id;
},
changeRecord(e) {
this.status = e;
},
async saveStatus(index) {
try {
const params = {
param: {
id: this.id,
orderStatus: this.status,
},
};
const res = await upUnveiling(params);
const { code, msg, data } = res.data;
if (code === 200) {
this.$message.success('修改成功');
const newDataList = [...this.dataList];
newDataList[index].editable = !newDataList[index].editable;
this.dataList = newDataList;
this.getData();
} else {
this.$message.error(msg);
}
} catch (error) {
this.$message.error(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>

4
src/views/College/College.vue

@ -19,7 +19,7 @@ export default {
data() { data() {
return { return {
str: '轮播图管理界面', str: '创业学院管理界面',
lists: {}, lists: {},
pagination: { current: 1, pageSize: 10 }, pagination: { current: 1, pageSize: 10 },
pageNum: 1, pageNum: 1,
@ -43,7 +43,7 @@ export default {
if (condition && condition.current) { if (condition && condition.current) {
this.pageNum = condition.current; this.pageNum = condition.current;
this.pageSize = condition.pageSize; this.pageSize = condition.pageSize;
} else if (condition && !condition.pageNum) { } else if (condition && !condition.current) {
this.paramData = condition; this.paramData = condition;
} }
const params = { const params = {

3
src/views/College/components/CollegeDate.vue

@ -44,7 +44,8 @@
<a-empty v-else /> <a-empty v-else />
<!-- 编辑 --> <!-- 编辑 -->
<!-- <challenge-edit :edit-visible="editVisible" :edit-data="editData" @getData="getData" :contents="contents" @closeModal="closeModal" /> --> <!-- <challenge-edit :edit-visible="editVisible" :edit-data="editData"
@getData="getData" :contents="contents" @closeModal="closeModal" /> -->
</div> </div>
</template> </template>

4
src/views/College/components/CollegeSearch.vue

@ -29,9 +29,7 @@ import { queryMold } from 'config/api';
export default { export default {
name: 'CollegeSearch', name: 'CollegeSearch',
components: { components: { CollegeAdd },
CollegeAdd,
},
data() { data() {
return { return {
visible: false, visible: false,

Loading…
Cancel
Save