|
@@ -1,116 +1,124 @@
|
|
|
<template>
|
|
|
- <div class="project-info-manage">
|
|
|
- <el-form
|
|
|
- ref="projectForm"
|
|
|
- :inline="true"
|
|
|
- :model="project"
|
|
|
- :rules="formRules"
|
|
|
- label-width="120px"
|
|
|
- class="project-form"
|
|
|
- >
|
|
|
- <el-form-item label="项目名称" prop="name" class="link-item">
|
|
|
- <el-input v-model="project.name" placeholder="请输入项目名称" maxlength="20" />
|
|
|
- <span class="link">更改</span>
|
|
|
- </el-form-item>
|
|
|
- <el-form-item label="项目分类" prop="category" class="link-item">
|
|
|
- <el-input v-model="project.category" maxlength="30" />
|
|
|
- <span class="link">更改</span>
|
|
|
- </el-form-item>
|
|
|
- <el-form-item label="作品标签" prop="label_list" class="label-input link-item">
|
|
|
- <div class="label-input-content">
|
|
|
- <div class="label-list">
|
|
|
- <el-tag
|
|
|
- v-for="(tag, index) in project.label_list"
|
|
|
- :key="index"
|
|
|
- closable
|
|
|
- @close="project.label_list.splice(index, 1)"
|
|
|
- >
|
|
|
- {{ tag }}
|
|
|
- </el-tag>
|
|
|
+ <div class="project-info">
|
|
|
+ <MenuPage cur-key="project" />
|
|
|
+
|
|
|
+ <div class="project-info__header">
|
|
|
+ <span class="name">{{ project.name }}</span>
|
|
|
+ <span class="button" @click="$router.push({ path: `/personal_workbench/project` })">返回项目列表</span>
|
|
|
+ </div>
|
|
|
+
|
|
|
+ <main class="project-info-manage">
|
|
|
+ <el-form
|
|
|
+ ref="projectForm"
|
|
|
+ :inline="true"
|
|
|
+ :model="project"
|
|
|
+ :rules="formRules"
|
|
|
+ label-width="120px"
|
|
|
+ class="project-form"
|
|
|
+ >
|
|
|
+ <el-form-item label="项目名称" prop="name" class="link-item">
|
|
|
+ <el-input v-model="project.name" placeholder="请输入项目名称" maxlength="20" />
|
|
|
+ <span class="link">更改</span>
|
|
|
+ </el-form-item>
|
|
|
+ <el-form-item label="项目分类" prop="category" class="link-item">
|
|
|
+ <el-input v-model="project.category" maxlength="30" />
|
|
|
+ <span class="link">更改</span>
|
|
|
+ </el-form-item>
|
|
|
+ <el-form-item label="作品标签" prop="label_list" class="label-input link-item">
|
|
|
+ <div class="label-input-content">
|
|
|
+ <div class="label-list">
|
|
|
+ <el-tag
|
|
|
+ v-for="(tag, index) in project.label_list"
|
|
|
+ :key="index"
|
|
|
+ closable
|
|
|
+ @close="project.label_list.splice(index, 1)"
|
|
|
+ >
|
|
|
+ {{ tag }}
|
|
|
+ </el-tag>
|
|
|
+ </div>
|
|
|
+ <el-input v-model="labelInput" placeholder="请输入标签" @keyup.enter.native="labelChange" />
|
|
|
+ <span class="link">更改</span>
|
|
|
</div>
|
|
|
- <el-input v-model="labelInput" placeholder="请输入标签" @keyup.enter.native="labelChange" />
|
|
|
+ </el-form-item>
|
|
|
+ <el-form-item label="语种" prop="language" class="link-item">
|
|
|
+ <el-input v-model="project.language" type="text" placeholder="请输入语种" maxlength="20" />
|
|
|
+ <span class="link">更改</span>
|
|
|
+ </el-form-item>
|
|
|
+ <el-form-item label="所属课题" prop="topic" class="link-item">
|
|
|
+ <el-input v-model="project.topic" type="text" placeholder="请输入所属课题" />
|
|
|
+ <span class="link">更改</span>
|
|
|
+ </el-form-item>
|
|
|
+ <el-form-item label="出版单位" prop="publisher" class="link-item">
|
|
|
+ <el-input v-model="project.publisher" type="text" placeholder="请输入出版单位" maxlength="20" />
|
|
|
+ <span class="link">更改</span>
|
|
|
+ </el-form-item>
|
|
|
+ <el-form-item label="内容简介" prop="content_intro" class="link-item">
|
|
|
+ <el-input
|
|
|
+ v-model="project.content_intro"
|
|
|
+ type="textarea"
|
|
|
+ :autosize="{ minRows: 4 }"
|
|
|
+ maxlength="1500"
|
|
|
+ show-word-limit
|
|
|
+ placeholder="请输入内容简介"
|
|
|
+ />
|
|
|
+ <span class="link">更改</span>
|
|
|
+ </el-form-item>
|
|
|
+ <el-form-item label="选题背景" prop="background" class="link-item">
|
|
|
+ <el-input
|
|
|
+ v-model="project.background"
|
|
|
+ type="textarea"
|
|
|
+ :autosize="{ minRows: 4 }"
|
|
|
+ maxlength="1500"
|
|
|
+ show-word-limit
|
|
|
+ placeholder="请输入选题背景"
|
|
|
+ />
|
|
|
+ <span class="link">更改</span>
|
|
|
+ </el-form-item>
|
|
|
+ <el-form-item label="作者简介" prop="author_intro" class="link-item">
|
|
|
+ <el-input
|
|
|
+ v-model="project.author_intro"
|
|
|
+ type="textarea"
|
|
|
+ :autosize="{ minRows: 4 }"
|
|
|
+ maxlength="1500"
|
|
|
+ show-word-limit
|
|
|
+ placeholder="请输入作者简介"
|
|
|
+ />
|
|
|
+ <span class="link">更改</span>
|
|
|
+ </el-form-item>
|
|
|
+ <el-form-item prop="content_count_YG" class="link-item label-tworow">
|
|
|
+ <span slot="label">预计容量<br />(课数)</span>
|
|
|
+ <el-input v-model="project.content_count_YG" type="number" />
|
|
|
+ <span class="link">更改</span>
|
|
|
+ </el-form-item>
|
|
|
+ <el-form-item label="预计字数" prop="word_count_YG" class="link-item">
|
|
|
+ <el-input v-model="project.word_count_YG" type="number" />
|
|
|
+ <span class="link">更改</span>
|
|
|
+ </el-form-item>
|
|
|
+ <el-form-item label="计划出版时间" prop="plan_publish_date" class="link-item">
|
|
|
+ <el-date-picker v-model="project.plan_publish_date" type="date" placeholder="选择日期" />
|
|
|
+ <span class="link">更改</span>
|
|
|
+ </el-form-item>
|
|
|
+ <el-form-item label="读者对象" prop="reader" class="link-item">
|
|
|
+ <el-input v-model="project.reader" type="text" placeholder="请输入读者对象" maxlength="20" />
|
|
|
<span class="link">更改</span>
|
|
|
- </div>
|
|
|
- </el-form-item>
|
|
|
- <el-form-item label="语种" prop="language" class="link-item">
|
|
|
- <el-input v-model="project.language" type="text" placeholder="请输入语种" maxlength="20" />
|
|
|
- <span class="link">更改</span>
|
|
|
- </el-form-item>
|
|
|
- <el-form-item label="所属课题" prop="topic" class="link-item">
|
|
|
- <el-input v-model="project.topic" type="text" placeholder="请输入所属课题" />
|
|
|
- <span class="link">更改</span>
|
|
|
- </el-form-item>
|
|
|
- <el-form-item label="出版单位" prop="publisher" class="link-item">
|
|
|
- <el-input v-model="project.publisher" type="text" placeholder="请输入出版单位" maxlength="20" />
|
|
|
- <span class="link">更改</span>
|
|
|
- </el-form-item>
|
|
|
- <el-form-item label="内容简介" prop="content_intro" class="link-item">
|
|
|
- <el-input
|
|
|
- v-model="project.content_intro"
|
|
|
- type="textarea"
|
|
|
- :autosize="{ minRows: 4 }"
|
|
|
- maxlength="1500"
|
|
|
- show-word-limit
|
|
|
- placeholder="请输入内容简介"
|
|
|
- />
|
|
|
- <span class="link">更改</span>
|
|
|
- </el-form-item>
|
|
|
- <el-form-item label="选题背景" prop="background" class="link-item">
|
|
|
- <el-input
|
|
|
- v-model="project.background"
|
|
|
- type="textarea"
|
|
|
- :autosize="{ minRows: 4 }"
|
|
|
- maxlength="1500"
|
|
|
- show-word-limit
|
|
|
- placeholder="请输入选题背景"
|
|
|
- />
|
|
|
- <span class="link">更改</span>
|
|
|
- </el-form-item>
|
|
|
- <el-form-item label="作者简介" prop="author_intro" class="link-item">
|
|
|
- <el-input
|
|
|
- v-model="project.author_intro"
|
|
|
- type="textarea"
|
|
|
- :autosize="{ minRows: 4 }"
|
|
|
- maxlength="1500"
|
|
|
- show-word-limit
|
|
|
- placeholder="请输入作者简介"
|
|
|
- />
|
|
|
- <span class="link">更改</span>
|
|
|
- </el-form-item>
|
|
|
- <el-form-item prop="content_count_YG" class="content-count link-item">
|
|
|
- <span slot="label">预计容量<br />(课数)</span>
|
|
|
- <el-input v-model="project.content_count_YG" type="number" />
|
|
|
- <span class="link">更改</span>
|
|
|
- </el-form-item>
|
|
|
- <el-form-item label="预计字数" prop="word_count_YG" class="link-item">
|
|
|
- <el-input v-model="project.word_count_YG" type="number" />
|
|
|
- <span class="link">更改</span>
|
|
|
- </el-form-item>
|
|
|
- <el-form-item label="计划出版时间" prop="plan_publish_date" class="link-item">
|
|
|
- <el-date-picker v-model="project.plan_publish_date" type="date" placeholder="选择日期" />
|
|
|
- <span class="link">更改</span>
|
|
|
- </el-form-item>
|
|
|
- <el-form-item label="读者对象" prop="reader" class="link-item">
|
|
|
- <el-input v-model="project.reader" type="text" placeholder="请输入读者对象" maxlength="20" />
|
|
|
- <span class="link">更改</span>
|
|
|
- </el-form-item>
|
|
|
- <el-form-item label="组长列表" prop="leader_id_list" class="link-item">
|
|
|
- <el-select v-model="project.leader_id_list" multiple placeholder="请选择组长列表">
|
|
|
- <el-option label="组长1" value="leader1" />
|
|
|
- <el-option label="组长2" value="leader2" />
|
|
|
- <el-option label="组长3" value="leader3" />
|
|
|
- </el-select>
|
|
|
- <span class="link">更改</span>
|
|
|
- </el-form-item>
|
|
|
- <el-form-item label="组员列表" prop="member_id_list" class="link-item">
|
|
|
- <el-select v-model="project.member_id_list" multiple placeholder="请选择组员列表">
|
|
|
- <el-option label="组员1" value="member1" />
|
|
|
- <el-option label="组员2" value="member2" />
|
|
|
- <el-option label="组员3" value="member3" />
|
|
|
- </el-select>
|
|
|
- <span class="link">更改</span>
|
|
|
- </el-form-item>
|
|
|
- </el-form>
|
|
|
+ </el-form-item>
|
|
|
+ <el-form-item prop="leader_id_list" class="link-item label-tworow">
|
|
|
+ <span slot="label">邀请其他<br />项目组长</span>
|
|
|
+ <el-input v-model="leaderNames" type="text">
|
|
|
+ <el-button slot="append" @click="selectLeader">选择</el-button>
|
|
|
+ </el-input>
|
|
|
+ <span class="link">更改</span>
|
|
|
+ </el-form-item>
|
|
|
+ <el-form-item label="组员列表" prop="member_id_list" class="link-item">
|
|
|
+ <el-input v-model="memberNames" type="text">
|
|
|
+ <el-button slot="append" @click="selectMembers">选择</el-button>
|
|
|
+ </el-input>
|
|
|
+ <span class="link">更改</span>
|
|
|
+ </el-form-item>
|
|
|
+ </el-form>
|
|
|
+
|
|
|
+ <selectMembers :visible.sync="visibleMembers" :title="selectMembersTitle" @confirm="handleSelectedMembers" />
|
|
|
+ </main>
|
|
|
</div>
|
|
|
</template>
|
|
|
|
|
@@ -118,13 +126,23 @@
|
|
|
import { GetProjectInfo } from '@/api/project';
|
|
|
import { GetUserList_ID } from '@/api/user';
|
|
|
|
|
|
+import selectMembers from '@/views/create_project/selectProjectMembers.vue';
|
|
|
+import MenuPage from '@/views/personal_workbench/menu.vue';
|
|
|
+
|
|
|
export default {
|
|
|
name: 'ProjectInfoManage',
|
|
|
+ components: {
|
|
|
+ selectMembers,
|
|
|
+ MenuPage,
|
|
|
+ },
|
|
|
data() {
|
|
|
return {
|
|
|
id: this.$route.params.id,
|
|
|
isManage: this.$route.query.isManage,
|
|
|
labelInput: '',
|
|
|
+ selectMembersTitle: '',
|
|
|
+ visibleMembers: false,
|
|
|
+ type: '',
|
|
|
leaderNames: '', // 组长姓名
|
|
|
memberNames: '', // 组员姓名
|
|
|
project: {
|
|
@@ -167,6 +185,29 @@ export default {
|
|
|
this.labelInput = ''; // 清空输入框
|
|
|
}
|
|
|
},
|
|
|
+ selectLeader() {
|
|
|
+ this.selectMembersTitle = '选择组长';
|
|
|
+ this.type = 'leader';
|
|
|
+ this.visibleMembers = true;
|
|
|
+ },
|
|
|
+ selectMembers() {
|
|
|
+ this.selectMembersTitle = '选择项目成员';
|
|
|
+ this.type = 'member';
|
|
|
+ this.visibleMembers = true;
|
|
|
+ },
|
|
|
+ /**
|
|
|
+ * 处理选择的成员
|
|
|
+ * @param {Array} selectedUsers - 选中的用户列表
|
|
|
+ */
|
|
|
+ handleSelectedMembers(selectedUsers) {
|
|
|
+ if (this.type === 'leader') {
|
|
|
+ this.leaderNames = selectedUsers.map((user) => user.real_name).join(';');
|
|
|
+ this.project.leader_id_list = selectedUsers.map((user) => user.id);
|
|
|
+ } else if (this.type === 'member') {
|
|
|
+ this.memberNames = selectedUsers.map((user) => user.real_name).join(';');
|
|
|
+ this.project.member_id_list = selectedUsers.map((user) => user.id);
|
|
|
+ }
|
|
|
+ },
|
|
|
/**
|
|
|
* 得到用户列表(指定ID)
|
|
|
* @param {Array} id_list - 用户ID列表
|
|
@@ -188,75 +229,85 @@ export default {
|
|
|
<style lang="scss" scoped>
|
|
|
@use '@/styles/mixin.scss' as *;
|
|
|
|
|
|
-.project-info-manage {
|
|
|
- @include page-base;
|
|
|
+.project-info {
|
|
|
+ @include page-content(true);
|
|
|
+
|
|
|
+ &__header {
|
|
|
+ .name {
|
|
|
+ width: 240px;
|
|
|
+ font-size: 16px;
|
|
|
+ font-weight: bold;
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ &-manage {
|
|
|
+ max-width: 1148px;
|
|
|
+ margin: 0 auto !important;
|
|
|
|
|
|
- max-width: 1148px;
|
|
|
- margin: 0 auto;
|
|
|
+ .project-form {
|
|
|
+ .link-item {
|
|
|
+ .el-input,
|
|
|
+ .el-select {
|
|
|
+ width: 380px;
|
|
|
+ }
|
|
|
|
|
|
- .project-form {
|
|
|
- .link-item {
|
|
|
- .el-input,
|
|
|
- .el-select {
|
|
|
- width: 380px;
|
|
|
- }
|
|
|
+ .el-textarea {
|
|
|
+ width: 930px;
|
|
|
+ }
|
|
|
|
|
|
- .el-textarea {
|
|
|
- width: 930px;
|
|
|
+ .link {
|
|
|
+ margin-left: 12px;
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
- .link {
|
|
|
- margin-left: 12px;
|
|
|
+ .label-tworow {
|
|
|
+ :deep > label {
|
|
|
+ display: inline-flex;
|
|
|
+ justify-content: flex-end;
|
|
|
+ width: 100%;
|
|
|
+ line-height: 16px;
|
|
|
+ }
|
|
|
}
|
|
|
- }
|
|
|
|
|
|
- .el-input,
|
|
|
- .el-select {
|
|
|
- width: 420px;
|
|
|
+ .el-input,
|
|
|
+ .el-select {
|
|
|
+ width: 420px;
|
|
|
|
|
|
- :deep .el-input__inner {
|
|
|
- background-color: #fff;
|
|
|
- border-color: #dcdcdc;
|
|
|
+ :deep .el-input__inner {
|
|
|
+ background-color: #fff;
|
|
|
+ border-color: #dcdcdc;
|
|
|
+ }
|
|
|
}
|
|
|
- }
|
|
|
|
|
|
- .el-textarea {
|
|
|
- width: 970px;
|
|
|
+ .el-textarea {
|
|
|
+ width: 970px;
|
|
|
|
|
|
- :deep .el-textarea__inner {
|
|
|
- background-color: #fff;
|
|
|
- border-color: #dcdcdc;
|
|
|
+ :deep .el-textarea__inner {
|
|
|
+ background-color: #fff;
|
|
|
+ border-color: #dcdcdc;
|
|
|
+ }
|
|
|
}
|
|
|
- }
|
|
|
|
|
|
- .label-input {
|
|
|
- max-width: 540px;
|
|
|
+ .label-input {
|
|
|
+ max-width: 540px;
|
|
|
|
|
|
- :deep .label-input-content {
|
|
|
- display: flex;
|
|
|
- align-items: center;
|
|
|
- width: 420px;
|
|
|
-
|
|
|
- .label-list {
|
|
|
+ :deep .label-input-content {
|
|
|
display: flex;
|
|
|
- flex-wrap: wrap;
|
|
|
- gap: 4px;
|
|
|
- }
|
|
|
+ align-items: center;
|
|
|
+ width: 420px;
|
|
|
|
|
|
- .el-input {
|
|
|
- flex: 1;
|
|
|
- min-width: 90px;
|
|
|
- margin-left: 6px;
|
|
|
- }
|
|
|
- }
|
|
|
- }
|
|
|
+ .label-list {
|
|
|
+ display: flex;
|
|
|
+ flex-wrap: wrap;
|
|
|
+ gap: 4px;
|
|
|
+ }
|
|
|
|
|
|
- .content-count {
|
|
|
- :deep > label {
|
|
|
- display: inline-flex;
|
|
|
- justify-content: flex-end;
|
|
|
- width: 100%;
|
|
|
- line-height: 16px;
|
|
|
+ .el-input {
|
|
|
+ flex: 1;
|
|
|
+ min-width: 90px;
|
|
|
+ margin-left: 6px;
|
|
|
+ }
|
|
|
+ }
|
|
|
}
|
|
|
}
|
|
|
}
|