提交 邀请审稿人列表
This commit is contained in:
@@ -132,10 +132,11 @@
|
|||||||
</p>
|
</p>
|
||||||
</el-collapse-item>
|
</el-collapse-item>
|
||||||
</el-collapse>
|
</el-collapse>
|
||||||
<el-collapse class="auth_colla auth_collna_ew" style="margin-top: -15px">
|
<el-collapse v-model="researchAreas" class="auth_colla auth_collna_ew" style="margin-top: -15px">
|
||||||
<el-collapse-item title="Research areas" name="1">
|
<el-collapse-item title="Research areas" name="1">
|
||||||
<div style="position: relative; height: 30px">
|
<div style="position: relative; height: 30px">
|
||||||
<common-major
|
<common-major
|
||||||
|
v-if="form.state==0"
|
||||||
:articleId="editform.articleId"
|
:articleId="editform.articleId"
|
||||||
@load="initMajor()"
|
@load="initMajor()"
|
||||||
style="position: absolute; top: 10px; right: 10px"
|
style="position: absolute; top: 10px; right: 10px"
|
||||||
@@ -152,7 +153,7 @@
|
|||||||
<span style="color: #006699; font-weight: bold; margin-right: 10px"
|
<span style="color: #006699; font-weight: bold; margin-right: 10px"
|
||||||
>Field {{ i + 1 }}:</span
|
>Field {{ i + 1 }}:</span
|
||||||
>{{ v.str
|
>{{ v.str
|
||||||
}}<i
|
}}<i v-if="form.state==0"
|
||||||
class="el-icon-delete-solid"
|
class="el-icon-delete-solid"
|
||||||
style="color: #f56c6c !important; margin-left: 10px"
|
style="color: #f56c6c !important; margin-left: 10px"
|
||||||
@click="handleDeleteMajor(v)"
|
@click="handleDeleteMajor(v)"
|
||||||
@@ -553,6 +554,7 @@ export default {
|
|||||||
},
|
},
|
||||||
data() {
|
data() {
|
||||||
return {
|
return {
|
||||||
|
researchAreas:['1'],
|
||||||
AIcontent:'',
|
AIcontent:'',
|
||||||
previewData: {},
|
previewData: {},
|
||||||
baseUrl: this.Common.baseUrl,
|
baseUrl: this.Common.baseUrl,
|
||||||
|
|||||||
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@@ -1,27 +1,54 @@
|
|||||||
<template>
|
<template>
|
||||||
<div class="block commonMajor" style="width: 100%;overflow: hidden;">
|
<div class="block commonMajor" style="width: 100%; overflow: hidden">
|
||||||
<el-button type="primary" plain size="mini" @click="handleAdd" style="float:right;margin-bottom: 20px;"><i class="el-icon-plus" ></i>Add Field </el-button>
|
<div v-if="!disabled">
|
||||||
<div
|
<el-button type="primary" plain size="mini" @click="handleAdd" style="float: right; margin-bottom: 20px"
|
||||||
v-for="(field, index) in fields"
|
><i class="el-icon-plus"></i>Add Field
|
||||||
:key="index"
|
</el-button>
|
||||||
class="cascader-container"
|
<div
|
||||||
style="margin-bottom: 10px; display: flex; align-items: center; justify-content: space-between"
|
v-for="(field, index) in fields"
|
||||||
>
|
:key="index"
|
||||||
<span style="margin-right: 10px; font-size: 12px; color: #006699; font-weight: bold">Field {{ Number(index+1) }} :</span>
|
class="cascader-container"
|
||||||
|
style="margin-bottom: 10px; display: flex; align-items: center; justify-content: space-between"
|
||||||
|
>
|
||||||
|
<span style="margin-right: 10px; font-size: 12px; color: #006699; font-weight: bold">Field {{ Number(index + 1) }} :</span>
|
||||||
|
|
||||||
|
<el-cascader
|
||||||
|
:ref="`cascader${index}`"
|
||||||
|
@change="handleChange(index)"
|
||||||
|
v-model="field.selectedValue"
|
||||||
|
:placeholder="'Please select Field '"
|
||||||
|
:options="options"
|
||||||
|
:props="getProps()"
|
||||||
|
style="width: calc(100% - 120px)"
|
||||||
|
></el-cascader>
|
||||||
|
|
||||||
|
<!-- Delete button -->
|
||||||
|
<el-button size="mini" type="danger" style="margin-left: 10px" @click="handleDelete(index)"
|
||||||
|
><i class="el-icon-delete"></i
|
||||||
|
></el-button>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div v-else>
|
||||||
|
|
||||||
|
<div
|
||||||
|
v-for="(field, index) in fields"
|
||||||
|
:key="index"
|
||||||
|
class="cascader-container"
|
||||||
|
style="display: flex; align-items: center; justify-content: space-between"
|
||||||
|
>
|
||||||
|
<span style="margin-right: 10px; font-size: 12px; color: #006699; font-weight: bold">Field {{ Number(index + 1) }} :</span>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<div style="width: calc(100% - 60px)">
|
||||||
|
{{field.str.replace('Medicine >', '').trim() }}
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
|
||||||
<el-cascader
|
|
||||||
:ref="`cascader${index}`"
|
|
||||||
@change="handleChange(index)"
|
|
||||||
v-model="field.selectedValue"
|
|
||||||
:placeholder="'Please select Field '"
|
|
||||||
:options="options"
|
|
||||||
:props="getProps()"
|
|
||||||
style="width: calc(100% - 120px)"
|
|
||||||
></el-cascader>
|
|
||||||
|
|
||||||
<!-- Delete button -->
|
|
||||||
<el-button size="mini" type="danger" style="margin-left: 10px;" @click="handleDelete(index)"><i class="el-icon-delete"></i></el-button>
|
|
||||||
</div>
|
|
||||||
<!-- <el-dialog title="Add Field " :visible.sync="coreVisible1" width="780px" :close-on-click-modal="false">
|
<!-- <el-dialog title="Add Field " :visible.sync="coreVisible1" width="780px" :close-on-click-modal="false">
|
||||||
<el-form :model="coreForm1" :rules="rules1" ref="core_Form1" label-width="140px" >
|
<el-form :model="coreForm1" :rules="rules1" ref="core_Form1" label-width="140px" >
|
||||||
<el-form-item prop="major">
|
<el-form-item prop="major">
|
||||||
@@ -45,7 +72,7 @@
|
|||||||
|
|
||||||
<script>
|
<script>
|
||||||
export default {
|
export default {
|
||||||
props: {
|
props: {
|
||||||
userId: {
|
userId: {
|
||||||
type: String,
|
type: String,
|
||||||
default: ''
|
default: ''
|
||||||
@@ -53,21 +80,23 @@ export default {
|
|||||||
list: {
|
list: {
|
||||||
type: Array,
|
type: Array,
|
||||||
default: []
|
default: []
|
||||||
|
},
|
||||||
|
disabled: {
|
||||||
|
type: Boolean,
|
||||||
|
default: false
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
watch: {
|
watch: {
|
||||||
list: {
|
list: {
|
||||||
handler(e) {
|
handler(e) {
|
||||||
|
this.fields = this.list.length > 0 ? [...this.list] : [{}];
|
||||||
this.fields=this.list.length>0?[...this.list]:[{}]
|
|
||||||
},
|
},
|
||||||
immediate: true
|
immediate: true
|
||||||
},
|
}
|
||||||
|
|
||||||
},
|
},
|
||||||
data() {
|
data() {
|
||||||
return {
|
return {
|
||||||
rules1:{},
|
rules1: {},
|
||||||
coreVisible1: false,
|
coreVisible1: false,
|
||||||
coreForm1: {
|
coreForm1: {
|
||||||
majorList: []
|
majorList: []
|
||||||
@@ -86,18 +115,18 @@ export default {
|
|||||||
|
|
||||||
this.$nextTick(() => {
|
this.$nextTick(() => {
|
||||||
this.$refs[`cascader${i}`][0].dropDownVisible = false;
|
this.$refs[`cascader${i}`][0].dropDownVisible = false;
|
||||||
this.coreForm1.majorList = this.fields[i].selectedValue;
|
this.coreForm1.majorList = this.fields[i].selectedValue;
|
||||||
|
|
||||||
this.$emit('load',this.fields)
|
this.$emit('load', this.fields);
|
||||||
|
|
||||||
this.$forceUpdate();
|
this.$forceUpdate();
|
||||||
});
|
});
|
||||||
},
|
},
|
||||||
onSubmit_core1(coreForm) {
|
onSubmit_core1(coreForm) {
|
||||||
console.log('coreForm at line 1963:', coreForm);
|
console.log('coreForm at line 1963:', coreForm);
|
||||||
if(!this.fields[0].selectedValue||this.fields[0].selectedValue.length == 0){
|
if (!this.fields[0].selectedValue || this.fields[0].selectedValue.length == 0) {
|
||||||
this.$message.error('Please select Field !');
|
this.$message.error('Please select Field !');
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
this.$refs.core_Form1.validate((valid) => {
|
this.$refs.core_Form1.validate((valid) => {
|
||||||
if (valid) {
|
if (valid) {
|
||||||
@@ -112,7 +141,7 @@ this.coreForm1.majorList = this.fields[i].selectedValue;
|
|||||||
this.$message.success('Personal information modified successfully!');
|
this.$message.success('Personal information modified successfully!');
|
||||||
this.coreVisible1 = false;
|
this.coreVisible1 = false;
|
||||||
// this.tipVisible = false;
|
// this.tipVisible = false;
|
||||||
this.$emit('load')
|
this.$emit('load');
|
||||||
} else {
|
} else {
|
||||||
this.$message.error(res.msg);
|
this.$message.error(res.msg);
|
||||||
}
|
}
|
||||||
@@ -129,9 +158,9 @@ this.coreForm1.majorList = this.fields[i].selectedValue;
|
|||||||
// 动态添加一个新的 Cascader
|
// 动态添加一个新的 Cascader
|
||||||
handleAdd() {
|
handleAdd() {
|
||||||
this.$nextTick(() => {
|
this.$nextTick(() => {
|
||||||
// this.fields=[]
|
// this.fields=[]
|
||||||
this.fields.push({ selectedValue: [] }); // 添加一个新的字段
|
this.fields.push({ selectedValue: [] }); // 添加一个新的字段
|
||||||
this.$emit('load',this.fields)
|
this.$emit('load', this.fields);
|
||||||
// this.coreVisible1 = true;
|
// this.coreVisible1 = true;
|
||||||
});
|
});
|
||||||
},
|
},
|
||||||
@@ -139,7 +168,7 @@ this.coreForm1.majorList = this.fields[i].selectedValue;
|
|||||||
// 删除指定的 Cascader
|
// 删除指定的 Cascader
|
||||||
handleDelete(index) {
|
handleDelete(index) {
|
||||||
this.fields.splice(index, 1); // 删除指定索引的字段
|
this.fields.splice(index, 1); // 删除指定索引的字段
|
||||||
this.$emit('load',this.fields)
|
this.$emit('load', this.fields);
|
||||||
},
|
},
|
||||||
|
|
||||||
// 获取 Cascader 配置
|
// 获取 Cascader 配置
|
||||||
|
|||||||
147
src/components/page/components/major/tableList.vue
Normal file
147
src/components/page/components/major/tableList.vue
Normal file
@@ -0,0 +1,147 @@
|
|||||||
|
<template>
|
||||||
|
<div>
|
||||||
|
<div
|
||||||
|
@click="disabled?'':BoxMajor()"
|
||||||
|
v-if="user_id"
|
||||||
|
style="display: flex; align-items: center; justify-content: space-between;"
|
||||||
|
:style="{ cursor: disabled ? '' : 'pointer' }"
|
||||||
|
>
|
||||||
|
<!-- 使用 user_id 来获取用户的 majorData -->
|
||||||
|
<div>
|
||||||
|
<div v-if="!loading" class="majorDataBox">
|
||||||
|
<p v-for="(v, i) in majorData" style="border-top: 1px solid #b3d8ff">
|
||||||
|
<span style="font-weight: bold">{{ i + 1 }}.</span>
|
||||||
|
{{ v.major_title.replace('Medicine >', '').trim() }}
|
||||||
|
</p>
|
||||||
|
</div>
|
||||||
|
<div v-else>
|
||||||
|
<span>Loading...</span>
|
||||||
|
<!-- 如果数据还在加载,显示 "Loading..." -->
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<b style="margin-left: 10px; color: #006699" class="el-icon-edit" v-if="!disabled"></b>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<el-dialog title="Edit Research areas" :visible.sync="majorBox" width="800px">
|
||||||
|
<el-form ref="remark" :model="majorMes" label-width="120px">
|
||||||
|
<el-form-item label="Reviewer :">
|
||||||
|
<p style="line-height: 20px; margin-top: 6px">
|
||||||
|
<span style="color: #333; font-weight: bold">{{ majorMes.realname }}</span>
|
||||||
|
( {{ majorMes.email }} )
|
||||||
|
</p>
|
||||||
|
</el-form-item>
|
||||||
|
<!-- <el-form-item label="Email :">
|
||||||
|
<p style="line-height: 20px; margin-top: 6px">{{ majorMes.email }}</p>
|
||||||
|
</el-form-item> -->
|
||||||
|
<el-form-item label="Research areas :">
|
||||||
|
<common-major-list :list="majorValueList" @load="(e) => (this.majorValueList = e)"></common-major-list>
|
||||||
|
</el-form-item>
|
||||||
|
</el-form>
|
||||||
|
<span slot="footer" class="dialog-footer">
|
||||||
|
<el-button @click="majorBox = false">Cancel</el-button>
|
||||||
|
<el-button type="primary" @click="saveMajor">Save</el-button>
|
||||||
|
</span>
|
||||||
|
</el-dialog>
|
||||||
|
|
||||||
|
<!-- 评级弹出框 -->
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script>
|
||||||
|
export default {
|
||||||
|
components: {},
|
||||||
|
props: ['user_id','baseInfo','disabled'],
|
||||||
|
data() {
|
||||||
|
return {
|
||||||
|
majorValueList: [],
|
||||||
|
majorData: [],
|
||||||
|
majorMes: {},
|
||||||
|
majorBox: false,
|
||||||
|
loading: false,
|
||||||
|
};
|
||||||
|
},
|
||||||
|
created() {
|
||||||
|
this.loading = true; // 开始加载数据
|
||||||
|
// this.initMajor()
|
||||||
|
},
|
||||||
|
mounted() {
|
||||||
|
this.fetchMajorData(this.user_id); // 加载第一个用户的数据
|
||||||
|
},
|
||||||
|
methods: {
|
||||||
|
BoxMajor() {
|
||||||
|
this.majorBox = true;
|
||||||
|
this.majorMes.realname = this.baseInfo.realname;
|
||||||
|
this.majorMes.user_id = this.baseInfo.user_id;
|
||||||
|
this.majorMes.email = this.baseInfo.email;
|
||||||
|
this.majorValueList = [...this.majorData].map((item) => ({
|
||||||
|
selectedValue: Array.isArray(item.shu)
|
||||||
|
? item.shu
|
||||||
|
: typeof item.shu === 'string'
|
||||||
|
? item.shu.split(',').map(Number)
|
||||||
|
: [item.shu]
|
||||||
|
}));
|
||||||
|
},
|
||||||
|
async fetchMajorData(userId) {
|
||||||
|
|
||||||
|
// if (!this.majorData[userId]) {
|
||||||
|
// 判断是否已经加载过该用户的数据
|
||||||
|
this.majorData = await this.getMajorData(userId);
|
||||||
|
this.$forceUpdate()
|
||||||
|
// }
|
||||||
|
},
|
||||||
|
// 修改标记
|
||||||
|
async getMajorData(userId) {
|
||||||
|
try {
|
||||||
|
const res = await this.$api.post('api/Reviewer/getUserField', { user_id: userId });
|
||||||
|
this.loading = false; // 开始加载数据
|
||||||
|
if (res.status === 1) {
|
||||||
|
return res.data; // 返回数据
|
||||||
|
} else {
|
||||||
|
return []; // 如果没有数据,返回空数组
|
||||||
|
}
|
||||||
|
|
||||||
|
} catch (error) {
|
||||||
|
console.error('Error fetching data:', error);
|
||||||
|
return []; // 如果发生错误,返回空数组
|
||||||
|
}
|
||||||
|
|
||||||
|
},
|
||||||
|
saveMajor() {
|
||||||
|
this.$api
|
||||||
|
.post('api/Reviewer/updateUserField', {
|
||||||
|
user_id: this.majorMes.user_id,
|
||||||
|
user_field: this.majorValueList.map((item) => item.selectedValue[item.selectedValue.length - 1]).toString(',')
|
||||||
|
})
|
||||||
|
.then((res) => {
|
||||||
|
if (res.status == 1) {
|
||||||
|
this.$message.success('Success');
|
||||||
|
this.majorBox = false;
|
||||||
|
this.fetchMajorData(this.majorMes.user_id);
|
||||||
|
} else {
|
||||||
|
this.$message.error(res.msg);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<style scoped>
|
||||||
|
.deteleBtn {
|
||||||
|
color: #ce1111;
|
||||||
|
margin-left: 18px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.deteleBtn i {
|
||||||
|
font-weight: bold;
|
||||||
|
}
|
||||||
|
|
||||||
|
.deteleBtn:hover {
|
||||||
|
text-decoration: underline;
|
||||||
|
cursor: pointer;
|
||||||
|
}
|
||||||
|
.majorDataBox p:nth-child(1) {
|
||||||
|
border-top: none !important;
|
||||||
|
}
|
||||||
|
</style>
|
||||||
@@ -208,27 +208,7 @@
|
|||||||
</el-table-column> -->
|
</el-table-column> -->
|
||||||
<el-table-column label="Research areas" width="300">
|
<el-table-column label="Research areas" width="300">
|
||||||
<template slot-scope="scope">
|
<template slot-scope="scope">
|
||||||
<div
|
<commonMajorTableList :user_id="scope.row.user_id" :baseInfo="scope.row" :key="scope.row.user_id"></commonMajorTableList>
|
||||||
@click="BoxMajor(scope.row, majorData[scope.row.user_id])"
|
|
||||||
v-if="scope.row.user_id"
|
|
||||||
style="display: flex; align-items: center; justify-content: space-between; cursor: pointer"
|
|
||||||
>
|
|
||||||
<!-- 使用 user_id 来获取用户的 majorData -->
|
|
||||||
<div>
|
|
||||||
<div v-if="majorData[scope.row.user_id]" class="majorDataBox">
|
|
||||||
<p v-for="(v, i) in majorData[scope.row.user_id]" style="border-top: 1px solid #b3d8ff">
|
|
||||||
<span style="font-weight: bold">{{ i + 1 }}.</span>
|
|
||||||
{{ v.major_title.replace('Medicine >', '').trim() }}
|
|
||||||
</p>
|
|
||||||
</div>
|
|
||||||
<div v-else>
|
|
||||||
<span>Loading...</span>
|
|
||||||
<!-- 如果数据还在加载,显示 "Loading..." -->
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<b style="margin-left: 10px; color: #006699" class="el-icon-edit"></b>
|
|
||||||
</div>
|
|
||||||
</template>
|
</template>
|
||||||
</el-table-column>
|
</el-table-column>
|
||||||
|
|
||||||
@@ -496,9 +476,11 @@
|
|||||||
const currentYear = new Date().getFullYear();
|
const currentYear = new Date().getFullYear();
|
||||||
var ReviewTime = `(${currentYear - 2}–${currentYear})`;
|
var ReviewTime = `(${currentYear - 2}–${currentYear})`;
|
||||||
import commonReviewer from '../page/components/reviewerList/add.vue';
|
import commonReviewer from '../page/components/reviewerList/add.vue';
|
||||||
|
import commonMajorTableList from '../page/components/major/tableList.vue';
|
||||||
export default {
|
export default {
|
||||||
components: {
|
components: {
|
||||||
commonReviewer
|
commonReviewer,
|
||||||
|
commonMajorTableList,
|
||||||
},
|
},
|
||||||
|
|
||||||
data() {
|
data() {
|
||||||
@@ -778,7 +760,7 @@ export default {
|
|||||||
if (res.code == 0) {
|
if (res.code == 0) {
|
||||||
this.tableData = res.data;
|
this.tableData = res.data;
|
||||||
for (var i = 0; i < this.tableData.length; i++) {
|
for (var i = 0; i < this.tableData.length; i++) {
|
||||||
this.fetchMajorData(this.tableData[i].user_id); // 加载第一个用户的数据
|
// this.fetchMajorData(this.tableData[i].user_id); // 加载第一个用户的数据
|
||||||
this.getScoreData(i, this.tableData[i].score);
|
this.getScoreData(i, this.tableData[i].score);
|
||||||
}
|
}
|
||||||
this.link_Total = res.total || 0;
|
this.link_Total = res.total || 0;
|
||||||
|
|||||||
Reference in New Issue
Block a user