提交 c1222f90 编写于 作者: vino's avatar vino

Merge branch 'release' into dev-20210330

# Conflicts:
#	package-lock.json
......@@ -2961,8 +2961,7 @@
"ansi-regex": {
"version": "2.1.1",
"bundled": true,
"dev": true,
"optional": true
"dev": true
},
"aproba": {
"version": "1.2.0",
......@@ -2983,14 +2982,12 @@
"balanced-match": {
"version": "1.0.0",
"bundled": true,
"dev": true,
"optional": true
"dev": true
},
"brace-expansion": {
"version": "1.1.11",
"bundled": true,
"dev": true,
"optional": true,
"requires": {
"balanced-match": "^1.0.0",
"concat-map": "0.0.1"
......@@ -3005,20 +3002,17 @@
"code-point-at": {
"version": "1.1.0",
"bundled": true,
"dev": true,
"optional": true
"dev": true
},
"concat-map": {
"version": "0.0.1",
"bundled": true,
"dev": true,
"optional": true
"dev": true
},
"console-control-strings": {
"version": "1.1.0",
"bundled": true,
"dev": true,
"optional": true
"dev": true
},
"core-util-is": {
"version": "1.0.2",
......@@ -3135,8 +3129,7 @@
"inherits": {
"version": "2.0.3",
"bundled": true,
"dev": true,
"optional": true
"dev": true
},
"ini": {
"version": "1.3.5",
......@@ -3148,7 +3141,6 @@
"version": "1.0.0",
"bundled": true,
"dev": true,
"optional": true,
"requires": {
"number-is-nan": "^1.0.0"
}
......@@ -3163,7 +3155,6 @@
"version": "3.0.4",
"bundled": true,
"dev": true,
"optional": true,
"requires": {
"brace-expansion": "^1.1.7"
}
......@@ -3171,14 +3162,12 @@
"minimist": {
"version": "0.0.8",
"bundled": true,
"dev": true,
"optional": true
"dev": true
},
"minipass": {
"version": "2.2.4",
"bundled": true,
"dev": true,
"optional": true,
"requires": {
"safe-buffer": "^5.1.1",
"yallist": "^3.0.0"
......@@ -3197,7 +3186,6 @@
"version": "0.5.1",
"bundled": true,
"dev": true,
"optional": true,
"requires": {
"minimist": "0.0.8"
}
......@@ -3278,8 +3266,7 @@
"number-is-nan": {
"version": "1.0.1",
"bundled": true,
"dev": true,
"optional": true
"dev": true
},
"object-assign": {
"version": "4.1.1",
......@@ -3291,7 +3278,6 @@
"version": "1.4.0",
"bundled": true,
"dev": true,
"optional": true,
"requires": {
"wrappy": "1"
}
......@@ -3377,8 +3363,7 @@
"safe-buffer": {
"version": "5.1.1",
"bundled": true,
"dev": true,
"optional": true
"dev": true
},
"safer-buffer": {
"version": "2.1.2",
......@@ -3414,7 +3399,6 @@
"version": "1.0.2",
"bundled": true,
"dev": true,
"optional": true,
"requires": {
"code-point-at": "^1.0.0",
"is-fullwidth-code-point": "^1.0.0",
......@@ -3434,7 +3418,6 @@
"version": "3.0.1",
"bundled": true,
"dev": true,
"optional": true,
"requires": {
"ansi-regex": "^2.0.0"
}
......@@ -3478,14 +3461,12 @@
"wrappy": {
"version": "1.0.2",
"bundled": true,
"dev": true,
"optional": true
"dev": true
},
"yallist": {
"version": "3.0.2",
"bundled": true,
"dev": true,
"optional": true
"dev": true
}
}
},
......@@ -4467,7 +4448,7 @@
"integrity": "sha512-J9X76xnncMw+wIqb15HeWfPMqPwYxSpPY8yWPJ7rAZN/ZDzFkjCSZObryCyUe8zbrVRNiuCnIeQteCzMn7GnWw==",
"requires": {
"canvg": "1.5.3",
"file-saver": "github:eligrey/FileSaver.js#1.3.8",
"file-saver": "github:eligrey/FileSaver.js#e865e37af9f9947ddcced76b549e27dc45c1cb2e",
"html2canvas": "1.0.0-alpha.12",
"omggif": "1.0.7",
"promise-polyfill": "8.1.0",
......@@ -8413,9 +8394,9 @@
}
},
"sortablejs": {
"version": "1.10.0-rc3",
"resolved": "http://192.168.110.93:4873/sortablejs/-/sortablejs-1.10.0-rc3.tgz",
"integrity": "sha1-L+Y0Y6OLXNEuyRT8PgNYMEhJb0I="
"version": "1.13.0",
"resolved": "http://192.168.110.93:4873/sortablejs/-/sortablejs-1.13.0.tgz",
"integrity": "sha1-OrJHP4xpymNWnoCxzRtWabUSaek="
},
"source-list-map": {
"version": "0.1.8",
......
<template>
<div class="kmc">
<el-row class="table-content">
<!-- 表格 -->
<div class="table-title">
<span class="table-t" v-for="(item,index) of titleList" :key="index">{{item.title}}</span>
</div>
<draggable :list="groupData" :move="getdata" @update="datadragEnd" :options="{handle:'.dargDiv'}">
<transition-group name="list-complete">
<div v-for="(element, index) in groupData" :key="index" class="list-complete-item dargDiv" v-bind:class="{ border_top: index == 0}">
<div class="styleclass" style="width: 150px">{{ index+1 }}</div>
<div class="styleclass" >{{ element.name }}</div>
<div class="styleclass" >{{ element.district }}</div>
<div class="styleclass" >{{ element.hospital }}</div>
<div class="styleclass" >{{ element.department }}</div>
<div class="styleclass" >{{ element.title }}</div>
<div class="styleclass" >{{ element.team }}</div>
<div class="styleclass" >{{ element.status }}</div>
<div class="styleclass" >
<el-button type="danger" size="small" @click="deletefn(index)">移除</el-button>
</div>
</div>
</transition-group>
</draggable>
</el-row>
</div>
</template>
<script>
export default {
props: {
tableData: {
type: Array,
default: []
}
},
data() {
return {
groupData: [],
titleList: [
{
title: '顺序(可拖拽排序)'
},
{
title: '姓名'
},
{
title: '地区'
},
{
title: '所在医院'
},
{
title: '科室'
},
{
title: '职称'
},
{
title: '所属团队'
},
{
title: '专家状态'
},
{
title: '操作'
}
]
}
},
watch: {
tableData: {
deep: true,
immediate: true,
handler(newv){
this.groupData = newv
}
}
},
methods: {
getdata: function(evt){
},
datadragEnd:function(evt){
console.log('拖动前的索引:'+evt.oldIndex);
console.log('拖动后的索引:'+evt.newIndex);
},
deletefn(index) {
this.groupData.splice(index,1)
},
getNewData() {
this.groupData.forEach((element,index) => {
element.seq = index + 1
});
return this.groupData
}
},
}
</script>
<style lang="scss" scoped>
.kmc{
font-size: 14px;
}
.table-content {
margin-top: 15px;
}
.save-btn {
margin-top: 20px;
display: flex;
justify-content: center;
}
.table-title {
display: flex;
/*height: 60px;*/
/*line-height: 60px;*/
min-height: 60px;
background: #fafafa;
border-bottom: 1px solid #efefef;
align-items: center;
justify-content: center;
.table-t {
flex: 1;
width: 11%;
display: inline-block;
text-align: center;
}
}
.dargDiv {
display: flex;
padding: 20px 0;
border-bottom: 1px solid #efefef;
overflow: hidden;
}
.dargDiv .styleclass{
flex: 1;
width: 11%;
text-align: center;
height: 100px;
// line-height: 100px;
// overflow: hidden;
// text-overflow:ellipsis;
// white-space: nowrap;
align-items: center;
justify-content: center;
display: flex;
}
</style>
<template>
<div class="kmc">
<el-form :model="ruleForm" :rules="rules" ref="ruleForm" label-width="120px" class="demo-ruleForm">
<el-row>
<el-col :span="6">
<el-form-item label="是否显示KOL入口" prop="showStatus">
<el-radio-group v-model="ruleForm.showStatus">
<el-radio :label="0"></el-radio>
<el-radio :label="1"></el-radio>
</el-radio-group>
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="入口文案" prop="desc">
<el-input v-model="ruleForm.desc" placeholder="请输入入口文案,最长6个字"></el-input>
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-button type="primary" @click="handleAdd">添加</el-button>
<span class="des">*说明:添加和移除kol后,需点击页面的保存按钮,方可生效</span>
</el-row>
</el-form>
<el-row class="table-content">
<kol-table :tableData="tableData" ref="kolTable" v-if="tableData && tableData.length"></kol-table>
<el-row class="save-btn">
<el-button type="primary" @click="handleSave">保存</el-button>
</el-row>
</el-row>
<el-dialog :title="dialogTitle"
:visible.sync="addFormVisible"
:close-on-press-escape="false"
:close-on-click-modal="false">
<el-form ref="addForm"
:rules="rules2"
:model="addForm"
label-width="150px"
label-suffix=":"
size="small">
<el-form-item label="姓名" prop="name">
<el-select v-model="addForm.name"
filterable
remote
placeholder="请输入专家姓名或医院名称,多个关键字用空格隔开"
clearable
style="width: 100%;"
:remote-method="remoteMethod"
@change="nameChange"
@visible-change="noSelectHand">
<el-option
v-for="item in expertList"
:key="item.userId"
:label="item.option"
:value="item.userId">
</el-option>
</el-select>
</el-form-item>
</el-form>
<div slot="footer" class="dialog-footer" style="text-align: center">
<el-button size="small" type="primary" @click="submitForm('addForm')">确 定</el-button>
<el-button size="small" @click="addFormVisible = false">取 消</el-button>
</div>
</el-dialog>
</div>
</template>
<script>
import kolTable from './kol-component/kolTable'
import { getExpertList, getExperNametList, saveKolConfig } from '@/utils/yqrange/rangeApi'
import { openLoading, closeLoading } from "@/utils/utils";
export default {
components: {
kolTable
},
props: {
circleId: {
type: Number | String,
default: null
}
},
data() {
return {
ruleForm: {
desc: '',
showStatus: 0
},
dialogTitle: '添加KOL',
addFormVisible: false,
addForm: {
name: '',
},
nameList: [],
expertList: [],
selectExpertItem: {},
rules: {
showStatus: [
{ required: true, message: '请选择是否展示入口', trigger: 'blur' }
],
desc: [
{ required: true, message: '请输入入口文案', trigger: 'blur' },
{ max: 6, message: '入口文案长度不能多于6个字符', trigger: 'blur' }
]
},
rules2: {
name: [
{ required: true, message: '请输入专家姓名或医院名称,多个关键字用空格隔开', trigger: 'change' },
],
},
tableData: []
}
},
mounted() {
this.initData();
},
methods: {
initData() {
getExpertList(this.circleId).then(res => {
if (res.code == '000000') {
// console.log('获取kol配置',res.data);
const { kolConfig, kolRecordList } = res.data;
this.ruleForm = kolConfig;
this.tableData = kolRecordList;
}
}).catch(err => {
console.log('网络出现点儿问题,稍后重试')
})
},
handleAdd() {
this.addFormVisible = true;
if (this.$refs['addForm']) {
this.$refs['addForm'].resetFields();
}
this.expertList = [];
this.selectExpertItem = {};
},
handleSave() {
// 排序和删除后的table数据
let newTableData = [];
if (this.tableData && this.tableData.length) {
newTableData = this.$refs.kolTable.getNewData()
}
this.$refs.ruleForm.validate((valid) => {
if (valid) {
let param = {
circleId: this.circleId,
kolConfig: this.ruleForm,
// kolRecordList: this.tableData
kolRecordList: newTableData
}
openLoading(this);
saveKolConfig(param).then(res => {
if (res.code == '000000') {
closeLoading(this);
this.$message.success('保存成功');
this.initData();
}
}).catch(err => {
console.log('出错了')
})
}
});
},
deleteItem(index) {
this.tableData.splice(index, 1);
},
remoteMethod(val){
if (val) {
getExperNametList(this.circleId, val).then(res => {
if (res.code == '000000') {
this.expertList = res.data;
}else {
this.expertList = [];
}
}).catch(err => {
console.log('网络出现点儿问题,稍后重试')
})
}else {
this.expertList = [];
}
},
nameChange(val) {
this.selectExpertItem = {};
if (val) {
this.expertList.map((item,index) => {
if(val == item.userId){
this.selectExpertItem = item.kolRecord;
}
})
}
},
noSelectHand(val) {
if (!val && !this.addForm.name) {
this.expertList = [];
this.selectExpertItem = {};
}
},
submitForm(formName) {
this.$refs[formName].validate((valid) => {
if (valid) {
let len = 0;
if (this.tableData && this.tableData.length) {
let len = this.tableData.length;
for (let i=0; i< len; i++) {
if (this.addForm.name == this.tableData[i].doctorId) {
this.$message.warning('当前选择的专家已经被添加过,请选择其他专家!');
return
}
}
}else {
this.tableData = [];
len = 0;
}
this.tableData.push({
...this.selectExpertItem,
seq: len + 1,
});
this.expertList = [];
this.addFormVisible = false;
}
});
},
},
}
</script>
<style lang="scss" scoped>
.des {
font-size: 12px;
color: #777;
margin-left: 40px;
}
.table-content {
margin-top: 15px;
}
.save-btn {
margin-top: 20px;
display: flex;
justify-content: center;
}
</style>
export const kolCol = [
{
label: '顺序',
prop: "seq"
},
{
label: '姓名',
prop: "name"
},
{
label: '地区',
prop: "district"
},
{
label: '所在医院',
prop: "hospital"
},
{
label: '科室',
prop: "department"
},
{
label: '职称',
prop: "title"
},
{
label: '所属团队',
prop: "team"
},
{
label: '发布状态',
prop: "status"
},
{
label: '操作',
prop: "operate"
}
]
......@@ -6,6 +6,8 @@ import store from './store/'
const mixins = require('@/utils/mixins');
import FastClick from 'fastclick'
import vueFilters from '@/utils/filter'
import draggable from 'vuedraggable'
Vue.component('draggable', draggable);
// import '@/utils/toBlob';
// 引入ElementUI
......
......@@ -79,3 +79,31 @@ export const getTotalNumber = (data) => {
description: '查询已选机构、人员',
})
};
export const getExpertList = (circleId) => {
return fetch({
headers,
url: getBaseUrl(`circle/kol/admin/circleId/${circleId}/list`),
method: 'get',
description: '获取kol配置、专家列表',
})
};
export const getExperNametList = (circleId, name) => {
return fetch({
headers,
url: getBaseUrl(`circle/kol/admin/circleId/${circleId}/queryName/${name}`),
method: 'get',
description: '添加专家关联-获取专家下拉',
})
};
export const saveKolConfig = (data) => {
return fetch({
headers,
url: getBaseUrl(`circle/kol/admin/save`),
method: 'post',
data: data,
description: 'KOL管理tab保存',
})
};
......@@ -27,6 +27,9 @@
<el-tab-pane label="排行榜管理" name="six" v-if="idType == 1">
<gp-ranking></gp-ranking>
</el-tab-pane>
<el-tab-pane label="KOL管理" name="seven">
<kol-manage :circleId="circleId"/>
</el-tab-pane>
</el-tabs>
</div>
<div v-if="active == 4">
......@@ -47,6 +50,7 @@ import { getRangeList,updateRangeStatus, getCircleSettingList, saveCircleSetting
import Mebman from "../../components/yqrange/mebman";
import AdsManage from "../../components/yqrange/ads-manage";
import GpRanking from "../../components/yqrange/gp-ranking";
import KolManage from '../../components/yqrange/kol-manage';
export default {
components: {
GpRanking,
......@@ -54,9 +58,11 @@ export default {
Mebman,
RangeSetting,
LiveManage,
BreadCrumb
BreadCrumb,
KolManage
},
data(){
return{
curmbFirst: '云鹊专区',
curmbSecond: '专区管理',
......
Markdown 格式
0% or
您添加了 0 到此讨论。请谨慎行事。
先完成此消息的编辑!
想要评论请 注册