Commit 66135290 by caoyanzhi

Merge branch 'featrue/销售线索' into 'master'

Featrue/销售线索

See merge request !2
parents ade7e0be be2b43ef
...@@ -14,4 +14,13 @@ export default { ...@@ -14,4 +14,13 @@ export default {
} }
}; };
</script> </script>
<style></style> <style>
@import '../static/font/iconfont.css';
.svg-iconfont {
width: 1em;
height: 1em;
vertical-align: -0.15em;
fill: currentColor;
overflow: hidden;
}
</style>
...@@ -23,7 +23,7 @@ import { Message } from 'element-ui'; ...@@ -23,7 +23,7 @@ import { Message } from 'element-ui';
Vue.axios.defaults.timeout = 500000; Vue.axios.defaults.timeout = 500000;
// let local = window.location.origin; // let local = window.location.origin;
// eslint-disable-next-line // eslint-disable-next-line
let local = process.env.NODE_ENV == 'development' ? 'https://www.gicdev.com/': ''; let local = process.env.NODE_ENV == 'development' ? 'https://www.gicdev.com/' : '';
/* if (local.indexOf('localhost') != -1) { /* if (local.indexOf('localhost') != -1) {
local = 'https://www.gicdev.com'; local = 'https://www.gicdev.com';
} */ } */
......
...@@ -34,7 +34,7 @@ export default { ...@@ -34,7 +34,7 @@ export default {
dateToTime(val) { dateToTime(val) {
console.log(val) // console.log(val)
// (0-9)年月数字的显示 // (0-9)年月数字的显示
function formatDig(num) { function formatDig(num) {
return num > 9 ? '' + num : '0' + num; return num > 9 ? '' + num : '0' + num;
......
...@@ -127,7 +127,7 @@ ...@@ -127,7 +127,7 @@
</el-tooltip> </el-tooltip>
</template> </template>
<template slot-scope="scope"> <template slot-scope="scope">
<el-button type="text" size="small" @click="toEditGroup(scope.$index, scope.row)">编辑分组可见范围</el-button> <el-button type="text" @click="toEditGroup(scope.$index, scope.row)">编辑分组可见范围</el-button>
</template> </template>
</el-table-column> </el-table-column>
</el-table> </el-table>
...@@ -387,7 +387,7 @@ export default { ...@@ -387,7 +387,7 @@ export default {
}); });
}, },
handleSelectedList(data) { handleSelectedList(data) {
console.log(data); // console.log(data);
const that = this; const that = this;
that.defaultStoreList = data || []; that.defaultStoreList = data || [];
that.saveGorupRange(); that.saveGorupRange();
...@@ -432,7 +432,7 @@ export default { ...@@ -432,7 +432,7 @@ export default {
*/ */
toChangeTemp(e, index, row) { toChangeTemp(e, index, row) {
const that = this; const that = this;
console.log(e, index, row) // console.log(e, index, row)
let para = { let para = {
brandId: that.brandId, brandId: that.brandId,
memberTagGroupId: row.memberTagGroupId, memberTagGroupId: row.memberTagGroupId,
......
...@@ -37,8 +37,8 @@ ...@@ -37,8 +37,8 @@
</el-table-column> </el-table-column>
<el-table-column prop="" label="操作" show-overflow-tooltip> <el-table-column prop="" label="操作" show-overflow-tooltip>
<template slot-scope="scope"> <template slot-scope="scope">
<el-button type="text" size="small" @click="toEdit(scope.$index, scope.row)">编辑</el-button> <el-button type="text" @click="toEdit(scope.$index, scope.row)">编辑</el-button>
<el-button type="text" size="small" @click="toDel(scope.$index, scope.row)">删除</el-button> <el-button type="text" @click="toDel(scope.$index, scope.row)">删除</el-button>
</template> </template>
</el-table-column> </el-table-column>
</el-table> </el-table>
......
...@@ -62,8 +62,8 @@ ...@@ -62,8 +62,8 @@
</el-table-column> </el-table-column>
<el-table-column prop="" width="200" label="操作" fixed="right"> <el-table-column prop="" width="200" label="操作" fixed="right">
<template slot-scope="scope"> <template slot-scope="scope">
<el-button type="text" size="small" @click="toSendDetail(scope.$index, scope.row, '1')">发送记录</el-button> <el-button type="text" @click="toSendDetail(scope.$index, scope.row, '1')">发送记录</el-button>
<el-button type="text" size="small" @click="toSendDetail(scope.$index, scope.row, '2')">领取记录</el-button> <el-button type="text" @click="toSendDetail(scope.$index, scope.row, '2')">领取记录</el-button>
</template> </template>
</el-table-column> </el-table-column>
</el-table> </el-table>
......
...@@ -64,7 +64,7 @@ components: { ...@@ -64,7 +64,7 @@ components: {
</el-table-column> </el-table-column>
<el-table-column label="操作"> <el-table-column label="操作">
<template slot-scope="scope"> <template slot-scope="scope">
<el-button type="text" size="small" @click="showDetail(scope.$index, scope.row)">查看详情</el-button> <el-button type="text" @click="showDetail(scope.$index, scope.row)">查看详情</el-button>
</template> </template>
</el-table-column> </el-table-column>
</el-table> </el-table>
......
...@@ -106,7 +106,7 @@ export default { ...@@ -106,7 +106,7 @@ export default {
if (status === 'complete' && result.info === 'OK') { if (status === 'complete' && result.info === 'OK') {
if (result && result.regeocode) { if (result && result.regeocode) {
/* eslint-disable */ /* eslint-disable */
console.log(result); // console.log(result);
that.address = result.regeocode.formattedAddress; that.address = result.regeocode.formattedAddress;
that.ruleForm.address = result.regeocode.formattedAddress; that.ruleForm.address = result.regeocode.formattedAddress;
that.$nextTick(); that.$nextTick();
......
...@@ -96,7 +96,7 @@ components: { ...@@ -96,7 +96,7 @@ components: {
</el-table-column> </el-table-column>
<el-table-column prop="" label="操作" show-overflow-tooltip> <el-table-column prop="" label="操作" show-overflow-tooltip>
<template slot-scope="scope"> <template slot-scope="scope">
<el-button type="text" size="small" @click="toSendDetail(scope.$index, scope.row)">发送记录</el-button> <el-button type="text" @click="toSendDetail(scope.$index, scope.row)">发送记录</el-button>
</template> </template>
</el-table-column> </el-table-column>
</el-table> </el-table>
......
...@@ -201,7 +201,7 @@ export default { ...@@ -201,7 +201,7 @@ export default {
*/ */
handleSelectedList(group) { handleSelectedList(group) {
const that = this; const that = this;
console.log(group); // console.log(group);
/* if (that.selectType === 'people') { /* if (that.selectType === 'people') {
that.formData.peopleList = group; that.formData.peopleList = group;
} else */ } else */
......
<!--
* @Descripttion: 当前组件信息
* @version: 1.0.0
* @Author: 无尘
* @Date: 2020-02-08 10:27:21
* @LastEditors: 无尘
* @LastEditTime: 2020-08-26 09:57:29
-->
<!--
选择门店分组组件:
<gic-select-group
:brandId="enterpriseId"
width="287px"
:authMerchant="true"
:selectData="partForm.storeGroup"
@checkGroupIds="checkGroupIds">
</gic-select-group>
import gicSelectGroup from '@/components/common/gic-select-group.vue';
checkGroupIds: function(nodes) {
const that = this;
that.conditionObj.groupIds = nodes;
},
-->
<template>
<el-popover placement="bottom-start" style="min-width: 357px" v-model="departmentVisible">
<div class="select-search authMerchant">
<el-input placeholder="请输入内容" maxlength="50" v-model="searchSelect" style="width: 100%;" @keyup.native="value => toInput(value, searchSelect)" @clear="clearSearch"> <i slot="prefix" class="el-input__icon el-icon-search"></i> </el-input>
</div>
<div class="select-tree-wrap m-t-10">
<!--:load="loadNode"-->
<el-tree :filter-node-method="filterNode" clearable :data="groupData" :default-checked-keys="checkedKeys" node-key="relationId" ref="groupTree" check-strictly show-checkbox default-expand-all :props="defaultProps" :expand-on-click-node="false" @check="checkGroup">
<div class="custom-tree-node" slot-scope="{ data }">
<p>
<span :class="['font-14 p-r-10 iconfont', 'iconqiye-tianchong', data.isBind == 1 ? 'color-2f54eb' : 'color-dedfe6']"></span><span class="font-14 color-606266">{{ data.label }}</span>
</p>
<p class="color-909399 font-12">{{ data.isBind ? data.wxEnterpriseName + '已授权' : '' }}</p>
</div>
</el-tree>
</div>
<div class="flex-column item-cell-select inline-block " slot="reference">
<div class="depart-item-wrap">
<div :style="{ width: width }" class="el-select el-select--large depart-item-content">
<span class="font-14 color-c0c4cc p-l-10" style="display: inline-block;line-height: 32px;color: #c0c4cc;" v-if="!groupIds.length">请选择门店分组</span>
<div class="el-select__tags" style="max-width: 348px;">
<span style="display:block">
<template v-for="(item, index) in groupIds">
<span class="el-tag el-tag--info el-tag--small" :key="index">
<span class="el-select__tags-text">{{ item.relationName }}</span>
<i class="el-tag__close el-icon-close" @click.stop="delDepart(index, groupIds)"></i>
</span>
</template>
</span>
</div>
</div>
</div>
</div>
</el-popover>
</template>
<script>
import { getRequest } from '@/api/api';
import errMsg from '@/common/js/error';
import { _debounce } from '@/common/js/public';
// import dayLoginChartVue from '../login-data/day-login-chart.vue';
export default {
name: 'gic-select-group',
props: {
width: {
type: String,
default() {
return '287px';
}
},
selectData: {
// 数据回显
type: [Object, Array],
default() {
return [];
}
},
brandId: {
type: String,
default() {
return '';
}
}
},
data() {
return {
projectName: '', // 当前项目名
enterpriseId: this.brandId,
searchSelect: '', // 搜索字段
departmentVisible: false,
groupIds: [],
groupData: [],
checkedListCopy: [],
groupDataCopy: [],
defaultProps: {
children: 'children',
label: 'storeGroupName'
},
checkedKeys: []
};
},
methods: {
filterNode(value, data) {
if (!value || !data.label) return true;
return data.label.indexOf(value) !== -1;
},
/**
* 加载更多
*/
async loadNode(node, resolve) {
const that = this;
if (node.level === 0) {
return resolve(that.getGroup());
} else {
await that.getGroup(node, node.data, resolve);
}
},
/**
* 输入
*/
toInput: _debounce(function(e, value) {
const that = this;
// that.getGroup();
if (!that.groupDataCopy.length) {
return false;
}
}, 500),
/**
* 清空
*/
clearSearch() {
const that = this;
that.groupData = JSON.parse(JSON.stringify(that.groupDataCopy));
},
/**
* 删除
*/
delDepart(index, arr) {
const that = this;
arr.splice(index, 1);
const keys = arr.map(ele => ele.relationId);
that.setCheckedKeys(keys);
},
/**
* 选择 tree 节点,获取选择节点信息
*/
checkGroup: function(e) {
const that = this;
that.groupIds = that.$refs.groupTree.getCheckedNodes();
that.$emit('checkGroupIds', that.$refs.groupTree.getCheckedNodes());
},
/**
* 设置 tree
*/
setCheckedKeys(keys) {
const that = this;
that.$refs.groupTree.setCheckedKeys(keys);
that.$emit('checkGroupIds', that.$refs.groupTree.getCheckedNodes());
},
/**
* 处理排序
*/
async handleSort(item) {
const that = this;
for (let i = 0; i < item.children.length; i++) {
item.children.sort(function(a, b) {
return a.storeGroupSort - b.storeGroupSort;
});
if (item.children[i].length) {
await that.handleSort(item.children[i]);
}
}
},
/**
* 简单数组-->父子数组对象
*/
async treeData(data) {
// const that = this;
let tree = data.filter(father => {
father.disabled = father.isBind ? true : false;
//循环所有项
let branchArr = data.filter(child => {
return father.relationId == child.parentRelationId; //返回每一项的子级数组
});
if (branchArr.length > 0) {
father.children = branchArr; //如果存在子级,则给父级添加一个children属性,并赋值
}
return father.parentRelationId == 0; //返回第一层
});
return tree;
},
/**
* 获取门店分组
*/
async getGroup() {
const that = this;
let para = {
enterpriseId: that.brandId
};
getRequest('/haoban-manage3-web/gic-store-group-list', para)
.then(async res => {
let resData = res.data;
if (resData.errorCode == 1) {
if (!!resData.result && !!resData.result.length) {
resData.result.forEach(ele => {
ele.label = ele.relationName;
ele.relationName = ele.relationName;
});
const data = await that.treeData(resData.result);
that.$nextTick(() => {
that.groupData = JSON.parse(JSON.stringify(data)) || [];
that.groupDataCopy = JSON.parse(JSON.stringify(that.groupData)) || [];
if (that.selectData) {
that.checkedListCopy = that.selectData;
}
});
that.$forceUpdate();
}
return;
}
errMsg.errorMsg(resData);
})
.catch(function(error) {
that.$message.error({
duration: 1000,
message: error.message
});
});
}
},
watch: {
selectData: function(newData, oldData) {
let that = this;
if (!!newData.length) {
that.checkedKeys = newData.map(ele => ele.relationId);
that.groupIds = that.$refs.groupTree.getCheckedNodes();
} else {
that.groupIds = [];
}
},
searchSelect(val) {
this.$refs.groupTree.filter(val);
},
brandId(val) {
const that = this;
that.searchSelect = '';
that.groupIds = [];
that.groupData = [];
that.groupDataCopy = [];
if (val) {
that.getGroup();
}
},
checkedListCopy(val) {
this.$nextTick(() => {
this.groupIds = [];
val.forEach(i => {
const node = this.$refs.groupTree.getNode(i);
this.groupIds.push(node.data);
if (node.isLeaf) {
this.$refs.groupTree.setChecked(node, true);
this.$emit('checkGroupIds', this.$refs.groupTree.getCheckedNodes());
}
});
});
}
},
mounted() {
const that = this;
that.getGroup();
}
};
</script>
<style lang="scss" scoped>
.depart-item-content {
width: 213px;
height: 32px;
overflow: hidden;
white-space: nowrap;
border-radius: 2px;
border: 1px solid #c4c6cf;
cursor: pointer;
box-sizing: border-box;
}
.select-tree-wrap {
max-height: 300px;
overflow-y: auto;
.custom-tree-node {
display: flex;
justify-content: space-between;
align-items: center;
box-sizing: border-box;
width: 100%;
padding-right: 12px;
}
}
.item-cell-select {
>>> .el-select__tags {
white-space: nowrap;
overflow: hidden;
}
.el-select {
.el-tag {
border-radius: 2px;
border: 1px solid rgba(220, 223, 230, 1);
background-color: #fff;
.el-tag__close {
top: 1px;
color: #909399;
&:hover {
background-color: transparent;
}
}
}
}
}
.authMerchant {
width: 253px;
}
</style>
<template>
<svg class="icon svg-icon svg-iconfont" aria-hidden="true" :style="ClassStyle">
<use :xlink:href="IconName"></use>
</svg>
</template>
<script>
export default {
props: {
size: {
type: [Number, String],
default: 20
},
iconname: {
type: String,
default: ''
}
},
computed: {
ClassStyle() {
return `width:${parseInt(this.size)};height:${parseInt(this.size)};`;
},
IconName() {
return `#${this.iconname}`;
}
}
};
</script>
<style scoped></style>
...@@ -218,7 +218,7 @@ export default { ...@@ -218,7 +218,7 @@ export default {
} }
/* eslint-disable */ /* eslint-disable */
that.fileDatas = fileList; that.fileDatas = fileList;
console.log('fileList:', fileList, that.fileDatas) // console.log('fileList:', fileList, that.fileDatas)
that.$nextTick(() => { that.$nextTick(() => {
let list = []; let list = [];
if (fileList.length) { if (fileList.length) {
......
<!--
* @Descripttion: 销售线索-门店任务-任务详情-完成详细信息
* @version: 1.0.0
* @Author: 阿羽
* @Date: 2021-04-13 17:57:01
* @LastEditors: 阿羽
* @LastEditTime: 2021-04-13 17:57:01
-->
<!--
<salesleads-taskinfo :item="item"></salesleads-taskinfo>
import salesleadsTaskinfo from '@/components/review/salesleads-task-info.vue';
-->
<template>
<el-dialog title="完成详情" :visible.sync="dialogVisible" width="600px" @close="close">
<div class="">
<el-form :model="form" :rules="rules" ref="form" label-width="120px" class="demo-form">
<el-form-item label="完成时间" prop="overdueTime"> {{ form.finishTime | formatTimeStamp }}</el-form-item>
<el-form-item label="完成方式" prop="touchTypes"> {{ form.touchFinishTypeName }}</el-form-item>
<el-form-item label="备注" prop="finishRemark"> {{ form.finishRemark || '' }} </el-form-item>
<el-form-item label="图片" prop="imgUrl">
<template v-for="item in form.remarkImgUrl">
<el-popover placement="right-start" :open-delay="200" width="300" trigger="hover" :key="item">
<img style="display:block;width:100%" :src="item" alt="" />
<el-image slot="reference" style="width: 40px; height: 40px" :src="item" fit="cover"></el-image>
</el-popover>
</template>
</el-form-item>
</el-form>
</div>
</el-dialog>
</template>
<script>
export default {
props: {
item: {
type: Object,
default() {
return {};
}
}
},
components: {},
data() {
return {
dialogVisible: true,
form: {
finishTime: null,
finishRemark: '',
touchFinishTypeName: '',
remarkImgUrl: []
}
};
},
methods: {
close() {
this.$emit('close');
}
},
watch: {
item(newData) {
const that = this;
if (Object.keys(newData).length) {
that.$nextTick(() => {
that.form = JSON.parse(JSON.stringify(newData));
});
}
}
},
mounted() {
const that = this;
if (Object.keys(that.item).length) {
that.$nextTick(() => {
that.form = JSON.parse(JSON.stringify(that.item));
});
}
}
};
</script>
<style lang="scss" scoped>
>>> .el-dialog__header {
padding: 19px 28px;
}
>>> .el-dialog__body {
padding-top: 10px;
}
>>> .el-form-item {
margin-bottom: 0;
.el-form-item__label {
line-height: 30px;
}
.el-form-item__content {
font-size: 14px;
font-weight: 400;
color: #303133;
line-height: 30px;
}
.el-popover__reference {
margin-top: 10px;
margin-right: 10px;
border-radius: 4px;
}
}
</style>
<!--
* @Descripttion:企业信息-新增小程序
* @version: 1.0.0
* @Author: 阿羽
* @Date: 2021-04-12 15:57:24
* @LastEditors: 阿羽
* @LastEditTime: 2021-04-12 15:57:24
-->
<!--
<app-set @closeText="closeText" @submitText="submitText"></app-set>
import appSet from '@/components/set/app-set.vue';
-->
<template>
<el-dialog :title="editRow.type === 'edit' ? '编辑' : '获取小程序'" :visible.sync="dialogVisible" width="600px" :before-close="handleClose">
<div class="">
<el-form :model="ruleForm" :rules="rules" ref="ruleForm" label-width="120px" class="demo-ruleForm">
<el-form-item label="授权商户" prop="enterpriseId">
<el-select v-model="ruleForm.enterpriseId" placeholder="请选择授权商户" :disabled="editRow.type === 'edit'" @change="chooseEnterprise">
<el-option v-for="item in options" :key="item.value" :label="item.enterpriseName" :value="item.enterpriseId"> </el-option>
</el-select>
</el-form-item>
<el-form-item label="小程序名称" prop="miniprogramName">
<el-input show-word-limit placeholder="请输入小程序名称" type="text" v-model="ruleForm.miniprogramName" maxlength="20"></el-input>
</el-form-item>
<el-form-item label="AppID:" prop="appId">
<el-input show-word-limit placeholder="请先选择授权商户" type="text" v-model="ruleForm.appId" maxlength="80" :disabled="true"></el-input>
</el-form-item>
<el-form-item label="标题:" prop="title">
<el-input show-word-limit placeholder="请输入标题" type="text" v-model="ruleForm.title" maxlength="80"></el-input>
</el-form-item>
<el-form-item label=" 封面:" prop="pic">
<single-upload uploadType="1" :imgSrc.sync="ruleForm.imageUrl" :field="''" class="app-set" :uploadLimit="20"> </single-upload>
<p style="margin-top: 9px;font-size: 12px;color: #909399;line-height: 17px;">建议尺寸520*416,支持png、jpg、jpeg格式</p>
</el-form-item>
</el-form>
</div>
<div slot="footer" class="dialog-footer">
<el-button @click="toCancel">取消</el-button>
<el-button type="primary" @click="submitForm('ruleForm')">{{ editRow.type === 'edit' ? '保存' : '确定' }}</el-button>
</div>
</el-dialog>
</template>
<script>
import singleUpload from '@/components/single-upload.vue';
import { _debounce } from '@/common/js/public';
import { postRequest, getRequest } from '@/api/api';
import showMsg from '@/common/js/showmsg';
import errMsg from '@/common/js/error';
export default {
props: {
editRow: {
type: Object,
default() {
return {};
}
}
},
components: {
singleUpload
},
data() {
return {
dialogVisible: true,
ruleForm: {
miniprogramName: '',
appId: '',
title: '',
imageUrl: ''
},
rules: {
enterpriseId: [{ required: true, message: '请选择授权商户', trigger: 'blur' }],
miniprogramName: [{ required: true, message: '请输入小程序名称', trigger: 'blur' }],
appId: [{ required: true, message: '请输入AppID', trigger: 'blur' }],
title: [{ required: true, message: '请输入标题', trigger: 'blur' }]
},
options: []
};
},
methods: {
toCancel() {
const that = this;
that.$emit('closeText');
that.$refs['ruleForm'].resetFields();
},
handleClose(done) {
const that = this;
that.$emit('closeText');
that.$refs['ruleForm'].resetFields();
},
submitForm: _debounce(function(formName) {
const that = this;
that.$refs[formName].validate(valid => {
if (valid) {
this.$confirm('是否确认提交?', '提示', {
confirmButtonText: '确定',
cancelButtonText: '取消',
type: 'warning'
})
.then(() => {
that.postSave();
})
.catch(() => {});
}
});
}, 300),
postSave() {
const that = this;
const data = { ...that.ruleForm };
postRequest('/haoban-manage3-web/save-miniprogram-setting', data)
.then(res => {
let resData = res.data;
if (resData.errorCode == 1) {
showMsg.showmsg('操作成功', 'success');
that.$refs['ruleForm'].resetFields();
that.$emit('submitText');
} else {
that.$refs['ruleForm'].resetFields();
that.$emit('submitText');
errMsg.errorMsg(resData);
}
})
.catch(error => {
that.$message.error({
duration: 1000,
message: error.message
});
});
},
getTableList(val) {
const that = this;
let para = {};
getRequest('/haoban-manage3-web/wxa-enterprise-list', para)
.then(res => {
let resData = res.data;
if (resData.errorCode == 1) {
that.options = resData.result || [];
return false;
}
errMsg.errorMsg(resData);
})
.catch(function(error) {
that.$message.error({
duration: 1000,
message: error.message
});
});
},
chooseEnterprise(val) {
const that = this;
const item = that.options.filter(item => item.enterpriseId === val)[0];
that.ruleForm.miniprogramName = item.miniprogramName;
that.ruleForm.appId = item.appId;
that.ruleForm.title = item.title;
that.ruleForm.imageUrl = item.imageUrl;
}
},
watch: {
editRow(newData) {
const that = this;
if (Object.keys(newData).length) {
that.$nextTick(() => {
that.ruleForm = JSON.parse(JSON.stringify(newData));
});
}
}
},
mounted() {
const that = this;
that.getTableList();
if (Object.keys(that.editRow).length) {
that.$nextTick(() => {
that.ruleForm = JSON.parse(JSON.stringify(that.editRow));
});
}
}
};
</script>
<style lang="scss" scoped></style>
<style lang="scss">
.app-set {
.avatar-uploader {
.el-upload {
width: 60px !important;
height: 60px !important;
.font-12 {
display: none;
}
.avatar-uploader-icon {
font-size: 14px;
color: #303133;
font-weight: bold;
}
}
}
.upload-tip {
display: none;
}
}
</style>
<!--
* @Descripttion:素材库-分配企业
* @version: 1.0.0
* @Author: 阿羽
* @Date: 2021-04-12 15:57:24
* @LastEditors: 阿羽
* @LastEditTime: 2021-04-12 15:57:24
-->
<!--
<el-button type="text" @click="toDistribute(scope.$index, scope.row)" v-if="scope.row.fromMaterialId =='-1'">分配企业</el-button>
<distribution-enterprise :editRow="distributionEditRow" :show="showDistribution" @closeText="closeTextDistribution" @submitText="submitTextDistribution"></distribution-enterprise>
<script>
import distributionEnterprise from '@/components/set/distribution-enterprise.vue';
export default {
data() {
return {
showDistribution: false,
distributionEditRow: {}
};
},
methods: {
closeTextDistribution() {
this.showDistribution = false;
this.distributionEditRow = {};
},
submitTextDistribution() {
const that = this;
that.showDistribution = false;
that.distributionEditRow = {};
that.$emit('refreshTable');
},
toDistribute(index, row) {
this.showDistribution = true;
this.distributionEditRow = row;
},
},
components: {
distributionEnterprise
}
-->
<template>
<el-dialog title="分配企业" :visible.sync="dialogVisible" width="490px" class="distribution-enterprise" @close="toCancel">
<div>
<el-form :model="form" :rules="rules" ref="ruleForm" class="demo-ruleForm">
<el-form-item>
<p class="check-all">
<el-checkbox v-model="checkAll" :disabled="hasCheckAll" :indeterminate="isIndeterminate" @change="handleCheckAllChange">全选</el-checkbox>
</p>
<el-form-item prop="checkedList">
<p v-if="!options.length" class="no-enterprise">暂无可分配企业</p>
<el-checkbox-group v-else v-model="form.checkedList" name="checkedList" @change="handleCheckedListChange">
<el-checkbox v-for="(opt, index) in options" name="checkedList" :label="opt.wxEnterpriseId" :key="index" :disabled="opt.bindFlag">
<p class="name">{{ opt.enterpriseName }}</p>
</el-checkbox>
</el-checkbox-group>
</el-form-item>
</el-form-item>
</el-form>
</div>
<div slot="footer" class="dialog-footer">
<el-button @click="toCancel">取消</el-button>
<el-button type="primary" @click="submitForm('ruleForm')" :disabled="hasCheckAll">分配</el-button>
</div>
</el-dialog>
</template>
<script>
import { _debounce } from '@/common/js/public';
import { postRequest, getRequest } from '@/api/api';
import showMsg from '@/common/js/showmsg';
import errMsg from '@/common/js/error';
export default {
props: {
editRow: {
type: Object,
default() {
return {};
}
},
show: {
type: Boolean,
default() {
return false;
}
}
},
data() {
return {
dialogVisible: false,
ruleForm: {
enterpriseId: ''
},
rules: {
checkedList: [{ type: 'array', required: true, message: '请选择企业', tigger: 'change' }]
},
hasCheckAll: false,
checkAll: false,
form: { checkedList: [] },
options: [],
isIndeterminate: false
};
},
methods: {
toCancel() {
this.$emit('closeText');
this.form.checkedList = [];
this.hasCheckAll = false;
this.checkAll = false;
this.isIndeterminate = false;
this.$refs['ruleForm'].resetFields();
},
submitForm: _debounce(function(formName) {
const that = this;
that.$refs[formName].validate(valid => {
if (valid) {
this.$confirm('是否确认提交?', '提示', {
confirmButtonText: '确定',
cancelButtonText: '取消',
type: 'warning'
})
.then(() => {
that.postSave();
})
.catch(() => {});
}
});
}, 300),
postSave() {
const that = this;
let data = {
materialIds: that.editRow.materialId,
toWxEnterpriseIds: that.form.checkedList.join(',')
};
postRequest('/haoban-manage3-web/material-share', data)
.then(res => {
let resData = res.data;
if (resData.errorCode == 1) {
showMsg.showmsg('操作成功', 'success');
that.$emit('submitText');
} else {
errMsg.errorMsg(resData);
}
})
.catch(error => {
that.$message.error({
duration: 1000,
message: error.message
});
});
},
handleCheckAllChange(val) {
if (val) {
let arr = [];
this.options.map(item => {
arr.push(item.wxEnterpriseId);
});
this.form.checkedList = [...arr];
} else {
this.form.checkedList = [];
}
this.isIndeterminate = false;
},
handleCheckedListChange(value) {
this.form.checkedList = value;
let checkedCount = value.length;
this.checkAll = checkedCount === this.options.length;
this.isIndeterminate = checkedCount > 0 && checkedCount < this.options.length;
},
getOptions() {
const data = {
materialId: this.editRow.materialId
};
this.checkAll = false;
this.hasCheckAll = false;
getRequest('/haoban-manage3-web/agent-wx-enterprise-list', data)
.then(res => {
let resData = res.data;
if (resData.errorCode == 1 && resData.result && resData.result.length) {
let arr = [];
let options = resData.result.filter(item => {
if (arr.indexOf(item.wxEnterpriseId) === -1) {
if (item.bindFlag) {
this.form.checkedList.push(item.wxEnterpriseId);
}
arr.push(item.wxEnterpriseId);
return item;
}
});
if (this.form.checkedList.length === options.length) {
this.checkAll = true;
this.hasCheckAll = true;
}
this.options = [...options];
this.handleCheckedListChange(this.form.checkedList);
} else {
errMsg.errorMsg(resData);
}
})
.catch(error => {
this.$message.error({
duration: 1000,
message: error.message
});
});
}
},
watch: {
show(newV, oldV) {
this.dialogVisible = newV;
},
editRow(newData) {
if (Object.keys(newData).length) {
this.getOptions();
}
}
},
mounted() {
if (Object.keys(this.editRow).length) {
this.getOptions();
}
}
};
</script>
<style lang="scss" scoped>
.distribution-enterprise {
>>> .el-dialog {
height: 429px;
}
>>> .el-dialog__header {
padding: 16px 0 10px 20px;
.el-dialog__title {
display: block;
line-height: 25px;
}
}
>>> .el-dialog__body {
padding: 12px 16px 0 17px;
.check-all {
width: 100%;
height: 40px;
box-sizing: border-box;
background: #f5f7fa;
padding-left: 28px;
margin-bottom: 18px;
}
.el-checkbox-group {
height: 248px;
box-sizing: content-box;
overflow: scroll;
padding-left: 28px;
.el-checkbox {
display: flex;
justify-content: flex-start;
align-items: flex-start;
margin: 0 0 20px;
.name {
font-size: 14px;
color: #303133;
line-height: 14px;
margin-bottom: 6px;
}
}
}
}
>>> .el-dialog__footer {
padding-top: 16px;
padding-bottom: 20px;
}
}
.no-enterprise {
height: 248px;
text-align: center;
color: #606266;
}
</style>
<style lang="scss"></style>
...@@ -45,8 +45,11 @@ ...@@ -45,8 +45,11 @@
</el-table-column> </el-table-column>
<el-table-column label="操作"> <el-table-column label="操作">
<template slot-scope="scope"> <template slot-scope="scope">
<template v-if="scope.row.fromMaterialId == '-1'">
<el-button type="text" @click="toEdit(scope.$index, scope.row)">编辑</el-button> <el-button type="text" @click="toEdit(scope.$index, scope.row)">编辑</el-button>
<el-button type="text" @click="toDel(scope.$index, scope.row)">删除</el-button> <el-button type="text" @click="toDel(scope.$index, scope.row)">删除</el-button>
<el-button type="text" @click="toDistribute(scope.$index, scope.row)">分配企业</el-button>
</template>
</template> </template>
</el-table-column> </el-table-column>
</el-table> </el-table>
...@@ -54,9 +57,11 @@ ...@@ -54,9 +57,11 @@
<dm-pagination background @size-change="handleSizeChange" @current-change="handleCurrentChange" :current-page="currentPage" :page-sizes="[20, 40, 60, 80]" :page-size="pageSize" layout="total, sizes, prev, pager, next, jumper" :total="total"> </dm-pagination> <dm-pagination background @size-change="handleSizeChange" @current-change="handleCurrentChange" :current-page="currentPage" :page-sizes="[20, 40, 60, 80]" :page-size="pageSize" layout="total, sizes, prev, pager, next, jumper" :total="total"> </dm-pagination>
</div> </div>
<file-edit v-if="textShow" :editRow="editRow" :categoryId="categoryId" @closeText="closeText" @submitText="submitText"></file-edit> <file-edit v-if="textShow" :editRow="editRow" :categoryId="categoryId" @closeText="closeText" @submitText="submitText"></file-edit>
<distribution-enterprise :editRow="distributionEditRow" :show="showDistribution" @closeText="closeTextDistribution" @submitText="submitTextDistribution"></distribution-enterprise>
</div> </div>
</template> </template>
<script> <script>
import distributionEnterprise from '@/components/set/distribution-enterprise.vue';
import fileEdit from '@/components/set/file-edit.vue'; import fileEdit from '@/components/set/file-edit.vue';
import { postRequest } from '@/api/api'; import { postRequest } from '@/api/api';
// import { _debounce } from '@/common/js/public'; // import { _debounce } from '@/common/js/public';
...@@ -106,7 +111,9 @@ export default { ...@@ -106,7 +111,9 @@ export default {
tableData: [], tableData: [],
multipleSelection: [], multipleSelection: [],
textShow: false, textShow: false,
editRow: {} editRow: {},
showDistribution: false,
distributionEditRow: {}
}; };
}, },
computed: {}, computed: {},
...@@ -128,6 +135,20 @@ export default { ...@@ -128,6 +135,20 @@ export default {
that.editRow = {}; that.editRow = {};
that.$emit('refreshTable'); that.$emit('refreshTable');
}, },
closeTextDistribution() {
this.showDistribution = false;
this.distributionEditRow = {};
},
submitTextDistribution() {
const that = this;
that.showDistribution = false;
that.distributionEditRow = {};
that.$emit('refreshTable');
},
toDistribute(index, row) {
this.showDistribution = true;
this.distributionEditRow = row;
},
/** /**
* 编辑 * 编辑
*/ */
...@@ -248,7 +269,8 @@ export default { ...@@ -248,7 +269,8 @@ export default {
} }
}, },
components: { components: {
fileEdit fileEdit,
distributionEnterprise
} }
}; };
</script> </script>
......
...@@ -45,8 +45,11 @@ ...@@ -45,8 +45,11 @@
</el-table-column> </el-table-column>
<el-table-column label="操作"> <el-table-column label="操作">
<template slot-scope="scope"> <template slot-scope="scope">
<template v-if="scope.row.fromMaterialId == '-1'">
<el-button type="text" @click="toEdit(scope.$index, scope.row)">编辑</el-button> <el-button type="text" @click="toEdit(scope.$index, scope.row)">编辑</el-button>
<el-button type="text" @click="toDel(scope.$index, scope.row)">删除</el-button> <el-button type="text" @click="toDel(scope.$index, scope.row)">删除</el-button>
<el-button type="text" @click="toDistribute(scope.$index, scope.row)">分配企业</el-button>
</template>
</template> </template>
</el-table-column> </el-table-column>
</el-table> </el-table>
...@@ -54,9 +57,11 @@ ...@@ -54,9 +57,11 @@
<dm-pagination background @size-change="handleSizeChange" @current-change="handleCurrentChange" :current-page="currentPage" :page-sizes="[20, 40, 60, 80]" :page-size="pageSize" layout="total, sizes, prev, pager, next, jumper" :total="total"> </dm-pagination> <dm-pagination background @size-change="handleSizeChange" @current-change="handleCurrentChange" :current-page="currentPage" :page-sizes="[20, 40, 60, 80]" :page-size="pageSize" layout="total, sizes, prev, pager, next, jumper" :total="total"> </dm-pagination>
</div> </div>
<image-edit v-if="textShow" :editRow="editRow" :categoryId="categoryId" @closeText="closeText" @submitText="submitText"></image-edit> <image-edit v-if="textShow" :editRow="editRow" :categoryId="categoryId" @closeText="closeText" @submitText="submitText"></image-edit>
<distribution-enterprise :editRow="distributionEditRow" :show="showDistribution" @closeText="closeTextDistribution" @submitText="submitTextDistribution"></distribution-enterprise>
</div> </div>
</template> </template>
<script> <script>
import distributionEnterprise from '@/components/set/distribution-enterprise.vue';
import imageEdit from '@/components/set/image-edit.vue'; import imageEdit from '@/components/set/image-edit.vue';
import { postRequest } from '@/api/api'; import { postRequest } from '@/api/api';
// import { _debounce } from '@/common/js/public'; // import { _debounce } from '@/common/js/public';
...@@ -106,7 +111,9 @@ export default { ...@@ -106,7 +111,9 @@ export default {
tableData: [], tableData: [],
multipleSelection: [], multipleSelection: [],
textShow: false, textShow: false,
editRow: {} editRow: {},
showDistribution: false,
distributionEditRow: {}
}; };
}, },
computed: {}, computed: {},
...@@ -125,6 +132,20 @@ export default { ...@@ -125,6 +132,20 @@ export default {
that.editRow = {}; that.editRow = {};
that.$emit('refreshTable'); that.$emit('refreshTable');
}, },
closeTextDistribution() {
this.showDistribution = false;
this.distributionEditRow = {};
},
submitTextDistribution() {
const that = this;
that.showDistribution = false;
that.distributionEditRow = {};
that.$emit('refreshTable');
},
toDistribute(index, row) {
this.showDistribution = true;
this.distributionEditRow = row;
},
/** /**
* 编辑 * 编辑
*/ */
...@@ -245,7 +266,8 @@ export default { ...@@ -245,7 +266,8 @@ export default {
} }
}, },
components: { components: {
imageEdit imageEdit,
distributionEnterprise
} }
}; };
</script> </script>
......
...@@ -19,8 +19,7 @@ ...@@ -19,8 +19,7 @@
</el-form-item> </el-form-item>
<el-form-item label="内容" prop="materialContent"> <el-form-item label="内容" prop="materialContent">
<div class="material-content"> <div class="material-content">
<!-- <textarea class="material-body" placeholder="请输入内容" id="textpanel" v-model="ruleForm.materialContent"></textarea> --> <el-input show-word-limit placeholder="请输入内容" type="textarea" v-model="ruleForm.materialContent" maxlength="1000" class="w-440 welcomeContent"></el-input>
<limit-textarea class="material-body" :inputWidth="440" :inputValue.sync="ruleForm.materialContent" :holder="'请输入内容'" :getByType="'char'" :maxLength="1000"> </limit-textarea>
<el-popover placement="top" width="388" trigger="click"> <el-popover placement="top" width="388" trigger="click">
<ul class="flex flex-wrap"> <ul class="flex flex-wrap">
<li v-for="(item, index) in emojiList" :key="index + 'emoji'"> <li v-for="(item, index) in emojiList" :key="index + 'emoji'">
...@@ -41,7 +40,6 @@ ...@@ -41,7 +40,6 @@
</template> </template>
<script> <script>
import limitInput from '@/components/limit-input.vue'; import limitInput from '@/components/limit-input.vue';
import limitTextarea from '@/components/limit-textarea.vue';
import { _debounce } from '@/common/js/public'; import { _debounce } from '@/common/js/public';
import { postRequest } from '@/api/api'; import { postRequest } from '@/api/api';
import showMsg from '@/common/js/showmsg'; import showMsg from '@/common/js/showmsg';
...@@ -63,8 +61,7 @@ export default { ...@@ -63,8 +61,7 @@ export default {
} }
}, },
components: { components: {
limitInput, limitInput
limitTextarea
}, },
data() { data() {
return { return {
...@@ -95,7 +92,12 @@ export default { ...@@ -95,7 +92,12 @@ export default {
**/ **/
selectEmoji(item) { selectEmoji(item) {
const that = this; const that = this;
that.ruleForm.materialContent = that.ruleForm.materialContent + item.key; const str = that.ruleForm.materialContent + item.key;
if (str.length > 1000) {
this.$message('添加该表情后文本内容将超过字数限制,无法添加!');
} else {
that.ruleForm.materialContent = str;
}
}, },
toCancel() { toCancel() {
const that = this; const that = this;
...@@ -166,6 +168,9 @@ export default { ...@@ -166,6 +168,9 @@ export default {
.p-l-18 { .p-l-18 {
padding-left: 18px; padding-left: 18px;
} }
.w-440 {
width: 440px;
}
.material-content { .material-content {
position: relative; position: relative;
.material-body { .material-body {
......
...@@ -43,8 +43,11 @@ ...@@ -43,8 +43,11 @@
</el-table-column> </el-table-column>
<el-table-column label="操作"> <el-table-column label="操作">
<template slot-scope="scope"> <template slot-scope="scope">
<template v-if="scope.row.fromMaterialId == '-1'">
<el-button type="text" @click="toEdit(scope.$index, scope.row)">编辑</el-button> <el-button type="text" @click="toEdit(scope.$index, scope.row)">编辑</el-button>
<el-button type="text" @click="toDel(scope.$index, scope.row)">删除</el-button> <el-button type="text" @click="toDel(scope.$index, scope.row)">删除</el-button>
<el-button type="text" @click="toDistribute(scope.$index, scope.row)">分配企业</el-button>
</template>
</template> </template>
</el-table-column> </el-table-column>
</el-table> </el-table>
...@@ -52,9 +55,11 @@ ...@@ -52,9 +55,11 @@
<dm-pagination background @size-change="handleSizeChange" @current-change="handleCurrentChange" :current-page="currentPage" :page-sizes="[20, 40, 60, 80]" :page-size="pageSize" layout="total, sizes, prev, pager, next, jumper" :total="total"> </dm-pagination> <dm-pagination background @size-change="handleSizeChange" @current-change="handleCurrentChange" :current-page="currentPage" :page-sizes="[20, 40, 60, 80]" :page-size="pageSize" layout="total, sizes, prev, pager, next, jumper" :total="total"> </dm-pagination>
</div> </div>
<text-edit v-if="textShow" :editRow="editRow" :categoryId="categoryId" @closeText="closeText" @submitText="submitText"></text-edit> <text-edit v-if="textShow" :editRow="editRow" :categoryId="categoryId" @closeText="closeText" @submitText="submitText"></text-edit>
<distribution-enterprise :editRow="distributionEditRow" :show="showDistribution" @closeText="closeTextDistribution" @submitText="submitTextDistribution"></distribution-enterprise>
</div> </div>
</template> </template>
<script> <script>
import distributionEnterprise from '@/components/set/distribution-enterprise.vue';
import textEdit from '@/components/set/text-edit.vue'; import textEdit from '@/components/set/text-edit.vue';
import { postRequest } from '@/api/api'; import { postRequest } from '@/api/api';
// import { _debounce } from '@/common/js/public'; // import { _debounce } from '@/common/js/public';
...@@ -104,7 +109,9 @@ export default { ...@@ -104,7 +109,9 @@ export default {
tableData: [], tableData: [],
multipleSelection: [], multipleSelection: [],
textShow: false, textShow: false,
editRow: {} editRow: {},
showDistribution: false,
distributionEditRow: {}
}; };
}, },
computed: {}, computed: {},
...@@ -123,6 +130,23 @@ export default { ...@@ -123,6 +130,23 @@ export default {
that.editRow = {}; that.editRow = {};
that.$emit('refreshTable'); that.$emit('refreshTable');
}, },
closeTextDistribution() {
this.showDistribution = false;
this.distributionEditRow = {};
},
submitTextDistribution() {
const that = this;
that.showDistribution = false;
that.distributionEditRow = {};
that.$emit('refreshTable');
},
/**
* 编辑
*/
toDistribute(index, row) {
this.showDistribution = true;
this.distributionEditRow = row;
},
/** /**
* 编辑 * 编辑
*/ */
...@@ -243,7 +267,8 @@ export default { ...@@ -243,7 +267,8 @@ export default {
} }
}, },
components: { components: {
textEdit textEdit,
distributionEnterprise
} }
}; };
</script> </script>
...@@ -262,9 +287,6 @@ export default { ...@@ -262,9 +287,6 @@ export default {
vertical-align: middle; vertical-align: middle;
line-height: 32px; line-height: 32px;
} }
.table-condition {
// min-width: 1200px;
}
.daily-set-wrap { .daily-set-wrap {
height: 100%; height: 100%;
.daily-set-content { .daily-set-content {
......
...@@ -47,8 +47,11 @@ ...@@ -47,8 +47,11 @@
</el-table-column> </el-table-column>
<el-table-column label="操作"> <el-table-column label="操作">
<template slot-scope="scope"> <template slot-scope="scope">
<template v-if="scope.row.fromMaterialId == '-1'">
<el-button type="text" @click="toEdit(scope.$index, scope.row)">编辑</el-button> <el-button type="text" @click="toEdit(scope.$index, scope.row)">编辑</el-button>
<el-button type="text" @click="toDel(scope.$index, scope.row)">删除</el-button> <el-button type="text" @click="toDel(scope.$index, scope.row)">删除</el-button>
<el-button type="text" @click="toDistribute(scope.$index, scope.row)">分配企业</el-button>
</template>
</template> </template>
</el-table-column> </el-table-column>
</el-table> </el-table>
...@@ -56,9 +59,11 @@ ...@@ -56,9 +59,11 @@
<dm-pagination background @size-change="handleSizeChange" @current-change="handleCurrentChange" :current-page="currentPage" :page-sizes="[20, 40, 60, 80]" :page-size="pageSize" layout="total, sizes, prev, pager, next, jumper" :total="total"> </dm-pagination> <dm-pagination background @size-change="handleSizeChange" @current-change="handleCurrentChange" :current-page="currentPage" :page-sizes="[20, 40, 60, 80]" :page-size="pageSize" layout="total, sizes, prev, pager, next, jumper" :total="total"> </dm-pagination>
</div> </div>
<video-edit v-if="textShow" :editRow="editRow" :categoryId="categoryId" @closeText="closeText" @submitText="submitText"></video-edit> <video-edit v-if="textShow" :editRow="editRow" :categoryId="categoryId" @closeText="closeText" @submitText="submitText"></video-edit>
<distribution-enterprise :editRow="distributionEditRow" :show="showDistribution" @closeText="closeTextDistribution" @submitText="submitTextDistribution"></distribution-enterprise>
</div> </div>
</template> </template>
<script> <script>
import distributionEnterprise from '@/components/set/distribution-enterprise.vue';
import videoEdit from '@/components/set/video-edit.vue'; import videoEdit from '@/components/set/video-edit.vue';
import { postRequest } from '@/api/api'; import { postRequest } from '@/api/api';
// import { _debounce } from '@/common/js/public'; // import { _debounce } from '@/common/js/public';
...@@ -108,7 +113,9 @@ export default { ...@@ -108,7 +113,9 @@ export default {
tableData: [], tableData: [],
multipleSelection: [], multipleSelection: [],
textShow: false, textShow: false,
editRow: {} editRow: {},
showDistribution: false,
distributionEditRow: {}
}; };
}, },
computed: {}, computed: {},
...@@ -130,6 +137,20 @@ export default { ...@@ -130,6 +137,20 @@ export default {
that.editRow = {}; that.editRow = {};
that.$emit('refreshTable'); that.$emit('refreshTable');
}, },
closeTextDistribution() {
this.showDistribution = false;
this.distributionEditRow = {};
},
submitTextDistribution() {
const that = this;
that.showDistribution = false;
that.distributionEditRow = {};
that.$emit('refreshTable');
},
toDistribute(index, row) {
this.showDistribution = true;
this.distributionEditRow = row;
},
/** /**
* 编辑 * 编辑
*/ */
...@@ -250,7 +271,8 @@ export default { ...@@ -250,7 +271,8 @@ export default {
} }
}, },
components: { components: {
videoEdit videoEdit,
distributionEnterprise
} }
}; };
</script> </script>
......
...@@ -48,8 +48,11 @@ ...@@ -48,8 +48,11 @@
</el-table-column> </el-table-column>
<el-table-column label="操作"> <el-table-column label="操作">
<template slot-scope="scope"> <template slot-scope="scope">
<template v-if="scope.row.fromMaterialId == '-1'">
<el-button type="text" @click="toEdit(scope.$index, scope.row)">编辑</el-button> <el-button type="text" @click="toEdit(scope.$index, scope.row)">编辑</el-button>
<el-button type="text" @click="toDel(scope.$index, scope.row)">删除</el-button> <el-button type="text" @click="toDel(scope.$index, scope.row)">删除</el-button>
<el-button type="text" @click="toDistribute(scope.$index, scope.row)">分配企业</el-button>
</template>
</template> </template>
</el-table-column> </el-table-column>
</el-table> </el-table>
...@@ -57,9 +60,11 @@ ...@@ -57,9 +60,11 @@
<dm-pagination background @size-change="handleSizeChange" @current-change="handleCurrentChange" :current-page="currentPage" :page-sizes="[20, 40, 60, 80]" :page-size="pageSize" layout="total, sizes, prev, pager, next, jumper" :total="total"> </dm-pagination> <dm-pagination background @size-change="handleSizeChange" @current-change="handleCurrentChange" :current-page="currentPage" :page-sizes="[20, 40, 60, 80]" :page-size="pageSize" layout="total, sizes, prev, pager, next, jumper" :total="total"> </dm-pagination>
</div> </div>
<web-edit v-if="textShow" :editRow="editRow" :categoryId="categoryId" @closeText="closeText" @submitText="submitText"></web-edit> <web-edit v-if="textShow" :editRow="editRow" :categoryId="categoryId" @closeText="closeText" @submitText="submitText"></web-edit>
<distribution-enterprise :editRow="distributionEditRow" :show="showDistribution" @closeText="closeTextDistribution" @submitText="submitTextDistribution"></distribution-enterprise>
</div> </div>
</template> </template>
<script> <script>
import distributionEnterprise from '@/components/set/distribution-enterprise.vue';
import webEdit from '@/components/set/web-edit.vue'; import webEdit from '@/components/set/web-edit.vue';
import { postRequest } from '@/api/api'; import { postRequest } from '@/api/api';
// import { _debounce } from '@/common/js/public'; // import { _debounce } from '@/common/js/public';
...@@ -109,7 +114,9 @@ export default { ...@@ -109,7 +114,9 @@ export default {
tableData: [], tableData: [],
multipleSelection: [], multipleSelection: [],
textShow: false, textShow: false,
editRow: {} editRow: {},
showDistribution: false,
distributionEditRow: {}
}; };
}, },
computed: {}, computed: {},
...@@ -128,6 +135,20 @@ export default { ...@@ -128,6 +135,20 @@ export default {
that.editRow = {}; that.editRow = {};
that.$emit('refreshTable'); that.$emit('refreshTable');
}, },
closeTextDistribution() {
this.showDistribution = false;
this.distributionEditRow = {};
},
submitTextDistribution() {
const that = this;
that.showDistribution = false;
that.distributionEditRow = {};
that.$emit('refreshTable');
},
toDistribute(index, row) {
this.showDistribution = true;
this.distributionEditRow = row;
},
/** /**
* 编辑 * 编辑
*/ */
...@@ -248,7 +269,8 @@ export default { ...@@ -248,7 +269,8 @@ export default {
} }
}, },
components: { components: {
webEdit webEdit,
distributionEnterprise
} }
}; };
</script> </script>
......
...@@ -98,7 +98,7 @@ export default { ...@@ -98,7 +98,7 @@ export default {
let host = window.location.origin; let host = window.location.origin;
let baseUrl; let baseUrl;
if (host.indexOf('localhost') != '-1') { if (host.indexOf('localhost') != '-1') {
baseUrl = 'http://www.gicdev.com'; baseUrl = 'https://www.gicdev.com';
} else { } else {
baseUrl = host; baseUrl = host;
} }
...@@ -125,7 +125,7 @@ export default { ...@@ -125,7 +125,7 @@ export default {
/* eslint-disable */ /* eslint-disable */
beforeAvatarUpload(file) { beforeAvatarUpload(file) {
const that = this; const that = this;
console.log(file); // console.log(file);
that.fileType = file.type === 'image/jpeg' ? 'jpeg' : file.type === 'image/jpg' ? 'jpg' : file.type === 'image/png' ? 'png' : file.type == 'video/mp4' ? 'mp4' : ''; that.fileType = file.type === 'image/jpeg' ? 'jpeg' : file.type === 'image/jpg' ? 'jpg' : file.type === 'image/png' ? 'png' : file.type == 'video/mp4' ? 'mp4' : '';
const isJPG = file.type === 'image/jpeg' || file.type === 'image/jpg' || file.type === 'image/png'; const isJPG = file.type === 'image/jpeg' || file.type === 'image/jpg' || file.type === 'image/png';
const isMP4 = file.type == 'video/mp4'; const isMP4 = file.type == 'video/mp4';
......
...@@ -21,10 +21,14 @@ import * as types from './store/types'; ...@@ -21,10 +21,14 @@ import * as types from './store/types';
import '../static/css/index.less'; import '../static/css/index.less';
import 'element-ui/lib/theme-chalk/index.css'; import 'element-ui/lib/theme-chalk/index.css';
import '../static/font/iconfont.css'; import '../static/font/iconfont.css';
import '../static/font//iconfont.js'
import '../theme/index.css'; import '../theme/index.css';
import '../static/css/dialog.css'; import '../static/css/dialog.css';
import filters from './filters/index.js'; import filters from './filters/index.js';
import SvgIcon from "./components/common/svg-icon"
Vue.component("svg-icon", SvgIcon)
import vueOfficeHeader from '@gic-test/vue-office-header'; import vueOfficeHeader from '@gic-test/vue-office-header';
import vueOfficeAside from '@gic-test/vue-office-aside'; import vueOfficeAside from '@gic-test/vue-office-aside';
import vueOfficeArea from '@gic-test/vue-office-area'; import vueOfficeArea from '@gic-test/vue-office-area';
......
...@@ -37,8 +37,7 @@ if (window.sessionStorage.getItem('token')) { ...@@ -37,8 +37,7 @@ if (window.sessionStorage.getItem('token')) {
/* eslint-disable */ /* eslint-disable */
store.commit(types.LOGIN, window.sessionStorage.getItem('token')); store.commit(types.LOGIN, window.sessionStorage.getItem('token'));
} }
export const constantRouterMap = [ export const constantRouterMap = [{
{
path: '/', path: '/',
name: '/', name: '/',
redirect: 'login' redirect: 'login'
...@@ -49,6 +48,11 @@ export const constantRouterMap = [ ...@@ -49,6 +48,11 @@ export const constantRouterMap = [
component: _import('login', 'index') component: _import('login', 'index')
}, },
{ {
path: '/loginMore',
name: '登录',
component: _import('login', 'login-more')
},
{
path: '/index', path: '/index',
name: 'index', name: 'index',
component: _import('index', 'index') component: _import('index', 'index')
...@@ -60,8 +64,7 @@ export const constantRouterMap = [ ...@@ -60,8 +64,7 @@ export const constantRouterMap = [
name: '通讯录', name: '通讯录',
redirect: 'contactsList', redirect: 'contactsList',
component: _import('business', 'index'), component: _import('business', 'index'),
children: [ children: [{
{
path: '/contactsList', path: '/contactsList',
name: '通讯录', name: '通讯录',
component: _import('business', 'contacts') component: _import('business', 'contacts')
...@@ -85,6 +88,16 @@ export const constantRouterMap = [ ...@@ -85,6 +88,16 @@ export const constantRouterMap = [
path: '/authMerchant', path: '/authMerchant',
name: '授权商户', name: '授权商户',
component: _import('business', 'authMerchant') component: _import('business', 'authMerchant')
},
{
path: '/authMerchantForm',
name: '新建授权商户',
component: _import('business', 'authMerchant-form')
},
{
path: '/merchantStoreList',
name: '绑定门店列表',
component: _import('business', 'storeList')
} }
] ]
}, },
...@@ -95,8 +108,7 @@ export const constantRouterMap = [ ...@@ -95,8 +108,7 @@ export const constantRouterMap = [
name: '企业设置', name: '企业设置',
redirect: 'enterpriseSet', redirect: 'enterpriseSet',
component: _import('enterprise', 'index'), component: _import('enterprise', 'index'),
children: [ children: [{
{
path: '/enterpriseSet', path: '/enterpriseSet',
name: '企业信息', name: '企业信息',
component: _import('enterprise', 'enterpriseSet') component: _import('enterprise', 'enterpriseSet')
...@@ -110,17 +122,54 @@ export const constantRouterMap = [ ...@@ -110,17 +122,54 @@ export const constantRouterMap = [
path: '/material', path: '/material',
name: '素材库', name: '素材库',
component: _import('enterprise', 'material') component: _import('enterprise', 'material')
},
{
path: '/salutatory',
name: '欢迎语',
component: _import('enterprise', 'salutatory')
},
{
path: '/salutatorySet',
name: '欢迎语',
component: _import('enterprise', 'salutatorySet')
} }
] ]
}, },
// 销售线索
// {
// path: '/salesleads',
// name: '销售线索',
// redirect: 'storeList',
// component: _import('salesleads', 'index'),
// children: [{
// path: '/storeList',
// name: '门店视图',
// component: _import('salesleads', 'storeList'),
// },
// {
// path: '/storeDetail/:id',
// name: '门店视图',
// component: _import('salesleads', 'storeDetail')
// },
// {
// path: '/salesTaskList',
// name: '计划视图',
// component: _import('salesleads', 'taskList'),
// },
// {
// path: '/salesleadsSet',
// name: '销售线索设置',
// component: _import('salesleads', 'salesleadsSet')
// }
// ]
// },
{ {
// 企业数据 // 企业数据
path: '/enterpriseData', path: '/enterpriseData',
name: '企业数据', name: '企业数据',
redirect: 'enterpriseUseData', redirect: 'enterpriseUseData',
component: _import('enterpriseData', 'index'), component: _import('enterpriseData', 'index'),
children: [ children: [{
{
path: '/enterpriseUseData', path: '/enterpriseUseData',
name: '好办使用详情', name: '好办使用详情',
component: _import('enterpriseData', 'enterpriseUseData') component: _import('enterpriseData', 'enterpriseUseData')
...@@ -149,13 +198,11 @@ export const constantRouterMap = [ ...@@ -149,13 +198,11 @@ export const constantRouterMap = [
name: '溢出门店', name: '溢出门店',
redirect: 'unreview', redirect: 'unreview',
component: _import('overstore', 'index'), component: _import('overstore', 'index'),
children: [ children: [{
{
path: '/overStoreList', path: '/overStoreList',
name: '溢出门店', name: '溢出门店',
component: _import('overstore', 'overStoreList') component: _import('overstore', 'overStoreList')
} }]
]
}, },
{ {
...@@ -176,8 +223,7 @@ export const constantRouterMap = [ ...@@ -176,8 +223,7 @@ export const constantRouterMap = [
name: '我的顾客的', name: '我的顾客的',
redirect: '/memberShowSet', redirect: '/memberShowSet',
component: _import('apps/customerApp', 'index'), component: _import('apps/customerApp', 'index'),
children: [ children: [{
{
path: '/memberShowSet', path: '/memberShowSet',
name: '会员展示设置', name: '会员展示设置',
component: _import('apps/customerApp', 'memberShowSet') component: _import('apps/customerApp', 'memberShowSet')
...@@ -219,8 +265,7 @@ export const constantRouterMap = [ ...@@ -219,8 +265,7 @@ export const constantRouterMap = [
name: '云日报', name: '云日报',
redirect: '/dailyRecord', redirect: '/dailyRecord',
component: _import('apps/cloudDaily', 'index'), component: _import('apps/cloudDaily', 'index'),
children: [ children: [{
{
path: '/dailyRecord', path: '/dailyRecord',
name: '云日报记录', name: '云日报记录',
component: _import('apps/cloudDaily', 'dailyRecord') component: _import('apps/cloudDaily', 'dailyRecord')
...@@ -262,8 +307,7 @@ export const constantRouterMap = [ ...@@ -262,8 +307,7 @@ export const constantRouterMap = [
name: '话务任务', name: '话务任务',
redirect: '/taskRecord', redirect: '/taskRecord',
component: _import('apps/trafficTask', 'index'), component: _import('apps/trafficTask', 'index'),
children: [ children: [{
{
path: '/taskRecord', path: '/taskRecord',
name: '话务任务记录', name: '话务任务记录',
component: _import('apps/trafficTask', 'taskRecord') component: _import('apps/trafficTask', 'taskRecord')
...@@ -315,8 +359,7 @@ export const constantRouterMap = [ ...@@ -315,8 +359,7 @@ export const constantRouterMap = [
name: '指标管理', name: '指标管理',
redirect: '/monthList', redirect: '/monthList',
component: _import('apps/quota', 'index'), component: _import('apps/quota', 'index'),
children: [ children: [{
{
path: '/monthList', path: '/monthList',
name: '月指标列表', name: '月指标列表',
component: _import('apps/quota', 'monthList') component: _import('apps/quota', 'monthList')
...@@ -359,8 +402,7 @@ export const constantRouterMap = [ ...@@ -359,8 +402,7 @@ export const constantRouterMap = [
name: '卡券赠送', name: '卡券赠送',
redirect: '/cardList', redirect: '/cardList',
component: _import('apps/card', 'index'), component: _import('apps/card', 'index'),
children: [ children: [{
{
path: '/cardList', path: '/cardList',
name: '卡券列表', name: '卡券列表',
component: _import('apps/card', 'cardList') component: _import('apps/card', 'cardList')
...@@ -382,8 +424,7 @@ export const constantRouterMap = [ ...@@ -382,8 +424,7 @@ export const constantRouterMap = [
name: '内购券', name: '内购券',
redirect: '/cardTemplate', redirect: '/cardTemplate',
component: _import('apps/protectCard', 'index'), component: _import('apps/protectCard', 'index'),
children: [ children: [{
{
path: '/cardTemplate', path: '/cardTemplate',
name: '卡券模板', name: '卡券模板',
component: _import('apps/protectCard', 'cardTemplate') component: _import('apps/protectCard', 'cardTemplate')
...@@ -431,13 +472,11 @@ export const constantRouterMap = [ ...@@ -431,13 +472,11 @@ export const constantRouterMap = [
name: '商品中心', name: '商品中心',
redirect: '/goodsShowSet', redirect: '/goodsShowSet',
component: _import('apps/shoppingCenter', 'index'), component: _import('apps/shoppingCenter', 'index'),
children: [ children: [{
{
path: '/goodsShowSet', path: '/goodsShowSet',
name: '商品展示设置', name: '商品展示设置',
component: _import('apps/shoppingCenter', 'goodsShowSet') component: _import('apps/shoppingCenter', 'goodsShowSet')
} }]
]
}, },
// 订单评价 // 订单评价
{ {
...@@ -445,13 +484,11 @@ export const constantRouterMap = [ ...@@ -445,13 +484,11 @@ export const constantRouterMap = [
name: '订单评价设置', name: '订单评价设置',
redirect: '/evaluate-set', redirect: '/evaluate-set',
component: _import('apps/order-evaluate', 'index'), component: _import('apps/order-evaluate', 'index'),
children: [ children: [{
{
path: '/evaluate-set', path: '/evaluate-set',
name: '订单评价', name: '订单评价',
component: _import('apps/order-evaluate', 'evaluate-set') component: _import('apps/order-evaluate', 'evaluate-set')
} }]
]
} }
] ]
}, },
...@@ -461,8 +498,7 @@ export const constantRouterMap = [ ...@@ -461,8 +498,7 @@ export const constantRouterMap = [
name: '审核中心', name: '审核中心',
redirect: 'unreview', redirect: 'unreview',
component: _import('reviewCenter', 'index'), component: _import('reviewCenter', 'index'),
children: [ children: [{
{
path: '/reviewed', path: '/reviewed',
name: '已审核', name: '已审核',
component: _import('reviewCenter', 'reviewed') component: _import('reviewCenter', 'reviewed')
......
...@@ -314,7 +314,7 @@ export function scrollTo(element, to, duration) { ...@@ -314,7 +314,7 @@ export function scrollTo(element, to, duration) {
const difference = to - element.scrollTop; const difference = to - element.scrollTop;
const perTick = (difference / duration) * 10; const perTick = (difference / duration) * 10;
setTimeout(() => { setTimeout(() => {
console.log(new Date()); // console.log(new Date());
element.scrollTop = element.scrollTop + perTick; element.scrollTop = element.scrollTop + perTick;
if (element.scrollTop === to) return; if (element.scrollTop === to) return;
scrollTo(element, to, duration - 10); scrollTo(element, to, duration - 10);
......
...@@ -93,14 +93,14 @@ function s2ab(s) { ...@@ -93,14 +93,14 @@ function s2ab(s) {
export function export_table_to_excel(id) { export function export_table_to_excel(id) {
var theTable = document.getElementById(id); var theTable = document.getElementById(id);
console.log('a') // console.log('a')
var oo = generateArray(theTable); var oo = generateArray(theTable);
var ranges = oo[1]; var ranges = oo[1];
/* original data */ /* original data */
var data = oo[0]; var data = oo[0];
var ws_name = "SheetJS"; var ws_name = "SheetJS";
console.log(data); // console.log(data);
var wb = new Workbook(), ws = sheet_from_array_of_arrays(data); var wb = new Workbook(), ws = sheet_from_array_of_arrays(data);
...@@ -118,7 +118,7 @@ export function export_table_to_excel(id) { ...@@ -118,7 +118,7 @@ export function export_table_to_excel(id) {
} }
function formatJson(jsonData) { function formatJson(jsonData) {
console.log(jsonData) // console.log(jsonData)
} }
export function export_json_to_excel(th, jsonData, defaultTitle) { export function export_json_to_excel(th, jsonData, defaultTitle) {
......
...@@ -99,8 +99,8 @@ ...@@ -99,8 +99,8 @@
</el-table-column> </el-table-column>
<el-table-column label="操作"> <el-table-column label="操作">
<template slot-scope="scope"> <template slot-scope="scope">
<el-button type="text" size="small" @click="handleDel(scope.$index, scope.row)">删除</el-button> <el-button type="text" @click="handleDel(scope.$index, scope.row)">删除</el-button>
<el-button type="text" size="small" @click="handlePreview(scope.$index, scope.row)">预览</el-button> <el-button type="text" @click="handlePreview(scope.$index, scope.row)">预览</el-button>
</template> </template>
</el-table-column> </el-table-column>
</el-table> </el-table>
......
...@@ -74,7 +74,7 @@ ...@@ -74,7 +74,7 @@
</el-table-column> </el-table-column>
<el-table-column label="操作"> <el-table-column label="操作">
<template slot-scope="scope"> <template slot-scope="scope">
<el-button type="text" size="small" @click="toDetail(scope.$index, scope.row)">查看详情</el-button> <el-button type="text" @click="toDetail(scope.$index, scope.row)">查看详情</el-button>
</template> </template>
</el-table-column> </el-table-column>
</el-table> </el-table>
......
...@@ -68,7 +68,7 @@ ...@@ -68,7 +68,7 @@
</el-tooltip> </el-tooltip>
</template> </template>
<template slot-scope="scope"> <template slot-scope="scope">
<el-button type="text" size="small" @click="toEditGroup(scope.$index, scope.row)">编辑分组可见范围</el-button> <el-button type="text" @click="toEditGroup(scope.$index, scope.row)">编辑分组可见范围</el-button>
</template> </template>
</el-table-column> --> </el-table-column> -->
</el-table> </el-table>
......
...@@ -14,6 +14,10 @@ ...@@ -14,6 +14,10 @@
<i class="el-alert__icon el-icon-info"></i> <i class="el-alert__icon el-icon-info"></i>
<div class="el-alert__content"> <div class="el-alert__content">
<span class="el-alert__title"> <span class="el-alert__title">
<!-- 话务任务应用下线通知:<br />
1.【话务任务】预计将于5月下旬下线,功能将由【销售线索】替代;<br />
2.【话务任务】下线后,【GIC后台-智能营销】中的“话务”事件也将下线,后续如需针对门店终端下发任务,请通过【GIC后台-智能营销】中的“企微任务”事件下发;<br />
3.【话务任务】下线后,该应用中原本的“会话任务”也会下线,“不良评价回访”任务将转移至其他应用,请知悉<br /> -->
1.预计2021年1月功能更新后将仅保留近一年数据,历史数据将清除。如需保存超过一年历史数据,请于1月前导出保存;<br /> 1.预计2021年1月功能更新后将仅保留近一年数据,历史数据将清除。如需保存超过一年历史数据,请于1月前导出保存;<br />
2.因任务数据量过大,门店视图统计数据改为每日刷新一次;<br /> 2.因任务数据量过大,门店视图统计数据改为每日刷新一次;<br />
3.需要注意:话务完成详情是实时展示;完成数据统计是每日刷新,可能出现任务详情显示已完成,但是已完成数量并没有+1。这属于统计的正常情况。 3.需要注意:话务完成详情是实时展示;完成数据统计是每日刷新,可能出现任务详情显示已完成,但是已完成数量并没有+1。这属于统计的正常情况。
...@@ -48,8 +52,8 @@ ...@@ -48,8 +52,8 @@
<template slot-scope="scope"> </template> <template slot-scope="scope"> </template>
</el-table-column> </el-table-column>
<el-table-column label="门店名称" width="120" show-overflow-tooltip> <el-table-column label="门店名称" width="120" show-overflow-tooltip>
<template slot-scope="scope" <template slot-scope="scope">
><div style="width: 100%; overflow:hidden;text-overflow: ellipsis;">{{ scope.row.storeName }}</div> <div style="width: 100%; overflow:hidden;text-overflow: ellipsis;">{{ scope.row.storeName }}</div>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column prop="" label="任务总数"> <el-table-column prop="" label="任务总数">
......
...@@ -11,7 +11,10 @@ ...@@ -11,7 +11,10 @@
<div class="task-set-content boder-box"> <div class="task-set-content boder-box">
<div class="task-set-cell"> <div class="task-set-cell">
<div class="set-line-item"> <div class="set-line-item">
<span class="set-line-item_title font-14 color-606266 text-right">话务任务拨打:</span><el-select v-model="setObj.taskCallType" placeholder="请选择" class="w-240" @change="changeSelect"> <el-option v-for="item in options" :key="item.value" :label="item.label" :value="item.value"> </el-option> </el-select><span v-if="setObj.taskCallType == 2" class="font-14 color-909399 p-l-10 set-long-tip">第三方双向呼叫及透传(透传功能暂无法使用,外呼显示号码为固定电话),可监控通话状态。呼叫结算及通话记录存储于GIC计费中心。</span> <el-tooltip class="item" effect="dark" content="代理商户默认关闭双向呼叫功能,如需开通请联系达摩运营或实施进行开通" placement="top-start" :open-delay="200">
<span class="set-line-item_title text-right"> <i style="cursor: pointer;font-style: normal;padding-bottom: 2px; border-bottom: 1px dashed rgb(47, 84, 235);" class="font-14 color-606266">话务任务拨打</i></span>
</el-tooltip>
<el-select v-model="setObj.taskCallType" placeholder="请选择" class="w-240" @change="changeSelect"> <el-option v-for="item in options" :key="item.value" :label="item.label" :value="item.value"> </el-option> </el-select><span v-if="setObj.taskCallType == 2" class="font-14 color-909399 p-l-10 set-long-tip">第三方双向呼叫及透传(透传功能暂无法使用,外呼显示号码为固定电话),可监控通话状态。呼叫结算及通话记录存储于GIC计费中心。</span>
<span v-if="setObj.taskCallType == 1" class="font-14 color-909399 p-l-10">导购手机呼叫,无法监控通话状态。呼叫结算费用由导购手机自费。</span> <span v-if="setObj.taskCallType == 1" class="font-14 color-909399 p-l-10">导购手机呼叫,无法监控通话状态。呼叫结算费用由导购手机自费。</span>
</div> </div>
<!-- <div class="set-line-item"> <!-- <div class="set-line-item">
...@@ -25,7 +28,9 @@ ...@@ -25,7 +28,9 @@
<table class="font-14"> <table class="font-14">
<tbody> <tbody>
<tr class="el-table__row"> <tr class="el-table__row">
<td rowspan="1" colspan="1" class="el-table_3_column_7 "><div class="font-14 color-303133">微信会员</div></td> <td rowspan="1" colspan="1" class="el-table_3_column_7 ">
<div class="font-14 color-303133">微信会员</div>
</td>
<td rowspan="1" colspan="1" class="el-table_3_column_8 "> <td rowspan="1" colspan="1" class="el-table_3_column_8 ">
<div class="cell"> <div class="cell">
<el-radio v-model="setObj.distributeTypeJudge" :label="0">分配给主门店店长</el-radio> <el-radio v-model="setObj.distributeTypeJudge" :label="0">分配给主门店店长</el-radio>
...@@ -34,7 +39,9 @@ ...@@ -34,7 +39,9 @@
</td> </td>
</tr> </tr>
<tr class="el-table__row"> <tr class="el-table__row">
<td rowspan="1" colspan="1" class="el-table_3_column_7 "><div class="font-14 color-303133">POS会员</div></td> <td rowspan="1" colspan="1" class="el-table_3_column_7 ">
<div class="font-14 color-303133">POS会员</div>
</td>
<td rowspan="1" colspan="1" class="el-table_3_column_8 "> <td rowspan="1" colspan="1" class="el-table_3_column_8 ">
<div class="cell"> <div class="cell">
<el-radio v-model="setObj.posDistributeJudge" :label="0">分配给主门店店长</el-radio> <el-radio v-model="setObj.posDistributeJudge" :label="0">分配给主门店店长</el-radio>
...@@ -62,7 +69,7 @@ ...@@ -62,7 +69,7 @@
<el-radio v-model="setObj.posDistributeJudge" :label="1">分配给专属导购</el-radio> <el-radio v-model="setObj.posDistributeJudge" :label="1">分配给专属导购</el-radio>
</div> --> </div> -->
<div v-if="setObj.taskCallType == 2" class="set-line-item"> <div v-if="setObj.taskCallType == 2" class="set-line-item">
<span class="set-line-item_title font-14 color-606266 text-right">话务任务条件:</span><span class="font-14 color-606266">话务任务下发后 </span><el-input-number controls-position="right" class="w-100" v-model="setObj.giveUpJudge" placeholder="请输入内容" :step="1" :step-strictly="true" :min="0" :max="99999999"></el-input-number><span class="font-14 color-606266 p-l-10"></span> <span class="set-line-item_title font-14 color-606266 text-right">话务任务条件:</span><span class="font-14 color-606266">话务任务下发后 </span> <el-input-number controls-position="right" class="w-100" v-model="setObj.giveUpJudge" placeholder="请输入内容" :step="1" :step-strictly="true" :min="0" :max="99999999"></el-input-number><span class="font-14 color-606266 p-l-10"></span>
<span class="font-14 color-606266">呼叫后无响应,导购可放弃该条话务任务</span> <span class="font-14 color-606266">呼叫后无响应,导购可放弃该条话务任务</span>
</div> </div>
<!-- <div class="set-line-item"> <!-- <div class="set-line-item">
......
<template>
<el-dialog width="600px" title="授权校验" class="authMerchant-dailog" :visible.sync="memberVisible" append-to-body :before-close="handleClose">
<div>
<div role="alert" class="el-alert el-alert--info flex w-327 bg-F0F5FF">
<i class="el-alert__icon el-icon-warning font-12 color-2f54eb m-r-9"></i>
<span class="el-alert__title color-303133 font-13">授权商户需要校验GIC商户超级管理员手机号 </span>
</div>
<el-form :model="partForm" :rules="rules" ref="form" label-width="140px" class="dialog-form">
<el-form-item label="超级管理员">
{{ partForm.clerkName | formatName }}
</el-form-item>
<el-form-item label="超级管理员手机号" prop=""
><span v-if="partForm.phoneNumber">{{ partForm.nationCode }}-</span>{{ partForm.phoneNumber | formatPhoneNum }} <el-button class="m-l-35" :disabled="!partForm.phoneNumber" type="text" @click="sendCode()">{{ (disableBtn && countNum == 60) || (!disableBtn && !!countNum) ? '点击短信验证' : countNum + 's' }}</el-button>
</el-form-item>
<el-form-item label="短信验证码" prop="code">
<el-input style="width: 180px;line-height:40px;" maxlength="20" v-model="partForm.code" placeholder="请输入验证码"></el-input>
</el-form-item>
</el-form>
</div>
<div slot="footer" class="dialog-footer">
<el-button @click="cancel('form')">取消</el-button>
<el-button type="primary" @click="submitForm('form')">确定</el-button>
</div>
</el-dialog>
</template>
<script>
import { getRequest } from '@/api/api';
import errMsg from '@/common/js/error';
import showMsg from '@/common/js/showmsg';
import { _debounce } from '@/common/js/public';
// import PhoneNumber from 'awesome-phonenumber';
export default {
name: 'authMerchant-dailog',
components: {},
props: {
item: {
type: Object,
default() {
return { version: '3.0', clerkName: '', enterpriseId: '', enterpriseName: '', nationCode: '86', phoneNumber: '', code: '' };
}
}
},
data() {
return {
wxEnterpriseId: JSON.parse(localStorage.getItem('userInfos')).wxEnterpriseId,
memberVisible: true,
partForm: {},
rules: {
code: [
{
required: true,
message: '请输入验证码',
trigger: 'blur'
}
]
},
disableBtn: true, // 发验证码.默认无手机号,不可点击
countNum: 60
};
},
methods: {
/**
* 倒计时
*/
countDown() {
const that = this;
let time = setInterval(function() {
if (that.countNum === 0) {
clearInterval(time);
that.countNum = 60;
that.disableBtn = false;
return false;
}
that.countNum--;
}, 1000);
},
/**
* 发送验证码
*/
sendCode: _debounce(function() {
const that = this;
if (that.partForm.phoneNumber == '' || isNaN(String(that.partForm.phoneNumber))) {
showMsg.showmsg(`超级管理员手机号不正确,请到 GIC 商户后台修改`, 'warning');
return false;
}
/* if (that.partForm.nationCode == '' || isNaN(String(that.partForm.nationCode))) {
showMsg.showmsg(`国家码不存在`, 'warning');
return false;
} */
let params = {
phoneNumber: that.partForm.phoneNumber,
nationCode: that.partForm.nationCode || '86',
type: 1
// isTest: 1 // 测试时使用
};
getRequest('/haoban-manage3-web/send-code', params)
.then(res => {
let resData = res.data;
if (resData.errorCode == 1) {
that.disableBtn = true;
that.countDown();
const phone = String(that.partForm.phoneNumber);
let handle = phone.substr(0, 3) + '****' + phone.substr(7, phone.length - 1);
showMsg.showmsg(`已发送验证码到${that.partForm.nationCode || '86'}-${handle}`, 'success');
return false;
}
errMsg.errorMsg(resData);
})
.catch(function(error) {
that.$message.error({
duration: 1000,
message: error.message
});
});
}, 300),
/**
* 校验验证码
*/
checkCode() {
const that = this;
let params = {
phoneNumber: that.partForm.phoneNumber,
nationCode: that.partForm.nationCode,
type: 1,
code: that.partForm.code
};
return new Promise((resolve, reject) => {
getRequest('/haoban-manage3-web/validate-code', params)
.then(res => {
let resData = res.data;
if (resData.errorCode == 1) {
resolve(true);
return false;
}
errMsg.errorMsg(resData);
resolve(false);
})
.catch(function(error) {
resolve(false);
that.$message.error({
duration: 1000,
message: error.message
});
});
});
},
/**
* 关闭弹窗
*/
handleClose(done) {
const that = this;
that.$refs['form'].resetFields();
that.$emit('refreshData', 'close');
done();
},
cancel() {
const that = this;
that.$refs['form'].resetFields();
that.$emit('refreshData', 'close');
},
/**
* 确定保存
*/
async submitForm(form) {
const that = this;
if (!that.partForm.enterpriseId) {
return false;
}
that.$refs[form].validate(async valid => {
if (valid) {
const flag = await that.checkCode();
if (!flag) {
return false;
}
that.$emit('refreshData', 'success');
} else {
return false;
}
});
},
/**
* 获取数据
*/
getData() {
const that = this;
let params = {
staffId: that.partForm.staffId
};
getRequest('/haoban-manage3-web/staff-add', params)
.then(res => {
let resData = res.data;
if (resData.errorCode == 1) {
that.partForm = resData.result;
return false;
}
errMsg.errorMsg(resData);
})
.catch(function(error) {
that.$message.error({
duration: 1000,
message: error.message
});
});
}
},
watch: {
item(newData) {
const that = this;
if (Object.keys(this.item).length) {
that.$nextTick(() => {
that.partForm = JSON.parse(JSON.stringify(this.item));
});
}
}
},
mounted() {
const that = this;
if (Object.keys(that.item).length) {
that.$nextTick(() => {
that.partForm = JSON.parse(JSON.stringify(this.item));
});
}
}
};
</script>
<style lang="scss" scoped>
.m-l-35 {
margin-left: 35px;
}
.m-r-9 {
margin-right: 9px;
}
.w-327 {
width: 327px;
}
.font-12 {
font-size: 12px;
}
.el-alert--info {
height: 32px;
padding: 0 0 0 17px;
margin-bottom: 12px;
background: #f0f5ff;
border: 1px solid #85a5ff;
border-radius: 2px;
}
.authMerchant-dailog {
>>> .el-dialog__body {
padding-top: 8px;
padding-left: 21px;
}
>>> .el-form-item {
margin-bottom: 0;
>>> .el-form-item__label {
line-height: 40px;
}
}
>>> .el-dialog__footer {
padding-top: 9px;
}
}
</style>
<style>
.authMerchant-dailog .el-form-item .el-form-item__label {
line-height: 40px;
}
</style>
<template>
<div class="auth-merchant-add">
<nav-crumb :navpath="navpath"> </nav-crumb>
<div class="right-content">
<div class="right-box" style="min-height: calc(100vh - 104px);">
<div class="apps-content flex" style="min-height: calc(100vh - 104px);">
<div class="apps-content-right">
<div class="overstore-tip w-718">
<div role="alert" class="el-alert el-alert--info flex flex-align-center">
<i class="el-alert__icon el-icon-warning font-13 color-2f54eb"></i>
<div class="el-alert__content color-303133 font-13">
<p class="line-22">商户授权须知:</p>
<p class="line-22">1. 商户授权支持 1 个商户授权多个企业以及多个商户授权 1 个企业;</p>
<p class="line-22">2. 商户授权需经过商户管理员同意后,才会授权成功;</p>
<p class="line-22">3. 商户授权结束后,导购可通过企业微信好办小程序关联导购账号后登录;</p>
<p class="line-22">4. 商户授权门店绑定或修改,默认次日生效,如需立即生效可在商户授权列表手动刷新。</p>
</div>
</div>
</div>
<div class="m-t-24">
<el-form :model="partForm" :rules="rules" ref="form" label-width="128px" class="dialog-form">
<el-form-item label="企业名称">
{{ corpName }}
</el-form-item>
<el-form-item>
<el-tooltip slot="label" class="item" effect="dark" :open-delay="200" placement="top-start" content="输入品牌/商户的企业名称,只支持精确搜素。">
<span style="cursor: pointer;padding-bottom: 2px; border-bottom: 1px dashed #2F54EB;" class="font-14 color-606266">选择商户</span>
</el-tooltip>
<el-popover placement="bottom" title="" :disabled="type === 'edit'" trigger="click" popper-class="authMerchant-select-pop" width="253">
<div class="company-select">
<div class="el-scrollbar define-search-select">
<div class="el-select-dropdown__wrap el-scrollbar__wrap" style="margin-bottom: -5px; margin-right: -5px;">
<ul class="el-scrollbar__view el-select-dropdown__list auth-merchant-add">
<li class="el-select-dropdown__item" v-for="(item, index) in searchArray" :key="index + 'search'" @click="handleSelect(item)">
<div class="flex flex-space-between">
<div style="line-height: 26px;">
<span class="block text-ellipsis">{{ item.enterpriseName }}</span>
<div class="text-ellipsis font-12 color-909399">{{ item.brandName || '--' }}</div>
</div>
<span v-if="item.enterpriseId == enterpriseId" class="font-12 color-2f54eb el-icon-check flex-align-center" style="display:flex;"></span>
</div>
</li>
<li v-if="!searchArray.length" class="el-select-dropdown__item text-center">暂无商户数据</li>
</ul>
</div>
</div>
</div>
<div class="select-search-input cursor-pointer" slot="reference">
<div>
<el-form-item prop="searchSelect">
<el-input class="w-287" placeholder="请搜索选择商户" maxlength="50" :disabled="type === 'edit'" v-model="partForm.searchSelect" @keyup.native="querySearchAsync('search')"> </el-input>
</el-form-item>
</div>
</div>
</el-popover>
</el-form-item>
<el-form-item>
<el-tooltip slot="label" class="item" effect="dark" :open-delay="200" placement="top-start" content="拥有选中的门店管理权限,以及导购账号绑定权限">
<span style="cursor: pointer;padding-bottom: 2px; border-bottom: 1px dashed #2F54EB;" class="font-14 color-606266">门店绑定</span>
</el-tooltip>
<gic-select-group-auth :brandId="enterpriseId" width="287px" :authMerchant="true" :selectData="partForm.storeGroup" @checkGroupIds="checkGroupIds"> </gic-select-group-auth>
</el-form-item>
<el-form-item style="margin-top:-10px;margin-bottom:12px;">
<el-tooltip slot="label" class="item" effect="dark" :open-delay="200" placement="top-start">
<div slot="content" style="line-height:18px;">
①选择同一开平,通过企业微信添加客户,可以直接更新会员信息(一码两用)。<br />
原因:因为获取的用户unionid相同,可以将客户身份(企微客户)和会员(微信会员)身份直接关联;<br />
②选择不同开平,通过企业微信添加客户,无法直接更新会员信息(一码两用)。<br />
原因:因为获取的用户unionid不同,无法将客户身份(企微客户)和会员(微信会员)身份直接关联
</div>
<span style="cursor: pointer;padding-bottom: 2px; border-bottom: 1px dashed #2F54EB;" class="font-14 color-606266">开放平台类型</span>
</el-tooltip>
<div style="padding-top: 10px;">
<el-radio v-model="partForm.memberOpenCardFlag" :label="0" :disabled="type === 'edit'">
<div class="m-b-20" style="display:inline-block;vertical-align:top;">
<p class="l-h-1 m-b-5 color-303133">同一开平</p>
<p class="tip">(授权商户的小程序/公众号,和当前企业【客户联系】微信开发者ID绑在同一开放平台 。例:绑定同一开平的集团企业)</p>
</div>
</el-radio>
</div>
<div>
<el-radio v-model="partForm.memberOpenCardFlag" :label="1" :disabled="type === 'edit'">
<div style="display:inline-block;vertical-align:top;">
<p class="l-h-1 m-b-5 color-303133">不同开平</p>
<p class="tip">(授权商户的小程序/公众号,和当前企业【客户联系】微信开发者ID绑在不同开放平台。例:没绑定同一开平的代理商企业)</p>
</div>
</el-radio>
</div>
</el-form-item>
<el-form-item label="企业类型">
<el-radio v-model="partForm.wxEnterpriseType" :label="0" :disabled="type === 'edit'">总部</el-radio>
<el-radio v-model="partForm.wxEnterpriseType" :label="1" :disabled="type === 'edit'">代理</el-radio>
</el-form-item>
<el-button type="primary" style="display:block;margin:38px 0 0 128px;" @click="addShow = true" :disabled="!(enterpriseId && partForm.storeGroup.length && partForm.searchSelect)">授权校验并{{ type === 'edit' ? '保存' : '新建' }}</el-button>
</el-form>
</div>
</div>
</div>
</div>
</div>
<!-- <vue-gic-footer></vue-gic-footer> -->
<authMerchant-dailog v-if="addShow" @refreshData="refreshData" :item="dailogForm"></authMerchant-dailog>
</div>
</template>
<script>
import authMerchantDailog from './authMerchant-dailog.vue';
import gicSelectGroupAuth from '@/components/common/gic-select-group-auth.vue';
import navCrumb from '@/components/nav/nav.vue';
import { getRequest, postRequest } from '@/api/api';
import errMsg from '@/common/js/error';
// import { _debounce } from '@/common/js/public';
export default {
name: 'authMerchantAdd',
data() {
const checkEnterpriseId = (rule, value, callback) => {
if (!value) {
callback(new Error('请先搜索商户!'));
} else if (!this.enterpriseId) {
callback(new Error('请选择商户!'));
} else {
callback();
}
};
return {
bgHeight: window.screen.availHeight - 104 + 'px',
// 面包屑参数
navpath: [
{
name: '首页',
path: '/index'
},
{
name: '通讯录',
path: '/contacts'
},
{
name: '授权商户',
path: '/authMerchant'
},
{
name: '新建授权商户',
path: ''
}
],
partForm: {
memberOpenCardFlag: 0,
wxEnterpriseType: 0,
searchSelect: '',
storeGroup: []
},
rules: {
searchSelect: [{ required: true, validator: checkEnterpriseId, trigger: 'blur' }]
},
checkedList: [],
dailogForm: {},
searchArray: [],
enterpriseId: '',
corpName: '',
addShow: false
};
},
computed: {},
methods: {
/**
* 路由跳转
* @param {path} path
*/
changeRoute(path) {
this.$router.push(path);
},
handleSelect(item) {
this.enterpriseId = item.enterpriseId;
this.dailogForm = { ...item };
this.$refs.form.validateField('searchSelect');
},
async querySearchAsync(type) {
const that = this;
if (String(that.partForm.searchSelect).trim() == '') {
that.searchArray = [];
return false;
}
if (type === 'search') {
that.enterpriseId = '';
that.partForm.storeGroup = [];
}
const res = await that.getSearchList(that.partForm.searchSelect);
that.searchArray = res;
if (type === 'edit' && res[0]) {
that.handleSelect(res[0]);
}
},
getSearchList(queryString) {
const that = this;
let params = {
enterpriseName: queryString,
version: '3.0'
};
return new Promise((resolve, reject) => {
getRequest('/haoban-manage3-web/enterprise-search', params)
.then(res => {
let resData = res.data;
if (resData.errorCode == 1) {
if (resData.result) {
resData.result.value = resData.result.enterpriseName;
}
resolve(resData.result ? [resData.result] : []);
return false;
}
errMsg.errorMsg(resData);
resolve([]);
})
.catch(function(error) {
resolve([]);
that.$message.error({
duration: 1000,
message: error.message
});
});
});
},
checkGroupIds: function(nodes) {
const that = this;
that.partForm.storeGroup = nodes;
},
formateGroupList() {
const that = this;
let storeGroup = [];
that.partForm.storeGroup.map(item => {
storeGroup.push({
relationId: item.relationId,
relationName: item.relationName,
relationType: '1'
});
});
return storeGroup;
},
confirmForm() {
const that = this;
const para = {
enterpriseId: that.enterpriseId,
wxEnterpriseId: JSON.parse(localStorage.getItem('userInfos')).wxEnterpriseId,
version: '3.0',
rangeType: '1',
memberOpenCardFlag: that.partForm.memberOpenCardFlag,
wxEnterpriseType: that.partForm.wxEnterpriseType
};
if (this.$route.query.enterprise) {
para.wxEnterpriseRelatedId = that.partForm.wxEnterpriseRelatedId;
}
para.relations = JSON.stringify(that.formateGroupList());
postRequest(`/haoban-manage3-web/wx-enterprise-bind`, para)
.then(res => {
let resData = res.data;
if (resData.errorCode == 1) {
that.$message.success({
duration: 1000,
message: '授权商户新建成功!'
});
that.changeRoute('/authMerchant');
}
errMsg.errorMsg(resData);
})
.catch(function(error) {
that.$message.error({
duration: 1000,
message: error.message
});
});
},
getCompanyName() {
let that = this;
let para = {
wxEnterpriseId: localStorage.getItem('userInfos') ? JSON.parse(localStorage.getItem('userInfos')).wxEnterpriseId : ''
};
getRequest('/haoban-manage3-web/wxEnterprise-detail', para)
.then(res => {
let resData = res.data;
if (resData.errorCode == 1) {
that.corpName = resData.result.corpName;
return false;
}
errMsg.errorMsg(resData);
})
.catch(function(error) {
that.$message.error({
duration: 1000,
message: error.message
});
});
},
refreshData(type) {
const that = this;
that.addShow = false;
if (type == 'close') {
return false;
} else if (type == 'success') {
that.confirmForm();
}
},
getDeatil(enterpriseId) {
const that = this;
that.enterpriseId = enterpriseId;
const para = {
enterpriseId,
wxEnterpriseId: JSON.parse(localStorage.getItem('userInfos')).wxEnterpriseId,
version: '3.0'
};
postRequest(`/haoban-manage3-web/wx-enterprise-bind-detail`, para)
.then(res => {
let resData = res.data;
if (resData.errorCode == 1) {
let checkedList = [];
resData.result.relations && resData.result.relations.map(item => checkedList.push({ relationId: item.relationId }));
that.partForm.storeGroup = checkedList;
that.partForm.wxEnterpriseRelatedId = resData.result.wxEnterpriseRelatedId;
that.partForm.memberOpenCardFlag = resData.result.memberOpenCardFlag;
that.partForm.wxEnterpriseType = resData.result.wxEnterpriseType;
that.partForm.searchSelect = resData.result.enterpriseName;
that.querySearchAsync('edit');
}
errMsg.errorMsg(resData);
})
.catch(function(error) {
that.$message.error({
duration: 1000,
message: error.message
});
});
}
},
watch: {},
mounted() {
this.getCompanyName();
if (this.$route.query.enterprise) {
this.type = 'edit';
this.getDeatil(this.$route.query.enterprise);
} else {
this.type = 'add';
}
this.$nextTick(() => {
this.getSearchList('');
});
document.documentElement.style.backgroundColor = '#f0f2f5';
},
destroyed() {
document.documentElement.style.backgroundColor = '#fff';
},
components: {
navCrumb,
gicSelectGroupAuth,
authMerchantDailog
}
};
</script>
<style type="text/scss" lang="scss" scoped>
.w-287 {
width: 287px;
}
.m-b-20 {
margin-bottom: 20px;
}
.m-b-5 {
margin-bottom: 5px;
}
.l-h {
line-height: 1;
}
.tip {
font-size: 12px;
color: #909399;
line-height: 22px;
}
.span-dot {
display: inline-block;
vertical-align: middle;
width: 6px;
height: 6px;
margin-right: 6px;
border-radius: 3px;
&.bg-52c41a {
background: #52c41a;
}
&.bg-f5222d {
background: #f5222d;
}
}
.tooltip-text {
width: 100%;
white-space: pre-wrap;
word-break: break-all;
}
.w-287 {
width: 287px;
}
.el-alert--info {
background: rgba(240, 245, 255, 1);
border-radius: 2px;
border: 1px solid rgba(133, 165, 255, 1);
-webkit-box-align: flex-start;
-webkit-align-items: flex-start;
-ms-flex-align: flex-start;
align-items: flex-start;
.el-alert__icon {
font-size: 12px;
padding-top: 3px;
}
}
.my-customer-wrap {
height: 100%;
}
.right-content {
/*width: 100%;*/
padding: 0 20px 20px 20px;
min-height: calc(100% - 160px);
.right-box {
background: #fff;
min-height: 500px;
padding: 0px;
.apps-content {
.apps-content-right {
min-height: 787px;
box-sizing: border-box;
width: 100%;
padding: 20px;
background: #fff;
.overstore-body {
background: #fff;
}
.daily-set-wrap {
height: 100%;
background: #fff;
}
.app-detail-wrap {
height: 100%;
background: #fff;
}
.common-set-wrap {
height: 100%;
background: #fff;
}
}
}
}
}
</style>
<style>
.auth-merchant-add .el-select-dropdown__item {
height: 50px;
}
.authMerchant-select-pop {
left: 168px !important;
}
</style>
...@@ -7,19 +7,30 @@ ...@@ -7,19 +7,30 @@
* @LastEditTime: 2020-08-19 17:13:01 * @LastEditTime: 2020-08-19 17:13:01
--> -->
<template> <template>
<div class="my-customer-wrap common-set-wrap"> <div class="my-customer-wrap common-set-wrap authMerchant">
<nav-crumb :navpath="navpath"> </nav-crumb> <nav-crumb :navpath="navpath"> </nav-crumb>
<div class="right-content"> <div class="right-content">
<div class="right-box" style="min-height: calc(100vh - 104px);"> <div class="right-box" style="min-height: calc(100vh - 104px);">
<div class="apps-content flex" style="min-height: calc(100vh - 104px);"> <div class="apps-content flex" style="min-height: calc(100vh - 104px);">
<div class="apps-content-right"> <div class="apps-content-right">
<div class="flex flex-space-between"> <div class="flex flex-space-between flex-align-center">
<div></div> <div class="overstore-tip">
<el-button type="primary" @click="showAddDialog">新建授权</el-button> <div role="alert" class="el-alert el-alert--info flex flex-align-center">
<i class="el-alert__icon el-icon-warning font-13 color-2f54eb"></i>
<div class="el-alert__content">
<p class="el-alert__title color-303133 font-13">绑定门店:绑定门店拥有门店资源管理权限。能查看数据,绑定导购账号,管理门店等。</p>
<p class="el-alert__title color-303133 font-13">刷新门店:编辑或修改绑定门店范围,手动刷新获取最近门店列表。</p>
</div>
</div>
</div>
<div>
<span class="color-909399 font-13 m-r-19">最多授权 10 个商户</span>
<el-button v-if="tableData.length < 10" type="primary" @click="AddAuthMerchant">新建授权</el-button>
</div>
</div> </div>
<div class="m-t-20"> <div class="m-t-20">
<el-table class="select-table" ref="multipleTable" :data="tableData" tooltip-effect="dark" :style="{ width: '100%', minHeight: tableH }"> <el-table class="select-table" ref="multipleTable" v-loading="loading" :data="tableData" tooltip-effect="dark" :style="{ width: '100%', minHeight: tableH }">
<el-table-column prop="" label="商户列表" show-overflow-tooltip> <el-table-column prop="" label="审核事项" show-overflow-tooltip>
<template slot-scope="scope"> <template slot-scope="scope">
<div class="ul-li-cell flex"> <div class="ul-li-cell flex">
<div class="cell-img"> <div class="cell-img">
...@@ -27,10 +38,10 @@ ...@@ -27,10 +38,10 @@
</div> </div>
<div class="cell-info"> <div class="cell-info">
<div class="cell-info-name flex font-14 color-303133"> <div class="cell-info-name flex font-14 color-303133">
<span class="gic-name">{{ scope.row.enterpriseName || '--' }}</span <span class="gic-name color-606266">{{ scope.row.enterpriseName || '--' }}</span
><span class="gic-version">{{ scope.row.version }}</span> ><span class="gic-version color-606266">{{ scope.row.version || '3.0' }}</span>
</div> </div>
<div class="cell-info-name flex font-14 color-303133"> <div class="cell-info-name flex font-14 color-606266">
<span class="gic-name">{{ scope.row.brandName || '--' }}</span> <span class="gic-name">{{ scope.row.brandName || '--' }}</span>
</div> </div>
</div> </div>
...@@ -38,29 +49,36 @@ ...@@ -38,29 +49,36 @@
</template> </template>
</el-table-column> </el-table-column>
<el-table-column prop="" label="提交人" show-overflow-tooltip> <el-table-column prop="" label="提交人" show-overflow-tooltip>
<template slot-scope="scope">{{ scope.row.staffName || '--' }}</template> <template slot-scope="scope"
><span class="color-606266">{{ scope.row.staffName || '--' }}</span></template
>
</el-table-column> </el-table-column>
<el-table-column prop="" label="完成时间" show-overflow-tooltip> <el-table-column prop="" label="完成时间" show-overflow-tooltip>
<template slot-scope="scope"> <template slot-scope="scope">
<div class="line-18">{{ scope.row.createTime | timeStampToYmd }}</div> <div class="line-18 color-606266">{{ scope.row.createTime | timeStampToYmd }}</div>
<div class="line-18">{{ scope.row.createTime | timeStampToHms }}</div> <div class="line-18 color-606266">{{ scope.row.createTime | timeStampToHms }}</div>
</template>
</el-table-column>
<el-table-column prop="" label="操作">
<template slot-scope="scope">
<el-button type="text" @click="AddAuthMerchant(scope.row)">编辑授权设置</el-button>
<el-button type="text" @click="toStoreList(scope.row)">绑定门店列表</el-button>
<el-button slot="reference" type="text" size="small" @click="refreshStoreBind(scope.row)">刷新门店</el-button>
</template> </template>
</el-table-column> </el-table-column>
</el-table> </el-table>
<!-- <div class="block common-wrap__page text-right m-t-24" v-if="tableData.length != 0"> <div class="block common-wrap__page text-right m-t-24" v-if="tableData.length != 0">
<dm-pagination background @size-change="handleSizeChange" @current-change="handleCurrentChange" :current-page="currentPage" :page-sizes="[20, 40, 60, 80]" :page-size="pageSize" layout="total, sizes, prev, pager, next, jumper" :total="total"> </dm-pagination> <dm-pagination background @size-change="handleSizeChange" @current-change="handleCurrentChange" :current-page="currentPage" :page-sizes="[20, 40, 60, 80]" :page-size="pageSize" layout="total, sizes, prev, pager, next, jumper" :total="8"> </dm-pagination>
</div> --> </div>
</div> </div>
</div> </div>
</div> </div>
</div> </div>
</div> </div>
<!-- <vue-gic-footer></vue-gic-footer> --> <!-- <vue-gic-footer></vue-gic-footer> -->
<add-enterprise v-if="addShow" @refreshData="refreshData"></add-enterprise>
</div> </div>
</template> </template>
<script> <script>
import addEnterprise from '@/components/company/add-enterprise.vue';
import navCrumb from '@/components/nav/nav.vue'; import navCrumb from '@/components/nav/nav.vue';
import { getRequest } from '@/api/api'; import { getRequest } from '@/api/api';
import errMsg from '@/common/js/error'; import errMsg from '@/common/js/error';
...@@ -85,13 +103,14 @@ export default { ...@@ -85,13 +103,14 @@ export default {
path: '' path: ''
} }
], ],
loading: true,
// 分页参数 // 分页参数
currentPage: 1, currentPage: 1,
pageSize: 20, pageSize: 20,
total: 0, total: 0,
tableData: [], tableData: [],
addShow: false addShow: false,
activeBrand: ''
}; };
}, },
computed: {}, computed: {},
...@@ -99,9 +118,12 @@ export default { ...@@ -99,9 +118,12 @@ export default {
/** /**
* 新增企业 * 新增企业
*/ */
showAddDialog() { AddAuthMerchant(item) {
const that = this; if (item.enterpriseId) {
that.addShow = true; this.changeRoute(`authMerchantForm?enterprise=${item.enterpriseId}`);
} else {
this.changeRoute(`authMerchantForm`);
}
}, },
refreshData(res) { refreshData(res) {
const that = this; const that = this;
...@@ -118,6 +140,9 @@ export default { ...@@ -118,6 +140,9 @@ export default {
changeRoute(path) { changeRoute(path) {
this.$router.push(path); this.$router.push(path);
}, },
toStoreList(item) {
this.changeRoute(`merchantStoreList?enterprise=${item.enterpriseId}`);
},
/** /**
* 分页---页码变化 * 分页---页码变化
...@@ -144,9 +169,11 @@ export default { ...@@ -144,9 +169,11 @@ export default {
*/ */
getTableList(val) { getTableList(val) {
const that = this; const that = this;
that.loading = true;
let para = {}; let para = {};
getRequest('/haoban-manage3-web/wx-enterprise-list', para) getRequest('/haoban-manage3-web/wx-enterprise-list', para)
.then(res => { .then(res => {
that.loading = false;
let resData = res.data; let resData = res.data;
if (resData.errorCode == 1) { if (resData.errorCode == 1) {
that.tableData = resData.result || []; that.tableData = resData.result || [];
...@@ -155,11 +182,46 @@ export default { ...@@ -155,11 +182,46 @@ export default {
errMsg.errorMsg(resData); errMsg.errorMsg(resData);
}) })
.catch(function(error) { .catch(function(error) {
that.loading = false;
that.$message.error({
duration: 1000,
message: error.message
});
});
},
refreshStoreBind(item) {
const that = this;
that
.$confirm(`确认要刷新吗?`, '', {
confirmButtonText: '确定',
cancelButtonText: '取消',
type: 'warning'
})
.then(() => {
that.loading = true;
let para = { enterpriseId: item.enterpriseId };
getRequest('/haoban-manage3-web/flush-bind-store-list', para)
.then(res => {
that.loading = false;
let resData = res.data;
if (resData.errorCode == 1) {
that.$message.success({
duration: 1000,
message: '刷新成功'
});
return false;
}
errMsg.errorMsg(resData);
})
.catch(function(error) {
that.loading = false;
that.$message.error({ that.$message.error({
duration: 1000, duration: 1000,
message: error.message message: error.message
}); });
}); });
})
.catch(() => {});
} }
}, },
watch: { watch: {
...@@ -181,8 +243,7 @@ export default { ...@@ -181,8 +243,7 @@ export default {
document.documentElement.style.backgroundColor = '#fff'; document.documentElement.style.backgroundColor = '#fff';
}, },
components: { components: {
navCrumb, navCrumb
addEnterprise
} }
}; };
</script> </script>
......
<!--
* @Descripttion: 当前组件信息
* @version: 1.0.0
* @Author: 无尘
* @Date: 2019-03-20 14:36:37
* @LastEditors: 无尘
* @LastEditTime: 2020-08-19 17:13:01
-->
<template>
<div class="my-customer-wrap common-set-wrap">
<nav-crumb :navpath="navpath"> </nav-crumb>
<div class="right-content">
<div class="right-box" style="min-height: calc(100vh - 104px);">
<div class="apps-content flex" style="min-height: calc(100vh - 104px);">
<div class="apps-content-right">
<div class="overstore-tip m-b-19">
<div role="alert" class="el-alert el-alert--info flex flex-align-center w-604">
<i class="el-alert__icon el-icon-warning font-13 color-2f54eb"></i>
<div class="el-alert__content">
<p class="el-alert__title color-303133 font-13">授权范围:展示授权商户资源组全部授权范围,包含关联企业的门店和未关联企业的门店</p>
</div>
</div>
</div>
<div class="table-condition m-b-19">
<el-input placeholder="请输入门店名称" maxlength="50" v-model="pageParams.search" class="w-264 " style="width: 264px;" @keyup.native="toInput"> <i slot="prefix" class="el-input__icon el-icon-search"></i> </el-input>
</div>
<div class="m-t-20">
<el-table class="select-table" ref="multipleTable" :data="tableData" tooltip-effect="dark" :style="{ width: '100%', minHeight: tableH }">
<el-table-column prop="" label="门店 " show-overflow-tooltip>
<template slot-scope="scope">
<p class="gic-name color-606266">{{ scope.row.storeName || '' }}</p>
<p class="gic-version color-606266">{{ scope.row.storeCode || '' }}</p>
</template>
</el-table-column>
<el-table-column prop="" label="门店分组" show-overflow-tooltip>
<template slot-scope="scope">{{ scope.row.storeGroupName || '' }}</template>
</el-table-column>
<el-table-column prop="" label="绑定时间" show-overflow-tooltip>
<template slot-scope="scope">
<div class="line-18 color-606266">{{ scope.row.createTime | timeStampToYmd }}</div>
<div class="line-18 color-606266">{{ scope.row.createTime | timeStampToHms }}</div>
</template>
</el-table-column>
</el-table>
<div class="block common-wrap__page text-right m-t-24" v-if="tableData.length">
<el-pagination background @size-change="handleSizeChange" @current-change="handleCurrentChange" :current-page="pageParams.pageNum" :page-sizes="[10, 20, 30]" :page-size="pageParams.pageSize" layout="total, sizes, prev, pager, next" :total="total"> </el-pagination>
</div>
</div>
</div>
</div>
</div>
</div>
<!-- <vue-gic-footer></vue-gic-footer> -->
</div>
</template>
<script>
import navCrumb from '@/components/nav/nav.vue';
import { getRequest } from '@/api/api';
import errMsg from '@/common/js/error';
// import { _debounce } from '@/common/js/public';
export default {
name: 'authMerchant',
data() {
return {
bgHeight: window.screen.availHeight - 104 + 'px',
// 面包屑参数
navpath: [
{
name: '首页',
path: '/index'
},
{
name: '通讯录',
path: '/contactsList'
},
{
name: '授权商户',
path: '/authMerchant'
},
{
name: '门店绑定列表',
path: ''
}
],
pageParams: {
pageNum: 1,
pageSize: 20,
enterpriseId: this.$route.query.enterprise || ''
},
// 分页参数
total: 0,
tableData: [],
addShow: false
};
},
computed: {},
methods: {
toInput(res) {
const that = this;
that.pageParams.pageNum = 1;
that.getTableList();
},
/**
* 路由跳转
* @param {path} path
*/
changeRoute(path) {
this.$router.push(path);
},
/**
* 分页---页码变化
* @param {Number} val
*/
handleSizeChange(val) {
const that = this;
that.pageParams.pageNum = 1;
that.pageParams.pageSize = val;
that.getTableList();
},
/**
* 分页---当前页变化
* @param {Number} val
*/
handleCurrentChange(val) {
const that = this;
that.pageParams.pageNum = val;
that.getTableList();
},
/**
* 获取列表数据
*/
getTableList(val) {
const that = this;
let para = { ...this.pageParams };
getRequest('/haoban-manage3-web/bind-store-list', para)
.then(res => {
let resData = res.data;
if (resData.errorCode == 1 && resData.result) {
that.tableData = resData.result.result || [];
this.total = resData.result.totalCount || 0;
return false;
}
that.tableData = [];
errMsg.errorMsg(resData);
})
.catch(function(error) {
that.$message.error({
duration: 1000,
message: error.message
});
});
}
},
watch: {},
mounted() {
const that = this;
that.getTableList();
document.documentElement.style.backgroundColor = '#f0f2f5';
},
destroyed() {
document.documentElement.style.backgroundColor = '#fff';
},
components: {
navCrumb
}
};
</script>
<style type="text/scss" lang="scss" scoped>
.span-dot {
display: inline-block;
vertical-align: middle;
width: 6px;
height: 6px;
margin-right: 6px;
border-radius: 3px;
&.bg-52c41a {
background: #52c41a;
}
&.bg-f5222d {
background: #f5222d;
}
}
.bg-82C5FF {
background: #82c5ff;
}
.color-508CEE {
color: #508cee;
}
.color-FF585C {
color: #ff585c;
}
.line-h-18 {
line-height: 18px;
}
.m-b-19 {
margin-bottom: 19px;
}
.tooltip-text {
width: 100%;
white-space: pre-wrap;
word-break: break-all;
}
.w-293 {
width: 293px;
}
.w-191 {
width: 191px;
}
.w-604 {
width: 604px;
}
.el-alert--info {
background: rgba(240, 245, 255, 1);
border-radius: 2px;
border: 1px solid rgba(133, 165, 255, 1);
-webkit-box-align: flex-start;
-webkit-align-items: flex-start;
-ms-flex-align: flex-start;
align-items: flex-start;
.el-alert__icon {
font-size: 12px;
padding-top: 3px;
}
}
.my-customer-wrap {
height: 100%;
}
.right-content {
/*width: 100%;*/
padding: 0 20px 20px 20px;
min-height: calc(100% - 160px);
.right-box {
background: #fff;
min-height: 500px;
padding: 0px;
.apps-content {
.apps-content-right {
width: 100%;
padding: 20px;
background: #fff;
.overstore-body {
background: #fff;
}
.daily-set-wrap {
height: 100%;
background: #fff;
}
.app-detail-wrap {
height: 100%;
background: #fff;
}
.common-set-wrap {
height: 100%;
background: #fff;
}
}
}
}
}
.ul-li-cell {
.cell-img {
width: 40px;
min-width: 40px;
max-width: 40px;
height: 40px;
border-radius: 2px;
border: 1px solid rgba(228, 231, 237, 1);
box-sizing: border-box;
img {
width: 100%;
}
}
.cell-info {
padding-left: 10px;
box-sizing: border-box;
.cell-info-name {
max-width: 370px;
height: 20px;
line-height: 19px;
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
}
.gic-name {
width: 100%;
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
font-size: 14px;
color: #303133;
line-height: 18px;
}
.gic-version {
display: inline-block;
padding: 0 5px;
height: 15px;
line-height: 15px;
margin-left: 5px;
background: rgba(255, 241, 240, 1);
border-radius: 2px;
border: 1px solid rgba(255, 163, 158, 1);
font-size: 10px;
color: #f5222d;
}
}
}
</style>
...@@ -119,6 +119,8 @@ ...@@ -119,6 +119,8 @@
<el-button v-if="scope.row.channelCode == 2003" class="cursor-unset" type="text">GIC 同步解绑</el-button> <el-button v-if="scope.row.channelCode == 2003" class="cursor-unset" type="text">GIC 同步解绑</el-button>
<el-button v-if="scope.row.channelCode == 2004" class="cursor-unset" type="text">企业同步解绑</el-button> <el-button v-if="scope.row.channelCode == 2004" class="cursor-unset" type="text">企业同步解绑</el-button>
<el-button v-if="scope.row.channelCode == 2005" class="cursor-unset" type="text">审核被解绑</el-button> <el-button v-if="scope.row.channelCode == 2005" class="cursor-unset" type="text">审核被解绑</el-button>
<el-button v-if="scope.row.channelCode == 2006" class="cursor-unset" type="text">权限变更解绑</el-button>
<el-button v-if="scope.row.channelCode == 2007" class="cursor-unset" type="text">门店变更解绑</el-button>
</template> </template>
</el-table-column> </el-table-column>
</el-table> </el-table>
......
...@@ -7,7 +7,7 @@ ...@@ -7,7 +7,7 @@
* @LastEditTime: 2020-12-03 15:26:58 * @LastEditTime: 2020-12-03 15:26:58
--> -->
<template> <template>
<div class="daily-set-wrap "> <div class="daily-set-wrap">
<div class="company-set-content border-box"> <div class="company-set-content border-box">
<div class="company-title m-b-20 flex flex-space-between"> <div class="company-title m-b-20 flex flex-space-between">
<div class="line-h-32"><span class="color-303133 font-14 font-w-600">企业微信基本信息</span><el-button class="m-l-20" type="text" @click="refeshData">同步刷新 </el-button></div> <div class="line-h-32"><span class="color-303133 font-14 font-w-600">企业微信基本信息</span><el-button class="m-l-20" type="text" @click="refeshData">同步刷新 </el-button></div>
...@@ -38,6 +38,8 @@ ...@@ -38,6 +38,8 @@
</el-form-item> </el-form-item>
</el-form> </el-form>
</div> </div>
</div>
<div class="company-set-content border-box">
<div class="company-title m-b-20 m-t-30"><span class="color-303133 font-14 font-w-600">客户密钥维护</span></div> <div class="company-title m-b-20 m-t-30"><span class="color-303133 font-14 font-w-600">客户密钥维护</span></div>
<div class="company-info-body secret-body"> <div class="company-info-body secret-body">
<div class="m-b-20 secret-cell"> <div class="m-b-20 secret-cell">
...@@ -80,7 +82,7 @@ ...@@ -80,7 +82,7 @@
</div> --> </div> -->
<div class="secret-cell m-b-20"> <div class="secret-cell m-b-20">
<el-tooltip class="item" effect="dark" content="企业微信中【应用管理】关联的会员小程序secret,请复制后更新至此处。首次使用好办请输入。" placement="top-start"> <span style="cursor: pointer;padding-bottom: 2px; border-bottom: 1px dashed #2F54EB;" class="font-14 color-606266">会员小程序secret:</span></el-tooltip> <el-tooltip class="item" effect="dark" content="企业微信中【应用管理】关联的会员小程序secret,请复制后更新至此处。首次使用好办请输入。" placement="top-start"> <span style="cursor: pointer;padding-bottom: 2px; border-bottom: 1px dashed #2F54EB;" class="font-14 color-606266">会员小程序secret:</span></el-tooltip>
<span class="p-l-5 font-14 color-303133 font-w-500">会员小程序信息</span> <span class="p-l-10 font-14 color-303133 font-w-500">会员小程序信息</span>
<div class="table-cell m-t-10 p-l-137"> <div class="table-cell m-t-10 p-l-137">
<el-table class="no-empty-icon-table" ref="multipleTable" :data="tableData" tooltip-effect="dark" :style="{ width: '100%', minHeight: tableH }"> <el-table class="no-empty-icon-table" ref="multipleTable" :data="tableData" tooltip-effect="dark" :style="{ width: '100%', minHeight: tableH }">
<el-table-column label="小程序名称" show-overflow-tooltip> <el-table-column label="小程序名称" show-overflow-tooltip>
...@@ -121,12 +123,47 @@ ...@@ -121,12 +123,47 @@
</el-form> </el-form>
</div> </div>
</div> </div>
<div class="company-set-content border-box">
<div class="company-title m-b-20 m-t-26 flex flex-space-between flex-align-center">
<p class="color-303133 font-14 font-w-600">小程序添加</p>
<el-button type="primary" @click="addApp">获取小程序</el-button>
</div>
<div class="company-info-body">
<div class="table-cell m-t-10">
<el-table class="no-empty-icon-table" ref="multipleTable" :data="appTableData" tooltip-effect="dark" :style="{ width: '100%', minHeight: tableH }">
<el-table-column label="小程序名称" show-overflow-tooltip>
<template slot-scope="scope">{{ scope.row.miniprogramName || '--' }}</template>
</el-table-column>
<el-table-column prop="" label="AppID" width="239">
<template slot-scope="scope">
<span>{{ scope.row.appId || '--' }}</span>
</template>
</el-table-column>
<el-table-column prop="" label="最近编辑时间" show-overflow-tooltip>
<template slot-scope="scope">
<div class="line-18">{{ scope.row.updateTime | timeStampToYmd }}</div>
<div class="line-18">{{ scope.row.updateTime | timeStampToHms }}</div>
</template>
</el-table-column>
<el-table-column prop="" label="操作">
<template slot-scope="scope">
<el-button type="text" @click="toAppEdit(scope.$index, scope.row)">编辑</el-button>
<!-- <el-button type="text" @click="toAppDel(scope.$index, scope.row)">删除</el-button> -->
</template>
</el-table-column>
</el-table>
<!-- <div class="text-center add-cell cursor-pointer" @click="addApp"><span class="el-icon-plus font-14 color-2f54eb add-cell-txt"></span><span class="font-14 color-2f54eb p-l-5 add-cell-txt">新建</span></div> -->
</div>
</div>
</div>
<secret-set v-if="addShow" :editRow="editRow" @closeText="closeText" @submitText="submitText"></secret-set> <secret-set v-if="addShow" :editRow="editRow" @closeText="closeText" @submitText="submitText"></secret-set>
<app-set v-if="addAppShow" :editRow="appEditRow" :type="appSetType" @closeText="closeAppText" @submitText="submitAppText"></app-set>
</div> </div>
</template> </template>
<script> <script>
import setTip from '@/components/app/set-tip.vue'; import setTip from '@/components/app/set-tip.vue';
import secretSet from '@/components/set/secret-set.vue'; import secretSet from '@/components/set/secret-set.vue';
import appSet from '@/components/set/app-set.vue';
import { getRequest, postRequest } from '@/api/api'; import { getRequest, postRequest } from '@/api/api';
import { _debounce } from '@/common/js/public'; import { _debounce } from '@/common/js/public';
import showMsg from '@/common/js/showmsg'; import showMsg from '@/common/js/showmsg';
...@@ -175,8 +212,12 @@ export default { ...@@ -175,8 +212,12 @@ export default {
showContactError: false, showContactError: false,
showHaobanError: false, showHaobanError: false,
tableData: [], tableData: [],
appTableData: [],
addShow: false, addShow: false,
addAppShow: false,
appSetType: 0,
editRow: {}, editRow: {},
appEditRow: {},
// 企微好友 // 企微好友
wxShow: false, wxShow: false,
wxDate: '' wxDate: ''
...@@ -256,6 +297,11 @@ export default { ...@@ -256,6 +297,11 @@ export default {
that.addShow = true; that.addShow = true;
that.editRow = {}; that.editRow = {};
}, },
addApp() {
const that = this;
that.addAppShow = true;
that.editRow = { type: 'add' };
},
/** /**
* 编辑 * 编辑
*/ */
...@@ -264,17 +310,33 @@ export default { ...@@ -264,17 +310,33 @@ export default {
that.addShow = true; that.addShow = true;
that.editRow = row; that.editRow = row;
}, },
toAppEdit(index, row) {
const that = this;
that.addAppShow = true;
that.appEditRow = Object.assign({}, row, { type: 'edit' });
},
closeText() { closeText() {
const that = this; const that = this;
that.addShow = false; that.addShow = false;
that.editRow = {}; that.editRow = {};
}, },
closeAppText() {
const that = this;
that.addAppShow = false;
that.appEditRow = {};
},
submitText() { submitText() {
const that = this; const that = this;
that.addShow = false; that.addShow = false;
that.editRow = {}; that.editRow = {};
that.getSecretData(); that.getSecretData();
}, },
submitAppText() {
const that = this;
that.addAppShow = false;
that.appEditRow = {};
that.getAppData();
},
/** /**
* 删除 * 删除
*/ */
...@@ -291,6 +353,19 @@ export default { ...@@ -291,6 +353,19 @@ export default {
}) })
.catch(() => {}); .catch(() => {});
}, },
toAppDel(index, row) {
const that = this;
that
.$confirm('确定删除当前小程序?', '提示', {
confirmButtonText: '确定',
cancelButtonText: '取消',
type: 'warning'
})
.then(() => {
that.postAppDel(index, row);
})
.catch(() => {});
},
postDel(index, row) { postDel(index, row) {
const that = this; const that = this;
let para = { let para = {
...@@ -314,6 +389,29 @@ export default { ...@@ -314,6 +389,29 @@ export default {
}); });
}); });
}, },
postAppDel(index, row) {
const that = this;
let para = {
id: row.miniprogramSettingId
};
postRequest('/haoban-manage3-web/del-miniprogram-setting', para)
.then(res => {
let resData = res.data;
if (resData.errorCode == 1) {
showMsg.showmsg('删除成功', 'success');
that.getAppData();
return;
}
that.getAppData();
errMsg.errorMsg(resData);
})
.catch(function(error) {
that.$message.error({
duration: 1000,
message: error.message
});
});
},
/** /**
* 保存secret * 保存secret
*/ */
...@@ -478,6 +576,24 @@ export default { ...@@ -478,6 +576,24 @@ export default {
message: error.message message: error.message
}); });
}); });
},
getAppData() {
const that = this;
getRequest('/haoban-manage3-web/list-miniprogram-setting', {})
.then(res => {
let resData = res.data;
if (resData.errorCode == 1) {
that.appTableData = resData.result;
return;
}
errMsg.errorMsg(resData);
})
.catch(function(error) {
that.$message.error({
duration: 1000,
message: error.message
});
});
} }
}, },
watch: {}, watch: {},
...@@ -485,6 +601,7 @@ export default { ...@@ -485,6 +601,7 @@ export default {
const that = this; const that = this;
that.$emit('showTab', 1); that.$emit('showTab', 1);
document.documentElement.style.backgroundColor = '#f0f2f5'; document.documentElement.style.backgroundColor = '#f0f2f5';
that.getAppData();
that.getData(); that.getData();
that.getSecretData(); that.getSecretData();
that.getTipData(); that.getTipData();
...@@ -496,7 +613,8 @@ export default { ...@@ -496,7 +613,8 @@ export default {
}, },
components: { components: {
setTip, setTip,
secretSet secretSet,
appSet
} }
}; };
</script> </script>
...@@ -584,7 +702,11 @@ export default { ...@@ -584,7 +702,11 @@ export default {
} }
.daily-set-wrap { .daily-set-wrap {
height: 100%; height: 100%;
margin-top: -10px;
background: #f0f2f5 !important;
.company-set-content { .company-set-content {
background: #ffffff;
margin-top: 10px;
padding: 20px; padding: 20px;
.table-condition-left { .table-condition-left {
font-size: 0; font-size: 0;
......
...@@ -60,6 +60,11 @@ export default { ...@@ -60,6 +60,11 @@ export default {
tabId: '3', tabId: '3',
tabName: '素材库', tabName: '素材库',
icon: 'iconsucaiku' icon: 'iconsucaiku'
},
{
tabId: '4',
tabName: '欢迎语',
icon: 'iconhuanyingci'
} }
], ],
activeBrand: '', // 商户(品牌) id activeBrand: '', // 商户(品牌) id
...@@ -113,6 +118,9 @@ export default { ...@@ -113,6 +118,9 @@ export default {
case '3': case '3':
that.changeRoute(`material`); that.changeRoute(`material`);
break; break;
case '4':
that.changeRoute(`salutatory`);
break;
} }
}, },
......
<template>
<div class="daily-set-wrap ">
<div class="daily-set-content border-box">
<div class="admin-tip-body">
<div role="alert" class="el-alert el-alert--info">
<i class="el-alert__icon el-icon-info"></i>
<div class="el-alert__content">
<p class="el-alert__title">
1. 因企业微信接口限制,若在企微管理端为相关人员配置欢迎语,好办设置欢迎语不会生效;<br />
2. 若使用好办欢迎语,请关闭其他企业自建应用/第三方应用的欢迎语配置; <br />
3. 欢迎语的业务场景是为了支持在代理商主体下的外部联系人与总部的会员能互联,暂不支持其他需求场景
</p>
</div>
</div>
</div>
<div class="salutatory-wrap m-t-20">
<div class="top">
<p class="left">欢迎语标题 {{ form.title || '系统默认' }}</p>
<p class="right">
<span class="date">最近编辑时间:{{ form.updateTime | formatTimeStamp }}</span
><el-button type="text" style="margin-right:43px;" @click="changeRoute">编辑</el-button><el-switch v-model="openFlag" :active-value="1" :inactive-value="0" @change="setWelcome"> </el-switch>
</p>
</div>
<p class="line"></p>
<div class="bottom">
<el-form label-width="70px" ref="form" :model="form">
<el-form-item label="文本内容"
><p class="welcome-text">{{ form.welcomeContent || '你好,&lt; 微信昵称 &gt;' }}</p></el-form-item
>
<!-- <el-form-item label="附件"></el-form-item> -->
</el-form>
</div>
</div>
</div>
</div>
</template>
<script>
import { getRequest } from '@/api/api';
// import { _debounce } from '@/common/js/public';
// import showMsg from '@/common/js/showmsg';
import errMsg from '@/common/js/error';
export default {
props: {},
data() {
return {
form: {},
openFlag: 0
};
},
filters: {},
methods: {
/**
* 跳转
*/
changeRoute() {
this.$router.push('/salutatorySet');
},
/**
* 获取数据
*/
getData() {
const that = this;
getRequest('/haoban-manage3-web/get-welcome', {})
.then(res => {
let resData = res.data;
if (resData.errorCode == 1 && resData.result) {
that.form = { ...resData.result };
that.openFlag = resData.result.openFlag;
}
errMsg.errorMsg(resData);
})
.catch(function(error) {
that.$message.error({
duration: 1000,
message: error.message
});
});
},
setWelcome(val) {
const that = this;
that.$refs.form.validate(value => {
if (value) {
this.$confirm('是否确定修改欢迎语启用状态?', '提示', {
confirmButtonText: '确定',
cancelButtonText: '取消',
type: 'warning'
})
.then(() => {
getRequest('/haoban-manage3-web/set-welcome', { openFlag: val })
.then(res => {
let resData = res.data;
if (resData.errorCode == 1) {
that.$message.success({
duration: 1000,
message: '设置成功'
});
window.location.reload();
}
errMsg.errorMsg(resData);
})
.catch(function(error) {
that.$message.error({
duration: 1000,
message: error.message
});
});
})
.catch(() => {
that.openFlag = that.openFlag === 1 ? 0 : 1;
});
}
});
}
},
watch: {},
mounted() {
const that = this;
that.$emit('showTab', 4);
document.documentElement.style.backgroundColor = '#f0f2f5';
that.getData();
},
destroyed() {
document.documentElement.style.backgroundColor = '#fff';
},
components: {}
};
</script>
<style type="text/scss" lang="scss" scoped>
.bg-ebecf0 {
background: #ebecf0;
}
.color-c0c4cc {
display: inline-block;
line-height: 34px;
padding-left: 10px;
color: #c0c4cc;
}
.condition-tips {
display: inline-block;
vertical-align: middle;
line-height: 32px;
}
.p-l-30 {
padding-left: 30px;
}
.p-l-40 {
padding-left: 40px;
}
.p-l-55 {
padding-left: 55px;
}
.p-l-85 {
padding-left: 85px;
}
.m-l-20 {
margin-left: 20px;
}
.line-50 {
height: 50px;
line-height: 50px;
}
.el-alert--info {
align-items: flex-start;
width: 700px;
padding-top: 5px;
font-size: 14px;
color: #606266;
background: rgba(240, 245, 255, 1);
border-radius: 2px;
border: 1px solid rgba(133, 165, 255, 1);
}
.el-icon-info {
width: 12px;
font-size: 12px;
color: #2f54eb;
margin-top: 5px;
}
.el-alert__content {
padding-left: 9px;
.el-alert__title {
font-size: 13px;
font-weight: 400;
color: #303133;
line-height: 22px;
}
}
.daily-set-wrap {
height: 100%;
.daily-set-content {
padding: 20px;
.table-condition-left {
font-size: 0;
}
}
}
.salutatory-wrap {
// height: 160px;
background: #f5f7fa;
.top {
display: flex;
justify-content: space-between;
align-items: center;
height: 47px;
padding: 0 20px 0 29px;
.left {
font-size: 14px;
font-weight: 600;
color: #303133;
line-height: 20px;
}
.right {
.date {
font-size: 12px;
font-weight: 400;
color: #909399;
line-height: 17px;
margin-right: 30px;
}
}
}
.line {
box-sizing: border-box;
border: 1px solid #e4e7ed;
border-style: none none solid none;
}
.bottom {
padding: 16px 20px 21px 29px;
.el-form-item {
>>> .el-form-item__label {
padding: 0;
}
>>> .el-form-item__label,
>>> .el-form-item__content {
line-height: 20px;
font-size: 14px;
font-weight: 400;
color: #303133;
}
}
}
}
.welcome-text {
text-align: left;
text-overflow: ellipsis;
display: -webkit-box;
-webkit-line-clamp: 2;
-webkit-box-orient: vertical;
overflow: hidden;
}
</style>
<template>
<div class="daily-set-wrap ">
<div class="daily-set-content border-box">
<div class="salutatory-set-wrap m-t-20">
<el-form label-width="117px" ref="form" :model="form" :rules="rules" refs="form">
<el-form-item label="欢迎语标题" prop="title"><el-input show-word-limit placeholder="请输入欢迎语标题" type="text" v-model="form.title" maxlength="20" class="w-384"></el-input> </el-form-item>
<el-form-item label="欢迎语内容" prop="welcomeContent" class="welcomeContentItem">
<el-input show-word-limit placeholder="请输入文本内容" type="textarea" v-model="form.welcomeContent" maxlength="1000" class="w-384 welcomeContent"></el-input>
<div class="text-bottom flex w-384">
<el-popover placement="top" width="388" trigger="click">
<ul class="flex flex-wrap">
<li v-for="(item, index) in emojiList" :key="index + 'emoji'">
<img :src="item.gifUrl" alt="" @click="selectEmoji(item)" />
</li>
</ul>
<p slot="reference" style="cursor:pointer;height:24px;">
<svg-icon iconname="iconbiaoqing" size="20"> </svg-icon>
</p>
</el-popover>
<div class="put" @click="putName">插入&lt; 微信昵称 &gt;</div>
</div>
</el-form-item>
<el-button type="primary" style="margin-left:117px;" @click="submit">保存</el-button>
</el-form>
</div>
</div>
</div>
</template>
<script>
import { getRequest } from '@/api/api';
// import { _debounce } from '@/common/js/public';
// import showMsg from '@/common/js/showmsg';
import limitTextarea from '@/components/limit-textarea.vue';
import errMsg from '@/common/js/error';
import { emojiArr } from '@/utils/emoji';
export default {
props: {},
data() {
return {
form: {
title: '系统默认',
welcomeContent: '你好,<微信昵称>'
},
rules: {
title: [{ required: true, message: '请输入欢迎语标题', trigger: 'blur' }]
},
emojiList: emojiArr
};
},
methods: {
changeRoute() {
this.$router.push('/contactsList');
},
selectEmoji(item) {
const that = this;
const str = that.form.welcomeContent + item.key;
if (str.length > 1000) {
this.$message('添加该表情后文本内容将超过字数限制,无法添加!');
} else {
that.form.welcomeContent = str;
}
},
putName() {
const that = this;
that.form.welcomeContent = that.form.welcomeContent + '<微信昵称>';
},
getData() {
const that = this;
let para = {
wxEnterpriseId: that.wxEnterpriseId
};
getRequest('/haoban-manage3-web/get-welcome', para)
.then(res => {
let resData = res.data;
if (resData.errorCode == 1 && resData.result) {
that.form = resData.result;
}
errMsg.errorMsg(resData);
})
.catch(function(error) {
that.$message.error({
duration: 1000,
message: error.message
});
});
},
submit() {
const that = this;
that.$refs.form.validate(value => {
if (value) {
this.$confirm('是否保存此欢迎语?', '提示', {
confirmButtonText: '确定',
cancelButtonText: '取消',
type: 'warning'
})
.then(() => {
const para = { ...that.form };
getRequest('/haoban-manage3-web/save-welcome', para)
.then(res => {
let resData = res.data;
if (resData.errorCode == 1) {
this.$message({
type: 'success',
message: '保存成功!'
});
window.location.reload();
}
errMsg.errorMsg(resData);
})
.catch(function(error) {
that.$message.error({
duration: 1000,
message: error.message
});
});
})
.catch();
}
});
}
},
watch: {},
mounted() {
const that = this;
that.$emit('showTab', 4);
document.documentElement.style.backgroundColor = '#f0f2f5';
that.getData();
},
destroyed() {
document.documentElement.style.backgroundColor = '#fff';
},
components: {
limitTextarea
}
};
</script>
<style type="text/scss" lang="scss" scoped>
.w-384 {
width: 384px;
box-sizing: border-box;
}
.welcomeContent {
height: 220px;
border: 1px solid #dcdfe6;
border-radius: 2px;
>>> .el-textarea__inner {
height: 181px;
border: none;
&:focus {
box-shadow: none;
}
}
>>> .el-input__count {
bottom: 44px;
}
}
.daily-set-wrap {
height: 100%;
.daily-set-content {
padding: 20px;
.table-condition-left {
font-size: 0;
}
}
}
.salutatory-set-wrap {
>>> .el-input__inner:focus {
box-shadow: none;
}
.welcomeContentItem >>> .el-form-item__content {
position: relative;
width: 384px;
box-sizing: border-box;
.text-bottom {
position: absolute;
bottom: 1px;
left: 1px;
justify-content: space-between;
align-items: center;
height: 38px;
width: 382px;
box-sizing: border-box;
padding: 0 9px;
background: #f5f7fa;
.put {
font-size: 12px;
font-weight: 400;
color: #606266;
line-height: 17px;
cursor: pointer;
}
}
}
}
</style>
...@@ -118,7 +118,18 @@ ...@@ -118,7 +118,18 @@
</div> </div>
</div> </div>
</div> </div>
<!-- <template v-if="taskTipShow">
<div class="task-tip-wrap">
<i class="el-icon-warning"></i>
<div class="task-tip-content">
<p>话务任务应用下线通知:</p>
<p>1. 话务任务预计将于5月下旬下线,功能将由销售线索替代;</p>
<p>2. 后续如需下发任务,请通过GIC智能引擎中企微任务下发;</p>
<p>3. 话务任务下线后,智能引擎话务及好办企微任务也会下线,不良评价任务将转移至其他应用,请知悉。</p>
</div>
<i class="el-icon-close" @click="taskTipClose"></i>
</div>
</template> -->
<!-- <vue-gic-footer></vue-gic-footer> --> <!-- <vue-gic-footer></vue-gic-footer> -->
</div> </div>
</div> </div>
...@@ -135,6 +146,7 @@ export default { ...@@ -135,6 +146,7 @@ export default {
name: 'index', name: 'index',
data() { data() {
return { return {
// taskTipShow: false,
checkShow: true, checkShow: true,
tipText: '请先完成商户初始化设置后,再进行其他操作', tipText: '请先完成商户初始化设置后,再进行其他操作',
projectName: 'haoban-manage-web', // 当前项目名 projectName: 'haoban-manage-web', // 当前项目名
...@@ -261,7 +273,6 @@ export default { ...@@ -261,7 +273,6 @@ export default {
if (cDay % 10 !== 0 || cDay === 10) { if (cDay % 10 !== 0 || cDay === 10) {
cDayStr = numString.charAt((cDay - 1) % 10); cDayStr = numString.charAt((cDay - 1) % 10);
} }
console.log();
return cDay === 1 ? monString.charAt(cMonth - 1) + '月初一' : monString.charAt(cMonth - 1) + '月' + (cDay < 11 ? '初' : cDay < 20 ? '十' : cDay < 30 ? '廿' : '三十') + cDayStr; // tgString.charAt((cYear - 4) % 10) + dzString.charAt((cYear - 4) % 12) + '年 ' + run + monString.charAt(cMonth - 1) + '月' + return cDay === 1 ? monString.charAt(cMonth - 1) + '月初一' : monString.charAt(cMonth - 1) + '月' + (cDay < 11 ? '初' : cDay < 20 ? '十' : cDay < 30 ? '廿' : '三十') + cDayStr; // tgString.charAt((cYear - 4) % 10) + dzString.charAt((cYear - 4) % 12) + '年 ' + run + monString.charAt(cMonth - 1) + '月' +
} }
}, },
...@@ -447,6 +458,16 @@ export default { ...@@ -447,6 +458,16 @@ export default {
window.open(''); window.open('');
}); });
}, },
// toTipTask() {
// if (!sessionStorage.getItem('taskTip')) {
// this.taskTipShow = true;
// }
// },
// taskTipClose() {
// this.taskTipShow = false;
// sessionStorage.setItem('taskTip', true);
// },
/** /**
* 获取帮助中心 * 获取帮助中心
*/ */
...@@ -629,7 +650,7 @@ export default { ...@@ -629,7 +650,7 @@ export default {
message: error.message message: error.message
}); });
}); });
}, }
}, },
async mounted() { async mounted() {
const that = this; const that = this;
...@@ -637,6 +658,7 @@ export default { ...@@ -637,6 +658,7 @@ export default {
that.wxEnterpriseId = await that.toLogin(); that.wxEnterpriseId = await that.toLogin();
that.getAppData(1); that.getAppData(1);
that.getHelpData(); that.getHelpData();
// that.toTipTask();
/* that.getAppData(2); */ /* that.getAppData(2); */
// that.getTipData(); // that.getTipData();
that.getCompanyData(); that.getCompanyData();
...@@ -929,7 +951,7 @@ export default { ...@@ -929,7 +951,7 @@ export default {
font-size: 14px; font-size: 14px;
color: #909399; color: #909399;
&:hover { &:hover {
color:#2f54ed; color: #2f54ed;
-webkit-transform: translateX(0px); -webkit-transform: translateX(0px);
-moz-transform: translateX(0px); -moz-transform: translateX(0px);
transform: translateX(0px); transform: translateX(0px);
...@@ -1021,4 +1043,48 @@ export default { ...@@ -1021,4 +1043,48 @@ export default {
-webkit-box-shadow: none; -webkit-box-shadow: none;
box-shadow: none; box-shadow: none;
} }
@keyframes show {
0% {
top: 0;
opacity: 0;
}
100% {
top: 56px;
opacity: 1;
}
}
.task-tip-wrap {
position: fixed;
top: 56px;
left: 50%;
transform: translateX(-50%);
animation: 0.3s show;
display: flex;
padding: 10px 17px;
background: #f0f5ff;
border-radius: 2px;
border: 1px solid #85a5ff;
.el-icon-warning {
margin-top: 5px;
margin-right: 9px;
font-size: 12px;
color: #2f54eb;
}
.el-icon-close {
font-size: 12px;
color: #909399;
cursor: pointer;
}
.task-tip-content {
font-size: 13px;
font-weight: 400;
color: #303133;
line-height: 22px;
p {
cursor: default;
user-select: none;
}
}
}
</style> </style>
<style></style>
<!--
* @Descripttion: 当前组件信息
* @version: 1.0.0
* @Author: 无尘
* @Date: 2018-10-10 14:44:45
* @LastEditors : 无尘
* @LastEditTime : 2020-04-04 09:45:36
-->
<template>
<div class="login-wrap">
<section>
<div class="login-body-head border-box flex">
<img class="login-body-logo" src="../../assets/logo-text.png" alt="logo" />
</div>
<div class="login-body">
<i class="iconfont iconpre" @click="arrowClick('left')"></i>
<i class="iconfont iconnext" @click="arrowClick('right')"></i>
<el-carousel arrow="never" ref="cardShow" height="262px" indicator-position="none" :autoplay="false" @change="changeEnterprise">
<el-carousel-item v-for="item in enterpriseList" :key="item.wxEnterpriseId">
<div class="info flex">
<p class="info_img"><img :src="item.corpSquareLogoUrl" alt="" /></p>
<p class="info_name">{{ item.corpName }}</p>
</div>
</el-carousel-item>
</el-carousel>
<el-button type="primary" @click="toIndex">登录</el-button>
</div>
</section>
</div>
</template>
<script>
import { _debounce } from '@/common/js/public';
import errMsg from '@/common/js/error';
import { getRequest } from '@/api/api';
export default {
name: 'login',
data() {
return {
active: 0,
enterpriseId: '', // 当前选择的 企业 id
// 企业列表
enterpriseList: [
/*{
enterpriseId : '1231',
logoUrl: require("../../assets/logo.png"),
enterpriseName: '达摩网络'
},*/
],
// 登录
numberCode: ''
};
},
computed: {},
methods: {
/**
* 处理路由跳转
*/
toRouterView(val) {
const that = this;
// 模拟检查数据,有两个参数
that.$router.push({
path: val.path
});
},
/**
* 登录
*/
toIndex: _debounce(function() {
const that = this;
that.toLogin();
}, 500),
/**
* 登录 --- api
*/
toLogin() {
const that = this;
const href = `${window.location.origin}/haoban-manage3-web/gic-login?wxEnterpriseId=${that.enterpriseList[that.active].wxEnterpriseId}&random=${that.$route.query.random}`;
window.location.href = href;
},
changeEnterprise(val) {
this.active = val;
},
getList() {
getRequest(`/haoban-manage3-web/login-wx-enterprise-list?random=${this.$route.query.random}`, {})
.then(res => {
let resData = res.data;
if (resData.errorCode == 1) {
this.enterpriseList = resData.result;
if (resData.result.length === 1) {
this.toLogin();
return;
}
return;
}
errMsg.errorMsg(resData);
})
.catch(function(error) {
this.$message.error({
duration: 1000,
message: error.message
});
});
},
arrowClick(val) {
if (val === 'right') {
this.$refs.cardShow.next();
} else {
this.$refs.cardShow.prev();
}
}
},
mounted() {
const that = this;
if (this.$route.query.random) {
that.getList();
}
if (!!localStorage.getItem('userInfos')) {
localStorage.removeItem('userInfos');
}
},
components: {}
};
</script>
<style lang="scss" scoped>
.login-wrap {
width: 100%;
min-height: 100vh;
padding-top: 178px;
box-sizing: border-box;
background: url('../../assets/BG.png') no-repeat;
background-size: cover;
.login-body-head {
justify-content: center;
align-items: center;
margin-bottom: 34px;
.login-body-logo {
height: 32px;
margin-right: 13px;
}
.login-body-title {
font-size: 16px;
font-weight: 600;
color: #2da8ff;
line-height: 22px;
}
}
.login-body {
position: relative;
width: 430px;
height: 283px;
background: #ffffff;
box-shadow: 0px 6px 8px 0px rgba(215, 218, 231, 0.49);
border-radius: 8px;
margin: 0 auto;
.iconfont {
position: absolute;
top: 116px;
z-index: 4;
font-size: 30px;
color: #ebecf0;
}
.iconpre {
left: 26px;
}
.iconnext {
right: 30px;
}
.info {
padding-top: 70px;
flex-direction: column;
align-items: center;
.info_img {
display: flex;
justify-content: center;
align-items: center;
width: 46px;
height: 46px;
border-radius: 100%;
overflow: hidden;
margin-bottom: 17px;
img {
width: 100%;
}
}
.info_name {
font-size: 14px;
font-weight: 400;
color: #303133;
line-height: 20px;
}
}
}
.el-button {
position: relative;
top: -56px;
z-index: 3;
display: block;
margin: 0 auto;
width: 281px;
height: 40px;
font-size: 16px;
background: #2f54eb;
border-radius: 2px;
}
}
</style>
<!--
* @Descripttion: 当前组件信息
* @version: 1.0.0
* @Author: 无尘
* @Date: 2019-03-20 14:36:37
* @LastEditors: 无尘
* @LastEditTime: 2020-05-14 16:14:12
-->
<template>
<div class="my-customer-wrap common-set-wrap salesleads-wrap">
<vue-office-header :projectName="projectName" @collapseTag="collapseTag" @toRouterView="toRouterView"> </vue-office-header>
<div class="enterprise-wrap__body">
<div id="content" class="content">
<nav-crumb :navpath="navpath" @selectBrandId="selectBrandId"> </nav-crumb>
<div class="content-body">
<div class="right-content border-box">
<div class="right-box" style="min-height: calc(100vh - 86px);">
<div class="apps-content flex" style="min-height: calc(100vh - 86px);">
<div class="apps-content-left w-157" style="min-height: calc(100vh - 86px);">
<common-detail-left :tabListData="tabListData" :activeSelTab="activeSelTab" @setSelectTab="setSelectTab"></common-detail-left>
</div>
<div class="apps-content-right border-box">
<transition name="fade" mode="out-in">
<router-view :brandId="activeBrand" :activeGroupId="activeGroup" :tabType="activeTab" @showTab="showTab"></router-view>
</transition>
</div>
</div>
</div>
</div>
<!-- <vue-gic-footer></vue-gic-footer> -->
<!-- 公共组件 -->
</div>
</div>
</div>
</div>
</template>
<script>
import navCrumb from '@/components/nav/nav-app.vue';
import commonDetailLeft from '@/components/app/app-detail-left.vue';
import vueOfficeHeader from '@/components/vue-office-header';
export default {
name: 'salesleads',
data() {
return {
bgHeight: window.screen.availHeight - 288 + 'px',
activeSelTab: '1',
activeTab: '1',
activeBrand: '',
navpath: [
{
name: '首页',
path: '/index'
},
{
name: '销售线索',
path: ''
}
],
tabListData: [
{
tabId: '0',
tabName: '销售线索记录',
icon: 'iconjichushezhi',
children: [
{
tabId: '1',
tabName: '门店视图'
},
{
tabId: '2',
tabName: '计划视图'
}
]
},
{
tabId: '3',
tabName: '销售线索设置',
icon: 'iconribaoshezhi'
}
]
};
},
computed: {},
methods: {
// 处理路由跳转
toRouterView(val) {
let that = this;
// 模拟检查数据
// //有两个参数
//{
// name:,
// path:
//}
that.$router.push({
path: val.path
});
},
/**
* 路由跳转
*/
changeRoute(path) {
this.$router.push(path);
},
/**
* 选择后返回tabId,做各路由判断
*/
setSelectTab(item) {
let that = this;
that.activeTab = item.tabId;
switch (item.tabId) {
case '0':
that.changeRoute(`/storeList`);
break;
case '1':
that.changeRoute(`/storeList`);
break;
case '2':
that.changeRoute(`/salesTaskList`);
break;
case '3':
that.changeRoute(`/salesleadsSet`);
break;
}
},
selectBrandId(val) {
this.activeBrand = val;
localStorage.setItem('userInfoBrandId', val);
},
/**
* 各路由返回 tabId
*/
showTab(id) {
let that = this;
that.activeTab = id;
that.activeSelTab = id;
that.tabListData.forEach(ele => {
if (ele.tabId == id) {
ele.onlyIconActive = false;
}
if (!!ele.children) {
ele.children.forEach(el => {
if (el.tabId == id) {
ele.onlyIconActive = true;
}
if (!!el.children) {
el.children.forEach(item => {
if (item.tabId == id) {
ele.onlyIconActive = true;
}
});
}
});
}
});
}
},
watch: {
$route: {
handler: function(val, oldVal) {},
// 深度观察监听
deep: true
},
activeGroup: function(newData, oldData) {
const that = this;
that.activeGroup = newData;
}
},
mounted() {
// const that = this;
document.documentElement.style.backgroundColor = '#f0f2f5';
},
destroyed() {
document.documentElement.style.backgroundColor = '#fff';
},
components: {
navCrumb,
commonDetailLeft,
vueOfficeHeader
}
};
</script>
<style type="text/scss" lang="scss" scoped>
.bg-82C5FF {
background: #82c5ff;
}
.color-508CEE {
color: #508cee;
}
.color-FF585C {
color: #ff585c;
}
.line-h-18 {
line-height: 18px;
}
.tooltip-text {
width: 100%;
white-space: pre-wrap;
word-break: break-all;
}
.my-customer-wrap {
height: 100%;
}
.content {
padding-top: 46px;
min-width: 1400px;
box-sizing: border-box;
}
.right-content {
/*width: 100%;*/
padding: 0 20px 20px;
min-height: calc(100% - 157px);
.right-box {
background: #fff;
min-height: 500px;
padding: 0px;
.apps-content {
.apps-content-left {
min-width: 157px;
height: 100%;
background: #fff;
overflow-x: hidden;
overflow-y: auto;
.apps-content-left__title {
height: 55px;
line-height: 55px;
padding: 0 0 0 18px;
}
.tab-left-list-cell {
position: relative;
text-align: left;
margin-top: 15px;
height: 30px;
line-height: 30px;
white-space: nowrap;
overflow: hidden;
cursor: pointer;
&:hover {
background: rgba(24, 144, 255, 0.06);
i {
color: #2f54eb;
}
}
&.active-tab {
background: rgba(24, 144, 255, 0.06);
&::before {
content: ' ';
position: absolute;
left: 0;
top: 0;
bottom: 0;
width: 2px;
background: #2f54eb;
z-index: 1;
}
i {
color: #2f54eb;
}
}
.child-tab-left-list {
li {
position: relative;
text-align: left;
height: 30px;
line-height: 30px;
white-space: nowrap;
overflow: hidden;
cursor: pointer;
&:hover {
background: rgba(24, 144, 255, 0.06);
i {
color: #2f54eb;
}
}
&.active-tab {
background: rgba(24, 144, 255, 0.06);
&::before {
content: ' ';
position: absolute;
left: 0;
top: 0;
bottom: 0;
width: 2px;
background: #2f54eb;
z-index: 1;
}
i {
color: #2f54eb;
}
}
}
}
}
}
.apps-content-right {
width: calc(100% - 157px);
padding-left: 10px;
background: #f0f2f5;
.daily-set-wrap {
height: 100%;
background: #fff;
}
.app-detail-wrap {
height: 100%;
background: #fff;
}
.common-set-wrap {
height: 100%;
background: #fff;
}
}
}
}
}
</style>
<style lang="scss">
.salesleads-popover {
padding: 14px !important;
.m-b-10 {
margin-bottom: 10px;
}
p {
font-size: 14px;
font-weight: 400;
color: #303133;
line-height: 20px;
}
.temp {
color: #909399;
margin-bottom: 4px;
}
.m-l--6 {
margin-left: -6px;
}
.m-b-14 {
margin-bottom: 14px;
}
}
</style>
<template>
<div class="my-customer-wrap common-set-wrap">
<div class="right-content">
<div class="flex">
<p class="m-r-11 font-14 color-606266">电话方式选择:</p>
<div>
<el-checkbox-group v-model="callType">
<el-checkbox label="1">
<div class="m-b-21" style="display:inline-block;vertical-align:top;">
<p class="l-h-1 m-b-5">公司电话</p>
<p class="tip">1.对接第三方呼叫中心,外呼显示第三方号码,可监控通话状态。费用结算及通话记录存储于GIC计费中心</p>
<p class="tip">2.若任务创建时无双向呼叫权限,此项设置勾选也不生效</p>
</div>
</el-checkbox>
<el-checkbox label="2" class="m-b-24">
<div class="m-b-21" style="display:inline-block;vertical-align:top;">
<p class="l-h-1 m-b-5">私人电话</p>
<p class="tip">导购手机呼叫,无法监控通话状态。呼叫结算费用由导购手机自费</p>
</div>
</el-checkbox>
</el-checkbox-group>
<p><el-button type="primary" @click="submitForm" :loading="loading">保存</el-button><span class="font-14 color-909399 m-l-12">保存后立即生效,历史数据不变,后续下达的任务按新设置运行</span></p>
</div>
</div>
</div>
<!-- <vue-gic-footer></vue-gic-footer> -->
</div>
</template>
<script>
import navCrumb from '@/components/nav/nav.vue';
import { postRequest } from '@/api/api';
import errMsg from '@/common/js/error';
export default {
name: 'authMerchant',
props: {
brandId: {
type: String,
default() {
return '';
}
}
},
data() {
return {
bgHeight: window.screen.availHeight - 104 + 'px',
callType: [], // 0 : 未设置, 1 : 公司电话(双向呼叫), 2 : 私人电话, 多个请用逗号拼接
loading: false
};
},
computed: {},
methods: {
/**
* 路由跳转
* @param {path} path
*/
changeRoute(path) {
this.$router.push(path);
},
submitForm() {
const that = this;
if (that.loading === true) {
return false;
}
that.loading = true;
that
.$confirm('是否确认保存该设置?', '', {
confirmButtonText: '确定',
cancelButtonText: '取消',
type: 'warning'
})
.then(() => {
let para = {
enterpriseId: localStorage.getItem('userInfoBrandId'),
qywxEnterpriseId: JSON.parse(localStorage.getItem('userInfos')).wxEnterpriseId
};
if (that.callType.length) {
para.callType = that.callType.join(',');
} else {
para.callType = '0';
}
postRequest('/haoban-task-manage-web/market/clue/web/setting-update', para)
.then(res => {
let resData = res.data;
if (resData.errorCode == 1) {
that.$message.success({
duration: 1000,
message: '保存成功!'
});
that.loading = false;
that.getDeatil();
return false;
}
that.loading = false;
errMsg.errorMsg(resData);
})
.catch(function(error) {
that.loading = false;
that.$message.error({
duration: 1000,
message: error.message
});
});
})
.catch(() => {
that.loading = false;
});
},
getDeatil() {
const that = this;
let para = {
enterpriseId: localStorage.getItem('userInfoBrandId'),
qywxEnterpriseId: JSON.parse(localStorage.getItem('userInfos')).wxEnterpriseId
};
postRequest('/haoban-task-manage-web/market/clue/web/get-setting', para)
.then(res => {
let resData = res.data;
if (resData.errorCode == 1) {
if (resData.result && resData.result.callType !== '0') {
that.callType = resData.result.callType.split(',');
} else {
that.callType = [];
}
return;
}
errMsg.errorMsg(resData);
})
.catch(function(error) {
that.$message.error({
duration: 1000,
message: error.message
});
});
}
},
watch: {
brandId(newV, oldV) {
this.getDeatil();
}
},
mounted() {
this.$emit('showTab', 3);
this.getDeatil();
document.documentElement.style.backgroundColor = '#f0f2f5';
},
destroyed() {
document.documentElement.style.backgroundColor = '#fff';
},
components: {
navCrumb
}
};
</script>
<style type="text/scss" lang="scss" scoped>
.right-content {
padding: 33px 0 0 50px;
}
.el-checkbox {
display: flex;
min-height: 22px;
>>> .el-checkbox__label {
padding-top: 1px;
}
}
.el-checkbox + .el-checkbox {
margin-left: 0;
}
.m-l-12 {
margin-left: 12px;
}
.m-r-11 {
margin-right: 11px;
}
.m-b-5 {
margin-bottom: 5px;
}
.m-b-21 {
margin-bottom: 21px;
}
.m-b-24 {
margin-bottom: 24px;
}
.font-14 {
font-size: 14px;
}
.l-h-1 {
line-height: 1;
}
.tip {
font-size: 12px;
color: #909399;
line-height: 22px;
}
</style>
<!--
* @Descripttion: 当前组件信息
* @version: 1.0.0
* @Author: 无尘
* @Date: 2019-03-20 14:36:37
* @LastEditors: 无尘
* @LastEditTime: 2020-08-26 10:05:42
-->
<template>
<div class="my-customer-wrap common-set-wrap">
<!-- <nav-crumb :navpath="navpath"> </nav-crumb> -->
<div class="right-content">
<div class="right-box" :style="{ 'min-height': bgHeight }">
<div class="apps-content flex" :style="{ 'min-height': bgHeight }">
<div class="apps-content-right">
<div class="overstore-body">
<div class="overstore-tip">
<div role="alert" class="el-alert el-alert--info flex flex-align-start ">
<i class="el-alert__icon el-icon-warning font-12 color-2f54eb"></i>
<div class="el-alert__content">
<span class="el-alert__title color-303133 font-13">筛选时间:{{ dateStart | timeStampToYmd }}{{ dateEnd | timeStampToYmd }}</span>
</div>
</div>
<el-popover placement="bottom-start" width="550" trigger="click" popper-class="salesleads-popover">
<div class="tips-content">
<p>展示所选期间内的导购线索,以线索为主体,不以时间为主体。</p>
<p class="temp">如 所选时间为 20210401~20210403,则显示期间相关的导购线索数据。</p>
<p class="m-b-14">导购线索:计划中触达到门店导购端的都归入导购线索,包括话务、企微任务。</p>
<p class="m-l--6">【 任务完成率 】:</p>
<p class="m-b-10">导购任务完成数 / 任务总数,任务完成数不含放弃数。</p>
<p class="m-l--6">【 触达转化收益 】:</p>
<p>
通过导购线索触达,且触达的会员在触达效益计算有效期内前来消费的人数。<br />
多个导购线索任务触达的,转化只记在首个触达任务上;收益只计销售单,<br />
不看退货单和换货单;金额是应付还是实付看ERP传入的值。数据更新频率:1天1次
</p>
</div>
<div slot="reference" role="tips" class="tips flex flex-align-center">
<i class="el-icon-warning-outline font-14 color-2f54eb"></i>
<div class="el-alert__content">查看指标说明</div>
</div>
</el-popover>
</div>
<div class="table-condition-search m-t-20">
<el-select class="w-103" v-model="pageParams.finishOverStatus" slot="prepend" placeholder="所有完成情况" @change="reFetch">
<el-option :label="item.text" :value="item.id" v-for="item in filterOpts" :key="'filter' + item.id"></el-option>
</el-select>
</div>
<div class="m-t-20">
<el-table v-loading="loading" class="select-table" ref="multipleTable" :data="tableData" tooltip-effect="dark" :style="{ width: '100%', minHeight: tableH }">
<el-table-column label="任务标题" show-overflow-tooltip min-width="170">
<template slot-scope="scope">{{ scope.row.taskTitle || '--' }}</template>
</el-table-column>
<el-table-column prop="" label="指派对象" min-width="200">
<template slot-scope="scope">
<div class="flex flex-align-center personal-info">
<el-image :src="scope.row.executeClerkClerkImgUrl || headDefault" fit="cover"></el-image>
<div>
<p class="color-303133 line-20">{{ scope.row.executeClerkName || '--' }}</p>
<p class="color-909399 line-20">{{ scope.row.executeClerkPhoneNum || '--' }}</p>
</div>
</div>
</template>
</el-table-column>
<el-table-column prop="" label="会员" min-width="200">
<template slot-scope="scope">
<div class="flex flex-align-center personal-info">
<el-image :src="scope.row.memberImgUrl || headDefault" fit="cover"></el-image>
<div>
<p class="color-303133 line-20">{{ scope.row.memberName || '--' }}</p>
<p class="color-909399 line-20">{{ scope.row.memberCardNum || '--' }}</p>
</div>
</div>
</template>
</el-table-column>
<el-table-column prop="" label="创建时间" min-width="122">
<template slot-scope="scope">
<div class="color-606266 line-20">{{ scope.row.createTime | timeStampToYmd }}</div>
<div class="color-606266 line-20">{{ scope.row.createTime | timeStampToHms }}</div>
</template>
</el-table-column>
<el-table-column prop="" label="逾期期限" min-width="122">
<template slot-scope="scope">
<div class="color-606266 line-20">{{ scope.row.overdueTime | timeStampToYmd }}</div>
<div class="color-606266 line-20">{{ scope.row.overdueTime | timeStampToHms }}</div>
</template>
</el-table-column>
<el-table-column prop="" label="逾期情况" min-width="122">
<template slot-scope="scope"><span class="point" :style="'background:' + overdueStyle[scope.row.overdueStatus] + ';'"></span>{{ scope.row.overdueStatus === 1 ? '已逾期' : scope.row.overdueStatus === 2 ? '未逾期' : '' }}</template>
</el-table-column>
<el-table-column prop="" label="完成状态" min-width="122">
<template slot-scope="scope"><span class="point" :style="'background:' + taskStyle[scope.row.taskStatus] + ';'"></span>{{ scope.row.taskStatus === 1 ? '未完成' : scope.row.taskStatus === 2 ? '已完成' : '' }}</template>
</el-table-column>
<el-table-column prop="" label="完成详情">
<template slot-scope="scope">
<el-button type="text" @click="showDetail(scope.row)">查看</el-button>
</template>
</el-table-column>
<!-- <el-table-column prop="" label="操作" width="150">
<template slot-scope="scope">
<el-button type="text" @click="showDetail(scope.row)">预览</el-button>
<el-button type="text" @click="showDetail(scope.row)">删除</el-button>
</template>
</el-table-column> -->
</el-table>
<div class="block common-wrap__page text-right m-t-24" v-if="tableData.length != 0">
<dm-pagination background @size-change="handleSizeChange" @current-change="handleCurrentChange" :current-page="pageParams.pageNum" :page-sizes="[20, 40, 60, 80]" :page-size="pageParams.pageSize" layout="total, sizes, prev, pager, next, jumper" :total="total"> </dm-pagination>
</div>
</div>
<salesleads-taskinfo :item="confirmDetail" v-if="confirmDetailShow" @close="close"></salesleads-taskinfo>
</div>
</div>
</div>
</div>
</div>
<!-- <vue-gic-footer></vue-gic-footer> -->
</div>
</template>
<script>
import salesleadsTaskinfo from '@/components/review/salesleads-task-info.vue';
import headDefault from '@/assets/head_default.jpg';
import navCrumb from '@/components/nav/nav.vue';
import { getRequest } from '@/api/api';
import errMsg from '@/common/js/error';
import { _debounce } from '@/common/js/public';
export default {
name: 'storeDetail',
props: {
brandId: {
type: String,
default() {
return '';
}
}
},
data() {
return {
headDefault,
bgHeight: window.screen.availHeight - 298 + 'px',
loading: false,
dateStart: new Date().getTime() - 3600 * 1000 * 24 * 365,
dateEnd: new Date(),
// 面包屑参数
navpath: [
{
name: '首页',
path: '/index'
},
{
name: '销售线索',
path: ''
}
],
pageParams: {
storeId: this.$route.params.id,
finishOverStatus: '',
pageNum: 1,
pageSize: 20
},
filterOpts: [],
// 分页参数
total: 0,
tableData: [
// {
// taskId: '', // 任务id
// taskTitle: '', // 任务标题
// executeClerkId: '', // 指派导购id
// executeClerkName: '', // 指派导购名字
// executeClerkPhoneNum: '', // 指派导购手机号
// executeClerkClerkImgUrl: null, // 指派导购头像
// memberId: '', // 会员id
// memberName: '', // 会员名字
// memberImgUrl: '', // 会员头像
// memberCardNum: '', // 会员卡号
// createTime: null, // 创建时间
// overdueTime: null, // 逾期时间
// overdueStatus: null, // 逾期状态(1:逾期,2:未逾期)
// taskStatus: null // 完成状态(1:未完成,2:完成)
// }
],
overdueStyle: ['none', '#F5222D', '#2F54EB'],
taskStyle: ['none', '#F5222D', '#33AF4A'],
confirmDetailShow: false,
confirmDetail: {},
pickerOptions: {
disabledDate: time => {
const end = new Date();
return time.getTime() < end.getTime() - 3600 * 1000 * 24 * 365 || time.getTime() > end.getTime();
}
}
};
},
computed: {},
methods: {
/**
* 路由跳转
*/
changeRoute(path) {
this.$router.push(path);
},
/**
* 筛选
*/
reFetch: _debounce(function(e, value) {
const that = this;
that.pageParams.pageNum = 1;
that.getTableList();
}, 500),
/**
* 分页---页码变化
* @param {Number} val
*/
handleSizeChange(val) {
const that = this;
that.pageParams.pageNum = 1;
that.pageParams.pageSize = val;
that.getTableList();
},
/**
* 分页---当前页变化
* @param {Number} val
*/
handleCurrentChange(val) {
const that = this;
that.pageParams.pageNum = val;
that.getTableList();
},
/**
* 获取列表数据
*/
getTableList(val) {
const that = this;
that.loading = true;
let para = {
...that.pageParams,
enterpriseId: localStorage.getItem('userInfoBrandId'),
storeId: that.$route.params.id
};
if (this.$route.query.ecmPlanId) {
para.ecmPlanId = this.$route.query.ecmPlanId;
}
getRequest('/haoban-task-manage-web/market/clue/web/task-info-list', para)
.then(res => {
that.loading = false;
let resData = res.data;
if (resData.errorCode == 1) {
that.tableData = resData.result.list || [];
that.total = resData.result.pageInfo.total || 0;
} else {
errMsg.errorMsg(resData);
}
})
.catch(function(error) {
that.loading = false;
that.$message.error({
duration: 1000,
message: error.message
});
});
},
getFilterOpts() {
const that = this;
getRequest('/haoban-task-manage-web/market/clue/web/query', {})
.then(res => {
let resData = res.data;
if (resData.errorCode == 1 && resData.result) {
that.filterOpts = resData.result;
that.pageParams.finishOverStatus = '0';
} else {
errMsg.errorMsg(resData);
}
})
.catch(function(error) {
that.$message.error({
duration: 1000,
message: error.message
});
});
},
showDetail(item) {
const that = this;
that.loading = true;
const para = {
enterpriseId: localStorage.getItem('userInfoBrandId'),
taskId: item.taskId
};
getRequest('/haoban-task-manage-web/market/clue/web/task-finish-info', para)
.then(res => {
let resData = res.data;
if (resData.errorCode == 1 && resData.result) {
that.confirmDetail = { ...resData.result };
if (resData.result.remarkImgUrl) {
that.confirmDetail.remarkImgUrl = resData.result.remarkImgUrl.split(',');
} else {
that.confirmDetail.remarkImgUrl = [];
}
this.confirmDetailShow = true;
} else {
errMsg.errorMsg(resData);
}
that.loading = false;
})
.catch(function(error) {
that.loading = false;
that.$message.error({
duration: 1000,
message: error.message
});
});
},
close() {
this.confirmDetailShow = false;
this.confirmDetail = {};
}
},
watch: {
brandId(newV) {
this.getTableList();
}
},
mounted() {
const that = this;
that.getFilterOpts();
that.getTableList();
if (that.$route.query.tab) {
that.$emit('showTab', 2);
} else {
that.$emit('showTab', 1);
}
document.documentElement.style.backgroundColor = '#f0f2f5';
},
destroyed() {
document.documentElement.style.backgroundColor = '#fff';
},
components: {
navCrumb,
salesleadsTaskinfo
}
};
</script>
<style type="text/scss" lang="scss" scoped>
.bg-82C5FF {
background: #82c5ff;
}
.color-508CEE {
color: #508cee;
}
.color-FF585C {
color: #ff585c;
}
.line-h-18 {
line-height: 18px;
}
.tooltip-text {
width: 100%;
white-space: pre-wrap;
word-break: break-all;
}
.w-260 {
width: 260px;
}
.el-alert--info {
background: rgba(240, 245, 255, 1);
border-radius: 2px;
border: 1px solid rgba(133, 165, 255, 1);
-webkit-box-align: flex-start;
-webkit-align-items: flex-start;
-ms-flex-align: flex-start;
align-items: flex-start;
.el-alert__icon {
font-size: 12px;
}
}
.my-customer-wrap {
height: 100%;
}
.right-content {
/*width: 100%;*/
padding: 0;
min-height: calc(100% - 160px);
.right-box {
background: #fff;
min-height: 500px;
padding: 0px;
.apps-content {
.apps-content-right {
width: 100%;
padding: 20px;
background: #fff;
.overstore-body {
background: #fff;
.overstore-tip {
display: flex;
justify-content: flex-start;
align-items: center;
.el-alert--info {
align-items: center;
width: 291px;
height: 32px;
padding: 0 0 0 17px;
margin-right: 17px;
.el-alert__content {
padding-left: 0;
}
}
.tips {
cursor: pointer;
.el-alert__content {
font-size: 13px;
font-weight: 400;
color: #2f54eb;
line-height: 1;
}
}
}
}
.daily-set-wrap {
height: 100%;
background: #fff;
}
.app-detail-wrap {
height: 100%;
background: #fff;
}
.common-set-wrap {
height: 100%;
background: #fff;
}
}
}
}
}
.personal-info {
.el-image {
width: 40px;
height: 40px;
margin-right: 10px;
}
}
.point {
display: inline-block;
width: 6px;
height: 6px;
vertical-align: top;
margin-top: 8px;
border-radius: 100%;
margin-right: 5px;
}
</style>
<style lang="sass"></style>
<!--
* @Descripttion: 当前组件信息
* @version: 1.0.0
* @Author: 无尘
* @Date: 2019-03-20 14:36:37
* @LastEditors: 无尘
* @LastEditTime: 2020-08-26 10:05:42
-->
<template>
<div class="my-customer-wrap common-set-wrap">
<!-- <nav-crumb :navpath="navpath"> </nav-crumb> -->
<div class="right-content">
<div class="right-box" :style="{ 'min-height': bgHeight }">
<div class="apps-content flex" :style="{ 'min-height': bgHeight }">
<div class="apps-content-right">
<div class="overstore-body">
<div class="overstore-tip">
<div role="alert" class="el-alert el-alert--info flex flex-align-start ">
<i class="el-alert__icon el-icon-warning font-12 color-2f54eb"></i>
<div class="el-alert__content">
<span class="el-alert__title color-303133 font-13">仅展示近一年数据,数据截取时间:{{ dateStart | timeStampToYmd }}{{ dateEnd | timeStampToYmd }}</span>
</div>
</div>
<el-popover placement="bottom-start" width="550" trigger="click" popper-class="salesleads-popover">
<div class="tips-content">
<p>展示所选期间内的导购线索,以线索为主体,不以时间为主体。</p>
<p class="temp">如 所选时间为 20210401~20210403,则显示期间相关的导购线索数据。</p>
<p class="m-b-14">导购线索:计划中触达到门店导购端的都归入导购线索,包括话务、企微任务。</p>
<p class="m-l--6">【 任务完成率 】:</p>
<p class="m-b-10">导购任务完成数 / 任务总数,任务完成数不含放弃数。</p>
<p class="m-l--6">【 触达转化收益 】:</p>
<p>
通过导购线索触达,且触达的会员在触达效益计算有效期内前来消费的人数。<br />
多个导购线索任务触达的,转化只记在首个触达任务上;收益只计销售单,<br />
不看退货单和换货单;金额是应付还是实付看ERP传入的值。数据更新频率:1天1次
</p>
</div>
<div slot="reference" role="tips" class="tips flex flex-align-center">
<i class="el-icon-warning-outline font-14 color-2f54eb"></i>
<div class="el-alert__content">查看指标说明</div>
</div>
</el-popover>
</div>
<div class="table-condition-search m-t-20">
<el-input placeholder="请输入门店名称" prefix-icon="el-icon-search" v-model="pageParams.storeName" class="w-260" @change="reFetch" clearable @clear="clearInput"> </el-input>
<el-date-picker class="m-l-10" prefix-icon="el-icon-time" :picker-options="pickerOptions" v-model="pageParams.date" @change="reFetch" :value-format="'yyyy-MM-dd'" type="daterange" align="right" unlink-panels range-separator="至" start-placeholder="开始时间" end-placeholder="结束时间"> </el-date-picker>
</div>
<div class="m-t-20">
<el-table v-loading="loading" class="select-table" ref="multipleTable" :data="tableData" tooltip-effect="dark" :style="{ width: '100%', minHeight: tableH }">
<el-table-column label="门店名称" show-overflow-tooltip>
<template slot-scope="scope">{{ scope.row.storeName || '--' }}</template>
</el-table-column>
<el-table-column prop="" label="任务总数">
<template slot-scope="scope">{{ scope.row.taskCnt || '--' }}</template>
</el-table-column>
<el-table-column prop="" label="已完成">
<template slot-scope="scope">{{ scope.row.cplTaskCnt || '--' }}</template>
</el-table-column>
<el-table-column prop="" label="完成率">
<template slot-scope="scope">{{ (scope.row.completionRate * 100).toFixed(2) + '%' || '--' }}</template>
</el-table-column>
<el-table-column prop="" label="待完成">
<template slot-scope="scope">{{ scope.row.waitFinishCount || '--' }}</template>
</el-table-column>
<el-table-column prop="" label="逾期中">
<template slot-scope="scope">{{ scope.row.ovincplTaskCnt || '--' }}</template>
</el-table-column>
<el-table-column prop="" label="操作" width="150">
<template slot-scope="scope">
<el-button type="text" @click="showDetail(scope.row)">查看详情</el-button>
<!-- <el-button type="text" @click="showDetail(scope.row)">删除</el-button> -->
</template>
</el-table-column>
</el-table>
<div class="block common-wrap__page text-right m-t-24" v-if="tableData.length != 0">
<dm-pagination background @size-change="handleSizeChange" @current-change="handleCurrentChange" :current-page="pageParams.pageNum" :page-sizes="[20, 40, 60, 80]" :page-size="pageParams.pageSize" layout="total, sizes, prev, pager, next, jumper" :total="total"> </dm-pagination>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
<!-- <vue-gic-footer></vue-gic-footer> -->
</div>
</template>
<script>
import navCrumb from '@/components/nav/nav.vue';
import { getRequest } from '@/api/api';
import errMsg from '@/common/js/error';
import { _debounce } from '@/common/js/public';
export default {
name: 'storeList',
props: {
brandId: {
type: String,
default() {
return '';
}
}
},
data() {
return {
bgHeight: window.screen.availHeight - 298 + 'px',
dateStart: new Date().getTime() - 3600 * 1000 * 24 * 365,
dateEnd: new Date(),
loading: false,
// 面包屑参数
navpath: [
{
name: '首页',
path: '/index'
},
{
name: '销售线索',
path: ''
}
],
pageParams: {
pageNum: 1,
pageSize: 20
},
// 分页参数
total: 0,
tableData: [
// {
// storeId: '', // 门店id
// storeName: '', // 门店名称
// taskCnt: '', // 任务总数
// cplTaskCnt: '', // 任务完成数
// completionRate: '', // 任务完成率
// waitFinishCount: '', // 待完成数
// itincplTaskCnt: '', // 未逾期任务未完成数
// ovincplTaskCnt: '', // 逾期任务未完成数
// }
],
pickerOptions: {
disabledDate: time => {
const end = new Date();
return time.getTime() < end.getTime() - 3600 * 1000 * 24 * 365 || time.getTime() > end.getTime();
}
}
};
},
computed: {},
methods: {
/**
* 路由跳转
*/
changeRoute(path) {
this.$router.push(path);
},
/**
* 筛选
*/
reFetch: _debounce(function(e, value) {
const that = this;
that.pageParams.pageNum = 1;
that.getTableList();
}, 500),
/**
* 分页---页码变化
* @param {Number} val
*/
handleSizeChange(val) {
const that = this;
that.pageParams.pageNum = 1;
that.pageParams.pageSize = val;
that.getTableList();
},
/**
* 分页---当前页变化
* @param {Number} val
*/
handleCurrentChange(val) {
const that = this;
that.pageParams.pageNum = val;
that.getTableList();
},
/**
* 获取列表数据
*/
getTableList(val) {
const that = this;
that.loading = true;
let para = {
...that.pageParams,
enterpriseId: localStorage.getItem('userInfoBrandId'),
qywxEnterpriseId: JSON.parse(localStorage.getItem('userInfos')).wxEnterpriseId
};
if (para.date) {
para.startTime = para.date[0];
para.endTime = para.date[1];
delete para.date;
}
if (that.$route.query.ecmPlanId) {
para.ecmPlanId = that.$route.query.ecmPlanId;
}
getRequest('/haoban-task-manage-web/market/clue/web/store-list', para)
.then(res => {
that.loading = false;
let resData = res.data;
if (resData.errorCode == 1) {
that.tableData = resData.result.list || [];
that.total = resData.result.total;
} else {
errMsg.errorMsg(resData);
}
})
.catch(function(error) {
that.loading = false;
that.$message.error({
duration: 1000,
message: error.message
});
});
},
showDetail(item) {
if (this.$route.query.ecmPlanId) {
this.$router.push(`storeDetail/${item.storeId}?tab=2&ecmPlanId=${this.$route.query.ecmPlanId}`);
} else {
this.$router.push(`storeDetail/${item.storeId}`);
}
}
},
watch: {
brandId(newV) {
this.getTableList();
},
$route(to, from) {
if (!this.$route.query.ecmPlanId) {
this.getTableList();
}
}
},
mounted() {
const that = this;
that.getTableList();
if (this.$route.query.ecmPlanId) {
that.$emit('showTab', 2);
} else {
that.$emit('showTab', 1);
}
document.documentElement.style.backgroundColor = '#f0f2f5';
},
destroyed() {
document.documentElement.style.backgroundColor = '#fff';
},
components: {
navCrumb
}
};
</script>
<style type="text/scss" lang="scss" scoped>
.bg-82C5FF {
background: #82c5ff;
}
.color-508CEE {
color: #508cee;
}
.color-FF585C {
color: #ff585c;
}
.line-h-18 {
line-height: 18px;
}
.tooltip-text {
width: 100%;
white-space: pre-wrap;
word-break: break-all;
}
.w-260 {
width: 260px;
}
.el-alert--info {
background: rgba(240, 245, 255, 1);
border-radius: 2px;
border: 1px solid rgba(133, 165, 255, 1);
-webkit-box-align: flex-start;
-webkit-align-items: flex-start;
-ms-flex-align: flex-start;
align-items: flex-start;
.el-alert__icon {
font-size: 12px;
}
}
.my-customer-wrap {
height: 100%;
}
.right-content {
/*width: 100%;*/
padding: 0;
min-height: calc(100% - 160px);
.right-box {
background: #fff;
min-height: 500px;
padding: 0px;
.apps-content {
.apps-content-right {
width: 100%;
padding: 20px;
background: #fff;
.overstore-body {
background: #fff;
.overstore-tip {
display: flex;
justify-content: flex-start;
align-items: center;
.el-alert--info {
align-items: center;
width: 444px;
height: 32px;
padding: 0 0 0 17px;
margin-right: 17px;
.el-alert__content {
padding-left: 0;
}
}
.tips {
cursor: pointer;
.el-alert__content {
font-size: 13px;
font-weight: 400;
color: #2f54eb;
line-height: 1;
}
}
}
}
.daily-set-wrap {
height: 100%;
background: #fff;
}
.app-detail-wrap {
height: 100%;
background: #fff;
}
.common-set-wrap {
height: 100%;
background: #fff;
}
}
}
}
}
</style>
<!--
* @Descripttion: 当前组件信息
* @version: 1.0.0
* @Author: 无尘
* @Date: 2019-03-20 14:36:37
* @LastEditors: 无尘
* @LastEditTime: 2020-08-26 10:05:42
-->
<template>
<div class="my-customer-wrap common-set-wrap">
<!-- <nav-crumb :navpath="navpath"> </nav-crumb> -->
<div class="right-content">
<div class="right-box" :style="{ 'min-height': bgHeight }">
<div class="apps-content flex" :style="{ 'min-height': bgHeight }">
<div class="apps-content-right">
<div class="overstore-body">
<div class="overstore-tip">
<div role="alert" class="el-alert el-alert--info flex flex-align-start ">
<i class="el-alert__icon el-icon-warning font-12 color-2f54eb"></i>
<div class="el-alert__content">
<span class="el-alert__title color-303133 font-13">仅展示近一年数据,数据截取时间:{{ dateStart | timeStampToYmd }}{{ dateEnd | timeStampToYmd }}</span>
</div>
</div>
<el-popover placement="bottom-start" width="550" trigger="click" popper-class="salesleads-popover">
<div class="tips-content">
<p>展示所选期间内的导购线索,以线索为主体,不以时间为主体。</p>
<p class="temp">如 所选时间为 20210401~20210403,则显示期间相关的导购线索数据。</p>
<p class="m-b-14">导购线索:计划中触达到门店导购端的都归入导购线索,包括话务、企微任务。</p>
<p class="m-l--6">【 任务完成率 】:</p>
<p class="m-b-10">导购任务完成数 / 任务总数,任务完成数不含放弃数。</p>
<p class="m-l--6">【 触达转化收益 】:</p>
<p>
通过导购线索触达,且触达的会员在触达效益计算有效期内前来消费的人数。<br />
多个导购线索任务触达的,转化只记在首个触达任务上;收益只计销售单,<br />
不看退货单和换货单;金额是应付还是实付看ERP传入的值。数据更新频率:1天1次
</p>
</div>
<div slot="reference" role="tips" class="tips flex flex-align-center">
<i class="el-icon-warning-outline font-14 color-2f54eb"></i>
<div class="el-alert__content">查看指标说明</div>
</div>
</el-popover>
</div>
<div class="table-condition-search m-t-20">
<el-input placeholder="请输入计划名称" prefix-icon="el-icon-search" v-model="pageParams.ecmPlanName" class="w-260" @change="reFetch" clearable @clear="clearInput"> </el-input>
<el-date-picker class="m-l-10" prefix-icon="el-icon-time" :picker-options="pickerOptions" v-model="pageParams.date" @change="reFetch" :value-format="'yyyy-MM-dd'" type="daterange" align="right" unlink-panels range-separator="至" start-placeholder="开始时间" end-placeholder="结束时间"> </el-date-picker>
</div>
<div class="m-t-20">
<el-table v-loading="loading" class="select-table" ref="multipleTable" :data="tableData" tooltip-effect="dark" :style="{ width: '100%', minHeight: tableH }">
<el-table-column label="计划名称" show-overflow-tooltip>
<template slot-scope="scope">{{ scope.row.ecmPlanName || '--' }}</template>
</el-table-column>
<el-table-column prop="" label="任务总数">
<template slot-scope="scope">{{ scope.row.taskCnt || '--' }}</template>
</el-table-column>
<el-table-column prop="" label="已完成">
<template slot-scope="scope">{{ scope.row.cplTaskCnt || '--' }}</template>
</el-table-column>
<el-table-column prop="" label="完成率">
<template slot-scope="scope">{{ (scope.row.completionRate * 100).toFixed(2) + '%' || '--' }}</template>
</el-table-column>
<el-table-column prop="" label="待完成">
<template slot-scope="scope">{{ scope.row.waitFinishCount || '--' }}</template>
</el-table-column>
<el-table-column prop="" label="逾期中">
<template slot-scope="scope">{{ scope.row.ovincplTaskCnt || '--' }}</template>
</el-table-column>
<el-table-column prop="" label="操作">
<template slot-scope="scope">
<el-button type="text" @click="showDetail(scope.row)">查看详情</el-button>
</template>
</el-table-column>
</el-table>
<div class="block common-wrap__page text-right m-t-24" v-if="tableData.length != 0">
<dm-pagination background @size-change="handleSizeChange" @current-change="handleCurrentChange" :current-page="pageNum" :page-sizes="[20, 40, 60, 80]" :page-size="pageSize" layout="total, sizes, prev, pager, next, jumper" :total="total"> </dm-pagination>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
<!-- <vue-gic-footer></vue-gic-footer> -->
</div>
</template>
<script>
import navCrumb from '@/components/nav/nav.vue';
import { getRequest } from '@/api/api';
import errMsg from '@/common/js/error';
import { _debounce } from '@/common/js/public';
export default {
name: 'taskList',
props: {
brandId: {
type: String,
default() {
return '';
}
}
},
data() {
return {
bgHeight: window.screen.availHeight - 298 + 'px',
dateStart: new Date().getTime() - 3600 * 1000 * 24 * 365,
dateEnd: new Date(),
loading: false,
// 面包屑参数
navpath: [
{
name: '首页',
path: '/index'
},
{
name: '销售线索',
path: ''
}
],
pageParams: {
pageNum: 1,
pageSize: 20
},
// 分页参数
total: 0,
tableData: [
// {
// enterpriseId: '', // 企业id
// ecmPlanId: '', // 计划id
// ecmPlanName: '', // 计划名称
// taskCnt: '', // 任务总数
// cplTaskCnt: '', // 任务完成数
// completionRate: '', // 任务完成率
// itincplTaskCnt: '', // 未逾期任务未完成数
// ovincplTaskCnt: '', // 逾期任务未完成数
// }
],
pickerOptions: {
disabledDate: time => {
const end = new Date();
return time.getTime() < end.getTime() - 3600 * 1000 * 24 * 365 || time.getTime() > end.getTime();
}
}
};
},
computed: {},
methods: {
/**
* 路由跳转
*/
changeRoute(path) {
this.$router.push(path);
},
/**
* 筛选
*/
reFetch: _debounce(function(e, value) {
const that = this;
that.pageParams.pageNum = 1;
that.getTableList();
}, 500),
/**
* 分页---页码变化
* @param {Number} val
*/
handleSizeChange(val) {
const that = this;
that.pageParams.pageNum = 1;
that.pageParams.pageSize = val;
that.getTableList();
},
/**
* 分页---当前页变化
* @param {Number} val
*/
handleCurrentChange(val) {
const that = this;
that.pageParams.pageNum = val;
that.getTableList();
},
/**
* 获取列表数据
*/
getTableList(val) {
const that = this;
that.loading = true;
let para = {
...that.pageParams,
enterpriseId: localStorage.getItem('userInfoBrandId'),
qywxEnterpriseId: JSON.parse(localStorage.getItem('userInfos')).wxEnterpriseId
};
if (para.date) {
para.startTime = para.date[0];
para.endTime = para.date[1];
delete para.date;
}
getRequest('/haoban-task-manage-web/market/clue/web/plan-list', para)
.then(res => {
that.loading = false;
let resData = res.data;
if (resData.errorCode == 1 && resData.result) {
that.tableData = resData.result.list || [];
that.total = resData.result.total;
} else {
that.tableData = [];
errMsg.errorMsg(resData);
}
})
.catch(function(error) {
that.loading = false;
that.$message.error({
duration: 1000,
message: error.message
});
});
},
showDetail(item) {
this.$router.push(`storeList?ecmPlanId=${item.ecmPlanId}`);
}
},
watch: {
brandId(newV) {
this.getTableList();
}
},
mounted() {
const that = this;
that.getTableList();
that.$emit('showTab', 2);
document.documentElement.style.backgroundColor = '#f0f2f5';
},
destroyed() {
document.documentElement.style.backgroundColor = '#fff';
},
components: {
navCrumb
}
};
</script>
<style type="text/scss" lang="scss" scoped>
.bg-82C5FF {
background: #82c5ff;
}
.color-508CEE {
color: #508cee;
}
.color-FF585C {
color: #ff585c;
}
.line-h-18 {
line-height: 18px;
}
.tooltip-text {
width: 100%;
white-space: pre-wrap;
word-break: break-all;
}
.w-260 {
width: 260px;
}
.el-alert--info {
background: rgba(240, 245, 255, 1);
border-radius: 2px;
border: 1px solid rgba(133, 165, 255, 1);
-webkit-box-align: flex-start;
-webkit-align-items: flex-start;
-ms-flex-align: flex-start;
align-items: flex-start;
.el-alert__icon {
font-size: 12px;
}
}
.my-customer-wrap {
height: 100%;
}
.right-content {
/*width: 100%;*/
padding: 0;
min-height: calc(100% - 160px);
.right-box {
background: #fff;
min-height: 500px;
padding: 0px;
.apps-content {
.apps-content-right {
width: 100%;
padding: 20px;
background: #fff;
.overstore-body {
background: #fff;
.overstore-tip {
display: flex;
justify-content: flex-start;
align-items: center;
.el-alert--info {
align-items: center;
width: 444px;
height: 32px;
padding: 0 0 0 17px;
margin-right: 17px;
.el-alert__content {
padding-left: 0;
}
}
.tips {
cursor: pointer;
.el-alert__content {
font-size: 13px;
font-weight: 400;
color: #2f54eb;
line-height: 1;
}
}
}
}
.daily-set-wrap {
height: 100%;
background: #fff;
}
.app-detail-wrap {
height: 100%;
background: #fff;
}
.common-set-wrap {
height: 100%;
background: #fff;
}
}
}
}
}
</style>
...@@ -580,6 +580,10 @@ input:focus { ...@@ -580,6 +580,10 @@ input:focus {
margin-right: 10px; margin-right: 10px;
} }
.m-r-19 {
margin-right: 19px;
}
.m-r-20 { .m-r-20 {
margin-right: 20px; margin-right: 20px;
} }
...@@ -664,6 +668,10 @@ input:focus { ...@@ -664,6 +668,10 @@ input:focus {
line-height: 18px; line-height: 18px;
} }
.line-22 {
line-height: 22px;
}
.w-80 { .w-80 {
width: 80px; width: 80px;
} }
...@@ -696,6 +704,10 @@ input:focus { ...@@ -696,6 +704,10 @@ input:focus {
width: 500px; width: 500px;
} }
.w-718 {
width: 718px;
}
.el-input.w-500 { .el-input.w-500 {
width: 500px; width: 500px;
} }
......
...@@ -3,7 +3,8 @@ ...@@ -3,7 +3,8 @@
<head> <head>
<meta charset="utf-8"/> <meta charset="utf-8"/>
<title>IconFont Demo</title> <title>IconFont Demo</title>
<link rel="shortcut icon" href="https://img.alicdn.com/tps/i4/TB1_oz6GVXXXXaFXpXXJDFnIXXX-64-64.ico" type="image/x-icon"/> <link rel="shortcut icon" href="https://img.alicdn.com/imgextra/i2/O1CN01ZyAlrn1MwaMhqz36G_!!6000000001499-73-tps-64-64.ico" type="image/x-icon"/>
<link rel="icon" type="image/svg+xml" href="https://img.alicdn.com/imgextra/i4/O1CN01EYTRnJ297D6vehehJ_!!6000000008020-55-tps-64-64.svg"/>
<link rel="stylesheet" href="https://g.alicdn.com/thx/cube/1.3.2/cube.min.css"> <link rel="stylesheet" href="https://g.alicdn.com/thx/cube/1.3.2/cube.min.css">
<link rel="stylesheet" href="demo.css"> <link rel="stylesheet" href="demo.css">
<link rel="stylesheet" href="iconfont.css"> <link rel="stylesheet" href="iconfont.css">
...@@ -31,6 +32,30 @@ ...@@ -31,6 +32,30 @@
<ul class="icon_lists dib-box"> <ul class="icon_lists dib-box">
<li class="dib"> <li class="dib">
<span class="icon iconfont">&#xe641;</span>
<div class="name">pre</div>
<div class="code-name">&amp;#xe641;</div>
</li>
<li class="dib">
<span class="icon iconfont">&#xe640;</span>
<div class="name">next</div>
<div class="code-name">&amp;#xe640;</div>
</li>
<li class="dib">
<span class="icon iconfont">&#xe60d;</span>
<div class="name">欢迎辞</div>
<div class="code-name">&amp;#xe60d;</div>
</li>
<li class="dib">
<span class="icon iconfont">&#xe61d;</span>
<div class="name">new</div>
<div class="code-name">&amp;#xe61d;</div>
</li>
<li class="dib">
<span class="icon iconfont">&#xeae0;</span> <span class="icon iconfont">&#xeae0;</span>
<div class="name">明细备份</div> <div class="name">明细备份</div>
<div class="code-name">&amp;#xeae0;</div> <div class="code-name">&amp;#xeae0;</div>
...@@ -465,6 +490,42 @@ ...@@ -465,6 +490,42 @@
<ul class="icon_lists dib-box"> <ul class="icon_lists dib-box">
<li class="dib"> <li class="dib">
<span class="icon iconfont iconpre"></span>
<div class="name">
pre
</div>
<div class="code-name">.iconpre
</div>
</li>
<li class="dib">
<span class="icon iconfont iconnext"></span>
<div class="name">
next
</div>
<div class="code-name">.iconnext
</div>
</li>
<li class="dib">
<span class="icon iconfont iconhuanyingci"></span>
<div class="name">
欢迎辞
</div>
<div class="code-name">.iconhuanyingci
</div>
</li>
<li class="dib">
<span class="icon iconfont iconnew"></span>
<div class="name">
new
</div>
<div class="code-name">.iconnew
</div>
</li>
<li class="dib">
<span class="icon iconfont iconmingxibeifen"></span> <span class="icon iconfont iconmingxibeifen"></span>
<div class="name"> <div class="name">
明细备份 明细备份
...@@ -1071,6 +1132,38 @@ ...@@ -1071,6 +1132,38 @@
<li class="dib"> <li class="dib">
<svg class="icon svg-icon" aria-hidden="true"> <svg class="icon svg-icon" aria-hidden="true">
<use xlink:href="#iconpre"></use>
</svg>
<div class="name">pre</div>
<div class="code-name">#iconpre</div>
</li>
<li class="dib">
<svg class="icon svg-icon" aria-hidden="true">
<use xlink:href="#iconnext"></use>
</svg>
<div class="name">next</div>
<div class="code-name">#iconnext</div>
</li>
<li class="dib">
<svg class="icon svg-icon" aria-hidden="true">
<use xlink:href="#iconhuanyingci"></use>
</svg>
<div class="name">欢迎辞</div>
<div class="code-name">#iconhuanyingci</div>
</li>
<li class="dib">
<svg class="icon svg-icon" aria-hidden="true">
<use xlink:href="#iconnew"></use>
</svg>
<div class="name">new</div>
<div class="code-name">#iconnew</div>
</li>
<li class="dib">
<svg class="icon svg-icon" aria-hidden="true">
<use xlink:href="#iconmingxibeifen"></use> <use xlink:href="#iconmingxibeifen"></use>
</svg> </svg>
<div class="name">明细备份</div> <div class="name">明细备份</div>
......
@font-face { @font-face {font-family: "iconfont";
font-family: "iconfont"; src: url('iconfont.eot?t=1618969584444'); /* IE9 */
src: url('iconfont.eot?t=1593661133427'); src: url('iconfont.eot?t=1618969584444#iefix') format('embedded-opentype'), /* IE6-IE8 */
/* IE9 */ url('data:application/x-font-woff2;charset=utf-8;base64,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') format('woff2'),
src: url('iconfont.eot?t=1593661133427#iefix') format('embedded-opentype'), url('iconfont.woff?t=1618969584444') format('woff'),
/* IE6-IE8 */ url('iconfont.ttf?t=1618969584444') format('truetype'), /* chrome, firefox, opera, Safari, Android, iOS 4.2+ */
url('data:application/x-font-woff2;charset=utf-8;base64,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') format('woff2'), url('iconfont.svg?t=1618969584444#iconfont') format('svg'); /* iOS 4.1- */
url('iconfont.woff?t=1593661133427') format('woff'),
url('iconfont.ttf?t=1593661133427') format('truetype'),
/* chrome, firefox, opera, Safari, Android, iOS 4.2+ */
url('iconfont.svg?t=1593661133427#iconfont') format('svg');
/* iOS 4.1- */
} }
.iconfont { .iconfont {
...@@ -20,6 +15,22 @@ ...@@ -20,6 +15,22 @@
-moz-osx-font-smoothing: grayscale; -moz-osx-font-smoothing: grayscale;
} }
.iconpre:before {
content: "\e641";
}
.iconnext:before {
content: "\e640";
}
.iconhuanyingci:before {
content: "\e60d";
}
.iconnew:before {
content: "\e61d";
}
.iconmingxibeifen:before { .iconmingxibeifen:before {
content: "\eae0"; content: "\eae0";
} }
......
No preview for this file type
This source diff could not be displayed because it is too large. You can view the blob instead.
...@@ -6,6 +6,34 @@ ...@@ -6,6 +6,34 @@
"description": "", "description": "",
"glyphs": [ "glyphs": [
{ {
"icon_id": "21128396",
"name": "pre",
"font_class": "pre",
"unicode": "e641",
"unicode_decimal": 58945
},
{
"icon_id": "21128379",
"name": "next",
"font_class": "next",
"unicode": "e640",
"unicode_decimal": 58944
},
{
"icon_id": "9702150",
"name": "欢迎辞",
"font_class": "huanyingci",
"unicode": "e60d",
"unicode_decimal": 58893
},
{
"icon_id": "17853642",
"name": "new",
"font_class": "new",
"unicode": "e61d",
"unicode_decimal": 58909
},
{
"icon_id": "15674954", "icon_id": "15674954",
"name": "明细备份", "name": "明细备份",
"font_class": "mingxibeifen", "font_class": "mingxibeifen",
......
...@@ -20,6 +20,18 @@ Created by iconfont ...@@ -20,6 +20,18 @@ Created by iconfont
/> />
<missing-glyph /> <missing-glyph />
<glyph glyph-name="pre" unicode="&#58945;" d="M512 876.544c-272.384 0-492.544-220.16-492.544-492.544s220.672-492.544 492.544-492.544 492.544 220.672 492.544 492.544-220.16 492.544-492.544 492.544zM431.104 587.776c11.776-12.288 12.288-31.232 0.512-43.008L309.248 422.4h480.256c16.896 0 30.208-13.824 30.208-30.72s-13.312-30.72-30.208-30.72H307.2l123.904-123.904c11.776-11.776 11.776-31.232-0.512-43.008-12.288-11.776-31.232-12.288-43.008-0.512l-175.104 174.592c-6.144 6.144-9.216 14.336-8.704 22.528v1.024 0.512c0 2.048 0 3.584 0.512 5.632 0 0.512 0 0.512 0.512 1.024l1.536 4.608c0.512 1.024 1.024 1.536 1.024 2.048l1.536 3.072c1.536 2.048 3.072 3.584 4.608 5.632l174.08 174.08c11.776 11.264 31.232 11.264 43.52-0.512z" horiz-adv-x="1024" />
<glyph glyph-name="next" unicode="&#58944;" d="M19.456 384c0-272.384 220.672-492.544 492.544-492.544s492.544 220.672 492.544 492.544-220.16 492.544-492.544 492.544S19.456 656.384 19.456 384z m616.96 203.776l174.08-174.08c1.536-1.536 3.072-3.584 4.608-5.632l1.536-3.072c0.512-0.512 1.024-1.536 1.024-2.048l1.536-4.608c0-0.512 0-0.512 0.512-1.024 0.512-2.048 0.512-3.584 0.512-5.632V390.144c0.512-8.192-2.56-16.384-8.704-22.528l-175.104-174.592c-11.776-11.776-31.232-11.776-43.008 0.512-12.288 11.776-12.288 31.232-0.512 43.008l123.904 123.904H234.496c-16.896 0-30.208 13.824-30.208 30.72s13.312 30.72 30.208 30.72h480.256l-121.856 121.856c-11.776 11.776-11.776 31.232 0.512 43.008 11.776 12.8 31.232 12.8 43.008 1.024z" horiz-adv-x="1024" />
<glyph glyph-name="huanyingci" unicode="&#58893;" d="M378.119626 229.885971c-1.985498-16.313832-16.682275-27.914666-32.837472-25.918933-16.144962 2.005967-27.628099 16.866496-25.647718 33.190563l31.911247 262.730479c1.985498 16.324067 16.687392 27.9249 32.837472 25.924051 16.144962-2.011084 27.628099-16.866496 25.642601-33.190564l-31.90613-262.735596zM557.899284 229.885971c-1.98038-16.313832-16.687392-27.914666-32.832355-25.918933-16.144962 2.005967-27.622982 16.866496-25.642601 33.190563l31.90613 262.730479c1.98038 16.324067 16.687392 27.9249 32.832355 25.924051 16.155197-2.011084 27.633216-16.866496 25.652836-33.190564l-31.916365-262.735596zM552.239592 367.535209c0-14.998696-12.010215-27.141959-26.834923-27.141959H391.675254c-14.824709 0-26.840041 12.143263-26.840041 27.141959 0 14.983344 12.015332 27.126607 26.840041 27.126607h133.729415c14.814474 0.005117 26.834923-12.143263 26.834923-27.126607zM676.225739 231.866352c-1.903622-17.055835-17.127477-29.347499-34.019559-27.423409-16.871614 1.924091-29.040463 17.311698-27.131725 34.39312L632.974639 399.62556c1.903622 17.060952 17.137711 29.347499 34.019559 27.423409 16.886965-1.918973 29.035346-17.311698 27.141959-34.388003l-17.910418-160.794614zM699.872608 472.208808c-1.596586-15.935155-15.66394-27.546223-31.425107-25.939402-15.761168 1.611938-27.254539 15.827692-25.652836 31.767964l2.123664 21.313397c1.591469 15.930037 15.658823 27.546223 31.41999 25.934285 15.771402-1.60682 27.254539-15.832809 25.66307-31.767964l-2.128781-21.30828zM511.659702 896C229.529682 896 0 667.237908 0 386.054581c0-281.17821 229.529682-509.935185 511.639233-509.935185 1.60682-0.010235 8.648173-0.189339 19.604232-0.48614 42.800782-1.074625 143.022363-3.633256 217.007741-3.633256h0.025586c78.770018 0 92.642916 2.650742 100.226699 7.517258 15.699761 7.522376 18.99016 20.591863 19.670756 26.174797 2.824729 23.293778-17.204236 36.854523-40.405903 52.5594-5.639223 3.822595-14.328334 9.702329-20.837492 14.850296 146.553274 133.171633 220.200913 236.530096 216.383435 413.254748C1023.1403 667.406777 793.687377 896 511.659702 896z m244.835413-894.569086l-2.921957-2.609803-2.087843-3.336455c-17.188884-27.612747 3.254579-50.988401 25.350918-68.269396-8.13133-0.102345-17.593148-0.148401-28.569676-0.148401h-0.025586c-73.304782 0-173.035106 2.538162-215.641432 3.612787a1773.92455 1773.92455 0 0 1-20.944954 0.496375c-252.096808 0-457.19668 204.071302-457.19668 454.883677 0 250.827727 205.099872 454.883677 457.19668 454.883677s457.191563-204.05595 457.191562-454.883677v-0.608954c3.582084-161.961351-65.613537-252.85928-212.351032-384.01983z" horiz-adv-x="1024" />
<glyph glyph-name="new" unicode="&#58909;" d="M245.76 609.28h552.96A224.649846 224.649846 0 0 0 1024 384a224.649846 224.649846 0 0 0-225.28-225.28H0v204.8c0 135.168 110.592 245.76 245.76 245.76z m133.12-348.16v233.472h-30.72v-178.176l-112.64 178.176H204.8v-233.472h30.72v178.176l112.64-178.176h30.72z m182.272 108.544v24.576h-96.256v75.776h110.592v24.576h-141.312v-233.472h143.36v24.576h-112.64v83.968h96.256z m100.352-28.672l-34.816 151.552h-34.816l55.296-233.472h28.672l47.104 161.792 4.096 20.48 4.096-20.48 47.104-161.792h28.672l57.344 233.472h-34.816l-32.768-151.552-4.096-30.72-6.144 30.72-40.96 151.552h-30.72l-40.96-151.552-6.144-30.72-6.144 30.72z" horiz-adv-x="1024" />
<glyph glyph-name="mingxibeifen" unicode="&#60128;" d="M880.64 342.454857V481.28c0 148.918857-124.854857 271.36-277.723429 271.36H255.853714c-61.952 0-112.493714-49.517714-112.493714-109.348571V286.72c0-148.918857 124.854857-271.36 277.650286-271.36h347.136c61.952 0 112.493714 49.517714 112.493714 109.348571a52.662857 52.662857 0 0 0 105.325714 0c0-118.491429-98.157714-214.674286-217.819428-214.674285H421.010286C210.505143-89.965714 38.034286 79.213714 38.034286 286.72V643.291429C38.034286 761.782857 136.192 857.965714 255.853714 857.965714h347.136c210.505143 0 382.976-169.179429 382.976-376.685714v-138.752a52.662857 52.662857 0 1 0-105.325714 0zM351.305143 538.404571h186.368a52.662857 52.662857 0 1 0 0-105.325714H351.305143a52.662857 52.662857 0 1 0 0 105.325714z m0-259.218285h315.977143a52.662857 52.662857 0 1 0 0-105.325715h-315.977143a52.662857 52.662857 0 1 0 0 105.325715z" horiz-adv-x="1024" /> <glyph glyph-name="mingxibeifen" unicode="&#60128;" d="M880.64 342.454857V481.28c0 148.918857-124.854857 271.36-277.723429 271.36H255.853714c-61.952 0-112.493714-49.517714-112.493714-109.348571V286.72c0-148.918857 124.854857-271.36 277.650286-271.36h347.136c61.952 0 112.493714 49.517714 112.493714 109.348571a52.662857 52.662857 0 0 0 105.325714 0c0-118.491429-98.157714-214.674286-217.819428-214.674285H421.010286C210.505143-89.965714 38.034286 79.213714 38.034286 286.72V643.291429C38.034286 761.782857 136.192 857.965714 255.853714 857.965714h347.136c210.505143 0 382.976-169.179429 382.976-376.685714v-138.752a52.662857 52.662857 0 1 0-105.325714 0zM351.305143 538.404571h186.368a52.662857 52.662857 0 1 0 0-105.325714H351.305143a52.662857 52.662857 0 1 0 0 105.325714z m0-259.218285h315.977143a52.662857 52.662857 0 1 0 0-105.325715h-315.977143a52.662857 52.662857 0 1 0 0 105.325715z" horiz-adv-x="1024" />
......
No preview for this file type
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment