294 lines
7.6 KiB
Vue
294 lines
7.6 KiB
Vue
|
|
<template>
|
|||
|
|
<div>
|
|||
|
|
<el-tag
|
|||
|
|
class="skill-select-tag"
|
|||
|
|
:key="tag.id"
|
|||
|
|
v-for="tag in selectedSkills"
|
|||
|
|
:disable-transitions="true"
|
|||
|
|
size="medium"
|
|||
|
|
>{{ tag.name }}</el-tag
|
|||
|
|
>
|
|||
|
|
<el-button
|
|||
|
|
v-if="canSelect"
|
|||
|
|
class="button-new-tag"
|
|||
|
|
size="small"
|
|||
|
|
@click="showSelect"
|
|||
|
|
:disabled="!this.id"
|
|||
|
|
>+ 选择技能</el-button
|
|||
|
|
>
|
|||
|
|
<el-dialog
|
|||
|
|
title="技能标签"
|
|||
|
|
:visible.sync="dialogVisible"
|
|||
|
|
width="30%"
|
|||
|
|
:close-on-click-modal="false"
|
|||
|
|
:close-on-press-escape="false"
|
|||
|
|
:append-to-body="true"
|
|||
|
|
v-loading="loading"
|
|||
|
|
>
|
|||
|
|
<el-row>
|
|||
|
|
<el-col :span="24">
|
|||
|
|
<div>
|
|||
|
|
<el-tag
|
|||
|
|
class="skill-select-tag"
|
|||
|
|
:key="tag.id"
|
|||
|
|
v-for="(tag, index) in tobeSelectedSkills"
|
|||
|
|
closable
|
|||
|
|
type="primary"
|
|||
|
|
:disable-transitions="true"
|
|||
|
|
@close="removeSkill(index)"
|
|||
|
|
size="medium"
|
|||
|
|
>{{ tag.name }}</el-tag
|
|||
|
|
>
|
|||
|
|
</div>
|
|||
|
|
</el-col>
|
|||
|
|
</el-row>
|
|||
|
|
|
|||
|
|
<div>请选择或者添加您所需的技能标签(最多5个)</div>
|
|||
|
|
<el-row>
|
|||
|
|
<el-col :span="24">
|
|||
|
|
<div class="autocompleteBox">
|
|||
|
|
<el-autocomplete
|
|||
|
|
popper-class="my-autocomplete"
|
|||
|
|
v-model.trim="search"
|
|||
|
|
:fetch-suggestions="querySearch"
|
|||
|
|
placeholder="请选择行业类型"
|
|||
|
|
@select="handleSelect"
|
|||
|
|
maxlength="15"
|
|||
|
|
show-word-limit
|
|||
|
|
>
|
|||
|
|
<el-button
|
|||
|
|
type="primary"
|
|||
|
|
:disabled = "addBtnState"
|
|||
|
|
slot="suffix"
|
|||
|
|
@click="handleIconClick"
|
|||
|
|
size="mini"
|
|||
|
|
>+添加</el-button>
|
|||
|
|
<!-- <i class="el-icon-arrow-down" slot="suffix" @click="handleIconClickArrowDown"></i> -->
|
|||
|
|
<template slot-scope="{ item }">
|
|||
|
|
<div class="name">{{item.value}}</div>
|
|||
|
|
</template>
|
|||
|
|
</el-autocomplete>
|
|||
|
|
|
|||
|
|
</div>
|
|||
|
|
|
|||
|
|
<!-- <el-autocomplete
|
|||
|
|
v-model="search"
|
|||
|
|
:fetch-suggestions="querySearch"
|
|||
|
|
:trigger-on-focus="false"
|
|||
|
|
placeholder="搜索您想要的标签"
|
|||
|
|
@select="editSkill"
|
|||
|
|
style="width: 100%"
|
|||
|
|
:validate-event="false"
|
|||
|
|
>
|
|||
|
|
<template slot-scope="{ item }">
|
|||
|
|
<div>{{ item.name }}</div>
|
|||
|
|
</template>
|
|||
|
|
</el-autocomplete> -->
|
|||
|
|
</el-col>
|
|||
|
|
</el-row>
|
|||
|
|
|
|||
|
|
<el-row>
|
|||
|
|
<el-col :span="24">
|
|||
|
|
<div>
|
|||
|
|
<a
|
|||
|
|
class="skill-select-tag"
|
|||
|
|
href="javascript:void(0)"
|
|||
|
|
v-for="tag in allSkill"
|
|||
|
|
:key="tag.id"
|
|||
|
|
@click="editSkill(tag)"
|
|||
|
|
>
|
|||
|
|
<el-tag
|
|||
|
|
type="info"
|
|||
|
|
:disable-transitions="true"
|
|||
|
|
size="medium"
|
|||
|
|
effect="plain"
|
|||
|
|
>{{ tag.name }}</el-tag
|
|||
|
|
>
|
|||
|
|
</a>
|
|||
|
|
</div>
|
|||
|
|
</el-col>
|
|||
|
|
</el-row>
|
|||
|
|
<span slot="footer" class="dialog-footer">
|
|||
|
|
<el-button
|
|||
|
|
icon="el-icon-circle-plus-outline"
|
|||
|
|
type="primary"
|
|||
|
|
@click="submit"
|
|||
|
|
>保 存</el-button
|
|||
|
|
>
|
|||
|
|
<el-button icon="el-icon-circle-close" @click="dialogVisible = false"
|
|||
|
|
>取 消</el-button
|
|||
|
|
>
|
|||
|
|
</span>
|
|||
|
|
</el-dialog>
|
|||
|
|
</div>
|
|||
|
|
</template>
|
|||
|
|
|
|||
|
|
<script>
|
|||
|
|
import { getSkillList } from "@/api/tenant/common";
|
|||
|
|
import {skillListAdd} from "@/api/tenant/mission";
|
|||
|
|
import _ from "lodash";
|
|||
|
|
|
|||
|
|
export default {
|
|||
|
|
name: "skillSelect",
|
|||
|
|
props: {
|
|||
|
|
selectedSkills: Array,
|
|||
|
|
canSelect: Boolean,
|
|||
|
|
id: String,
|
|||
|
|
},
|
|||
|
|
data() {
|
|||
|
|
return {
|
|||
|
|
search: "",
|
|||
|
|
loading: false,
|
|||
|
|
dialogVisible: false,
|
|||
|
|
tobeSelectedSkills: [],
|
|||
|
|
allSkill: [],
|
|||
|
|
flags:true,
|
|||
|
|
addBtnState:true,
|
|||
|
|
nameAttr:[]
|
|||
|
|
};
|
|||
|
|
},
|
|||
|
|
created() {
|
|||
|
|
},
|
|||
|
|
computed: {},
|
|||
|
|
watch: {
|
|||
|
|
id: function (val, oldVal) {
|
|||
|
|
if (val !== oldVal && oldVal) {
|
|||
|
|
this.$emit("add-skill", []);
|
|||
|
|
}
|
|||
|
|
},
|
|||
|
|
search:function(n,o){
|
|||
|
|
if((n || o!='') && this.tobeSelectedSkills.length != 0){
|
|||
|
|
this.$emit('clear-validator');
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
},
|
|||
|
|
methods: {
|
|||
|
|
//获取技能列表
|
|||
|
|
getData() {
|
|||
|
|
if (this.id) {
|
|||
|
|
this.loading = true;
|
|||
|
|
getSkillList(this.id).then((res) => {
|
|||
|
|
this.allSkill = res.data.data.records;
|
|||
|
|
this.nameAttr = this.allSkill.map((ele)=>{
|
|||
|
|
return ele.name
|
|||
|
|
})
|
|||
|
|
this.loading = false;
|
|||
|
|
});
|
|||
|
|
}
|
|||
|
|
},
|
|||
|
|
handleSelect(item) {
|
|||
|
|
this.addBtnState = true;
|
|||
|
|
// console(item);
|
|||
|
|
this.editSkill(item);
|
|||
|
|
},
|
|||
|
|
querySearch(queryString, cb) {
|
|||
|
|
let results = [];
|
|||
|
|
let nameState = this.nameAttr.indexOf(queryString);
|
|||
|
|
if(nameState == -1){
|
|||
|
|
this.addBtnState = false;
|
|||
|
|
}else{
|
|||
|
|
this.addBtnState = true;
|
|||
|
|
}
|
|||
|
|
for(let i of this.allSkill){
|
|||
|
|
i.value = i.name;
|
|||
|
|
}
|
|||
|
|
results = queryString ? this.allSkill.filter(this.createStateFilter(queryString)) : this.allSkill;
|
|||
|
|
cb(results);
|
|||
|
|
},
|
|||
|
|
createStateFilter(queryString) {
|
|||
|
|
return (state) => {
|
|||
|
|
return (state.value.toLowerCase().indexOf(queryString.toLowerCase()) === 0);
|
|||
|
|
};
|
|||
|
|
},
|
|||
|
|
handleIconClick() {
|
|||
|
|
let nameState = this.nameAttr.indexOf(this.search)
|
|||
|
|
if(this.search == ""){
|
|||
|
|
this.$message.closeAll()
|
|||
|
|
this.$message({
|
|||
|
|
type: "error",
|
|||
|
|
message: "请输入要添加的技能!",
|
|||
|
|
})
|
|||
|
|
}else if(nameState != -1){
|
|||
|
|
this.$message({
|
|||
|
|
type: "error",
|
|||
|
|
message: "此技能已存在,请在列表中选择!",
|
|||
|
|
})
|
|||
|
|
}else{
|
|||
|
|
skillListAdd(this.id,this.search).then((res) =>{
|
|||
|
|
if(res.data.code == 200){
|
|||
|
|
//this.search = res.data.data;
|
|||
|
|
this.$message({
|
|||
|
|
type: "success",
|
|||
|
|
message: res.data.msg,
|
|||
|
|
})
|
|||
|
|
this.addBtnState = true;
|
|||
|
|
this.getData();
|
|||
|
|
}else{
|
|||
|
|
this.$message({
|
|||
|
|
type: "error",
|
|||
|
|
message: res.data.msg,
|
|||
|
|
})
|
|||
|
|
}
|
|||
|
|
});
|
|||
|
|
}
|
|||
|
|
},
|
|||
|
|
/*技能*/
|
|||
|
|
editSkill(tag) {
|
|||
|
|
if (this.tobeSelectedSkills.length < 5) {
|
|||
|
|
if (
|
|||
|
|
this.tobeSelectedSkills.find((item) => {
|
|||
|
|
return item.id === tag.id;
|
|||
|
|
})
|
|||
|
|
) {
|
|||
|
|
if(!this.flags){
|
|||
|
|
this.$message({
|
|||
|
|
message: "您已添加该技能标签",
|
|||
|
|
type: "warning",
|
|||
|
|
});
|
|||
|
|
this.flags=true;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
} else {
|
|||
|
|
this.tobeSelectedSkills.push(tag);
|
|||
|
|
this.$emit('clear-validator');
|
|||
|
|
this.flags=false;
|
|||
|
|
}
|
|||
|
|
} else {
|
|||
|
|
this.$message({
|
|||
|
|
message: "最多添加5个技能标签",
|
|||
|
|
type: "warning",
|
|||
|
|
});
|
|||
|
|
}
|
|||
|
|
},
|
|||
|
|
removeSkill(index) {
|
|||
|
|
this.tobeSelectedSkills.splice(index, 1);
|
|||
|
|
},
|
|||
|
|
submit() {
|
|||
|
|
if (this.tobeSelectedSkills.length) {
|
|||
|
|
this.dialogVisible = false;
|
|||
|
|
this.$emit("add-skill", this.tobeSelectedSkills);
|
|||
|
|
} else {
|
|||
|
|
this.$message.closeAll();
|
|||
|
|
this.$message({
|
|||
|
|
message: "请至少选择一个技能标签",
|
|||
|
|
type: "warning",
|
|||
|
|
});
|
|||
|
|
}
|
|||
|
|
},
|
|||
|
|
showSelect() {
|
|||
|
|
this.tobeSelectedSkills = _.cloneDeep(this.selectedSkills || []);
|
|||
|
|
this.getData();
|
|||
|
|
this.dialogVisible = true;
|
|||
|
|
},
|
|||
|
|
},
|
|||
|
|
};
|
|||
|
|
</script>
|
|||
|
|
<style scoped>
|
|||
|
|
.skill-select-tag {
|
|||
|
|
margin: 0px 5px;
|
|||
|
|
}
|
|||
|
|
.autocompleteBox .el-autocomplete{
|
|||
|
|
width:100%;
|
|||
|
|
}
|
|||
|
|
</style>
|