mirror of
https://gitee.com/ZhongBangKeJi/crmeb_java.git
synced 2026-04-25 04:28:33 +08:00
v1.1
1、提货点 2、客服(腾讯云智服) 3、接口权限控制 4、复制第三方商品可配置 4、优化附件上传配置 5、手机端核销订单 6、手机端订单统计、订单管理 7、短信优化 8、订阅消息全自动化
This commit is contained in:
@@ -126,10 +126,8 @@ export default {
|
||||
this.$emit('hideEditDialog')
|
||||
},
|
||||
initEditData() {
|
||||
console.log(this.editData)
|
||||
this.addTreeListLabelForCasCard(this.allTreeList, 'child')
|
||||
this.parentOptions = this.allTreeList
|
||||
console.log(this.parentOptions)
|
||||
if (this.isCreate !== 1) {
|
||||
const { id } = this.prent
|
||||
this.editPram.pid = id
|
||||
@@ -143,7 +141,6 @@ export default {
|
||||
this.editPram.type = type
|
||||
this.editPram.url = url
|
||||
this.editPram.id = id
|
||||
console.log(this.editPram.id)
|
||||
}
|
||||
},
|
||||
addTreeListLabelForCasCard(arr, child) {
|
||||
|
||||
@@ -2,13 +2,15 @@
|
||||
<div>
|
||||
<template v-if="selectModel">
|
||||
<el-tree
|
||||
node-key="id"
|
||||
:props="treeProps"
|
||||
ref="tree"
|
||||
:data="treeList"
|
||||
show-checkbox
|
||||
:default-checked-keys="selectModelKeys"
|
||||
@check="handleSelectionChange"
|
||||
/>
|
||||
check-strictly
|
||||
node-key="id"
|
||||
@check="getCurrentNode"
|
||||
:default-checked-keys="selectModelKeysNew"
|
||||
:props="treeProps">
|
||||
</el-tree>
|
||||
</template>
|
||||
<template v-else>
|
||||
<div class="divBox">
|
||||
@@ -84,7 +86,7 @@
|
||||
<el-table-column label="操作" min-width="200" fixed="right">
|
||||
<template slot-scope="scope">
|
||||
<el-button
|
||||
v-if="biztype.value!==3 && scope.row.pid === 0"
|
||||
v-if="(biztype.value === 1 && scope.row.pid === 0) || (biztype.value !== 1)"
|
||||
type="text"
|
||||
size="small"
|
||||
@click="handleAddMenu(scope.row)"
|
||||
@@ -145,6 +147,9 @@ export default {
|
||||
type: Boolean,
|
||||
default: false
|
||||
},
|
||||
// selectModelKeys: {
|
||||
// type: String
|
||||
// },
|
||||
selectModelKeys: {
|
||||
type: Array
|
||||
},
|
||||
@@ -152,6 +157,8 @@ export default {
|
||||
},
|
||||
data() {
|
||||
return {
|
||||
selectModelKeysNew: this.selectModelKeys,
|
||||
loading: false,
|
||||
constants,
|
||||
treeProps: {
|
||||
label: 'name',
|
||||
@@ -207,6 +214,37 @@ export default {
|
||||
this.editDialogConfig.biztype = this.biztype
|
||||
this.editDialogConfig.visible = true
|
||||
},
|
||||
getCurrentNode(data) {
|
||||
let node = this.$refs.tree.getNode(data);
|
||||
this.childNodes(node);
|
||||
this.parentNodes(node);
|
||||
//是否编辑的表示
|
||||
// this.ruleForm.isEditorFlag = true;
|
||||
//编辑时候使用
|
||||
this.$emit('rulesSelect', this.$refs.tree.getCheckedKeys());
|
||||
// this.selectModelKeys = this.$refs.tree.getCheckedKeys();
|
||||
//无论编辑和新增点击了就传到后台这个值
|
||||
// this.$emit('rulesSelect', this.$refs.tree.getCheckedKeys().concat(this.$refs.tree.getHalfCheckedKeys()));
|
||||
// this.ruleForm.menuIdsisEditor = this.$refs.tree.getCheckedKeys().concat(this.$refs.tree.getHalfCheckedKeys());
|
||||
},
|
||||
//具体方法可以看element官网api
|
||||
childNodes(node){
|
||||
let len = node.childNodes.length;
|
||||
for(let i = 0; i < len; i++){
|
||||
node.childNodes[i].checked = node.checked;
|
||||
this.childNodes(node.childNodes[i]);
|
||||
}
|
||||
},
|
||||
parentNodes(node){
|
||||
if(node.parent){
|
||||
for(let key in node){
|
||||
if(key == "parent"){
|
||||
node[key].checked = true;
|
||||
this.parentNodes(node[key]);
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
handleDelMenu(rowData) {
|
||||
this.$confirm('确定删除当前数据?').then(() => {
|
||||
categoryApi.deleteCategroy(rowData).then(data => {
|
||||
@@ -221,9 +259,14 @@ export default {
|
||||
})
|
||||
},
|
||||
handlerGetTreeList() {
|
||||
const _pram = { type: this.biztype.value, status: this.selectModel ? 1 : -1 }
|
||||
// this.biztype.value === 5 && !this.selectModel) ? -1 : 1
|
||||
const _pram = { type: this.biztype.value, status: !this.selectModel ? -1 : (this.biztype.value === 5 ? -1 : 1) }
|
||||
this.loading = true
|
||||
this.biztype.value!==3 ? categoryApi.treeCategroy(_pram).then(data => {
|
||||
this.treeList = this.handleAddArrt(data)
|
||||
this.loading = false
|
||||
}).catch(()=>{
|
||||
this.loading = false
|
||||
}) : categoryApi.listCategroy({ type: 3, status: '', pid: this.listPram.pid}).then(data => {
|
||||
this.treeList = data.list
|
||||
})
|
||||
|
||||
@@ -181,7 +181,6 @@ function buildProps(scheme, propsList) {
|
||||
|
||||
// el-upload的BeforeUpload
|
||||
function buildBeforeUpload(scheme) {
|
||||
console.log(scheme)
|
||||
const config = scheme.__config__
|
||||
const unitNum = units[config.sizeUnit]; let rightSizeCode = ''; let acceptCode = ''; const
|
||||
returnList = []
|
||||
|
||||
@@ -245,7 +245,6 @@ export default {
|
||||
}
|
||||
} catch (err) {
|
||||
this.$message.error(`js错误:${err}`)
|
||||
console.error(err)
|
||||
}
|
||||
},
|
||||
generateCode() {
|
||||
|
||||
@@ -327,7 +327,6 @@ export default {
|
||||
const clone = this.cloneComponent(item)
|
||||
this.drawingList.push(clone)
|
||||
this.activeFormItem(clone)
|
||||
console.log(this.drawingList)
|
||||
},
|
||||
cloneComponent(origin) {
|
||||
const clone = JSON.parse(JSON.stringify(origin))
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
<div ref="rightPanel" :class="{show:show}" class="rightPanel-container">
|
||||
<div class="rightPanel-background" />
|
||||
<div class="rightPanel">
|
||||
<div class="handle-button" :style="{'top':buttonTop+'px','background-color':theme}" @click="show=!show">
|
||||
<div class="handle-button" :style="{'top':buttonTop+'px','background-color':theme}" @click="show=!show" v-if="!isPhone">
|
||||
<i :class="show?'el-icon-close':'el-icon-setting'" />
|
||||
</div>
|
||||
<div class="rightPanel-items">
|
||||
@@ -29,6 +29,7 @@ export default {
|
||||
},
|
||||
data() {
|
||||
return {
|
||||
isPhone: this.$wechat.isPhone(),
|
||||
show: false
|
||||
}
|
||||
},
|
||||
|
||||
@@ -35,7 +35,6 @@ export default {
|
||||
if (typeof val !== 'string') return
|
||||
const themeCluster = this.getThemeCluster(val.replace('#', ''))
|
||||
const originalCluster = this.getThemeCluster(oldVal.replace('#', ''))
|
||||
console.log(themeCluster, originalCluster)
|
||||
|
||||
const $message = this.$message({
|
||||
message: ' Compiling the theme',
|
||||
|
||||
@@ -8,60 +8,60 @@
|
||||
:show-file-list="false"
|
||||
multiple
|
||||
>
|
||||
<div class="upLoadPicBox" v-if="url">
|
||||
<div v-if="url" class="upLoadPicBox">
|
||||
<div class="upLoad">
|
||||
<i class="el-icon-document-checked cameraIconfont" />
|
||||
</div>
|
||||
</div>
|
||||
<el-button size="mini" type="primary" v-else>点击上传</el-button>
|
||||
<el-button v-else size="mini" type="primary">点击上传</el-button>
|
||||
</el-upload>
|
||||
</div>
|
||||
</template>
|
||||
<script>
|
||||
import { fileFileApi } from '@/api/systemSetting'
|
||||
import { getToken } from '@/utils/auth'
|
||||
export default {
|
||||
name: "uploadFile",
|
||||
data() {
|
||||
return {
|
||||
myHeaders: {'X-Token': getToken()},
|
||||
url: ''
|
||||
}
|
||||
},
|
||||
props:{
|
||||
value: {}
|
||||
},
|
||||
beforeMount(){
|
||||
if(this.value){
|
||||
this.url = this.value
|
||||
}
|
||||
},
|
||||
methods: {
|
||||
// 上传
|
||||
handleUploadForm(param){
|
||||
const formData = new FormData()
|
||||
const data = {
|
||||
model: this.$route.path.split("/")[1],
|
||||
pid: 10
|
||||
}
|
||||
formData.append('multipart', param.file)
|
||||
let loading = this.$loading({
|
||||
lock: true,
|
||||
text: '上传中,请稍候...',
|
||||
spinner: 'el-icon-loading',
|
||||
background: 'rgba(0, 0, 0, 0.7)'
|
||||
})
|
||||
fileFileApi(formData, data).then(res => {
|
||||
loading.close()
|
||||
this.url = res.url
|
||||
this.$emit('input', this.url)
|
||||
this.$message.success('上传成功')
|
||||
}).catch(res => {
|
||||
loading.close()
|
||||
})
|
||||
import { fileFileApi } from '@/api/systemSetting'
|
||||
import { getToken } from '@/utils/auth'
|
||||
export default {
|
||||
name: 'UploadFile',
|
||||
props: {
|
||||
value: {}
|
||||
},
|
||||
data() {
|
||||
return {
|
||||
myHeaders: { 'X-Token': getToken() },
|
||||
url: ''
|
||||
}
|
||||
},
|
||||
beforeMount() {
|
||||
if (this.value) {
|
||||
this.url = this.value
|
||||
}
|
||||
},
|
||||
methods: {
|
||||
// 上传
|
||||
handleUploadForm(param) {
|
||||
const formData = new FormData()
|
||||
const data = {
|
||||
model: this.$route.path.split('/')[1],
|
||||
pid: 10
|
||||
}
|
||||
formData.append('multipart', param.file)
|
||||
const loading = this.$loading({
|
||||
lock: true,
|
||||
text: '上传中,请稍候...',
|
||||
spinner: 'el-icon-loading',
|
||||
background: 'rgba(0, 0, 0, 0.7)'
|
||||
})
|
||||
fileFileApi(formData, data).then(res => {
|
||||
loading.close()
|
||||
this.url = res.url
|
||||
this.$emit('input', this.url)
|
||||
this.$message.success('上传成功')
|
||||
}).catch(res => {
|
||||
loading.close()
|
||||
})
|
||||
}
|
||||
}
|
||||
}
|
||||
</script>
|
||||
|
||||
<style scoped>
|
||||
|
||||
@@ -1,23 +1,18 @@
|
||||
<template>
|
||||
<el-dialog v-model="dialogFormVisible" title="请选择商城用户" append-to-body :visible.sync="dialogFormVisible" width="1000px" @close="cancel">
|
||||
<el-dialog v-model="dialogFormVisible" title="请选择管理员" append-to-body :visible.sync="dialogFormVisible" width="1200px" @close="cancel">
|
||||
<el-form ref="form" inline :model="artFrom">
|
||||
<el-form-item label="搜索日期:">
|
||||
<el-radio-group v-model="artFrom.data" size="small" @change="search">
|
||||
<el-radio-button :label="item.val" v-for="(item,index) in fromData" :key="index" >{{item.text}}</el-radio-button>
|
||||
</el-radio-group>
|
||||
<el-date-picker
|
||||
v-model="timeVal"
|
||||
size="small"
|
||||
type="daterange"
|
||||
range-separator="至"
|
||||
start-placeholder="开始日期"
|
||||
end-placeholder="结束日期"
|
||||
value-format="yyyy:MM:dd"
|
||||
@change="onchangeTime">
|
||||
</el-date-picker>
|
||||
<el-form-item label="身份:">
|
||||
<el-select v-model="artFrom.roles" placeholder="请输入身份" clearable class="selWidth">
|
||||
<el-option
|
||||
v-for="item in roleList.list"
|
||||
:key="item.id"
|
||||
:label="item.roleName"
|
||||
:value="item.id"
|
||||
/>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
<el-form-item label="用户名称:">
|
||||
<el-input v-model="artFrom.keywords" size="small" placeholder="请输入用户名称" style="width:100%">
|
||||
<el-form-item label="姓名:">
|
||||
<el-input v-model="artFrom.realName" size="small" placeholder="请输入姓名或者账号" class="selWidth">
|
||||
<el-button slot="append" icon="el-icon-search" @click="search" class="">搜索</el-button>
|
||||
</el-input>
|
||||
</el-form-item>
|
||||
@@ -33,56 +28,59 @@
|
||||
label=""
|
||||
width="55">
|
||||
<template slot-scope="{ row, index }">
|
||||
<el-radio v-model="templateRadio" :label="row.uid" @change.native="getTemplateRow(row.uid,row.avatar)"> </el-radio>
|
||||
<el-radio v-model="templateRadio" :label="row.uid" @change.native="getTemplateRow(row)"> </el-radio>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column
|
||||
prop="uid"
|
||||
prop="id"
|
||||
label="ID"
|
||||
sortable
|
||||
width="80">
|
||||
</el-table-column>
|
||||
<el-table-column
|
||||
prop="nickname"
|
||||
label="微信用户名称"
|
||||
min-Width="100">
|
||||
prop="realName"
|
||||
label="姓名"
|
||||
min-Width="120">
|
||||
</el-table-column>
|
||||
<!--<el-table-column-->
|
||||
<!--label="客服头像"-->
|
||||
<!--min-Width="100">-->
|
||||
<!--<template slot-scope="{ row, index }" class="picMiddle">-->
|
||||
<!--<div class="demo-image__preview">-->
|
||||
<!--<el-image-->
|
||||
<!--:src="row.avatar"-->
|
||||
<!--:preview-src-list="[row.avatar]"-->
|
||||
<!--/>-->
|
||||
<!--</div>-->
|
||||
<!--</template>-->
|
||||
<!--</el-table-column>-->
|
||||
<el-table-column
|
||||
label="客服头像"
|
||||
min-Width="100">
|
||||
<template slot-scope="{ row, index }" class="picMiddle">
|
||||
<div class="demo-image__preview">
|
||||
<el-image
|
||||
:src="row.avatar"
|
||||
:preview-src-list="[row.avatar]"
|
||||
/>
|
||||
</div>
|
||||
prop="account"
|
||||
label="账号"
|
||||
min-Width="120"/>
|
||||
<el-table-column label="身份" prop="realName" min-width="230">
|
||||
<template slot-scope="scope">
|
||||
<el-tag size="small" type="info" v-for="(item, index) in scope.row.roleNames.split(',')" class="mr5">{{ item }}</el-tag>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column
|
||||
prop="sex"
|
||||
label="性别"
|
||||
min-Width="60">
|
||||
<template slot-scope="{ row, index }">
|
||||
<span v-show="row.sex ===1">男</span>
|
||||
<span v-show="row.sex ===2">女</span>
|
||||
<span v-show="row.sex ===0">保密</span>
|
||||
<el-table-column label="最后登录时间" prop="lastTime" min-width="180">
|
||||
<template slot-scope="scope">
|
||||
<span>{{ scope.row.lastTime | filterEmpty }}</span>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column
|
||||
prop="country"
|
||||
label="地区"
|
||||
min-Width="100">
|
||||
<template slot-scope="{ row, index }">
|
||||
{{row.country}}{{row.province}}{{row.city}}
|
||||
<el-table-column label="最后登录IP" prop="lastIp" min-width="150">
|
||||
<template slot-scope="scope">
|
||||
<span>{{ scope.row.lastIp | filterEmpty }}</span>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column
|
||||
prop="subscribe"
|
||||
label="是否关注公众号"
|
||||
min-Width="100">
|
||||
<template slot-scope="{ row, index }">
|
||||
{{row.subscribe?'关注':'未关注'}}
|
||||
<el-table-column label="状态" prop="status" min-width="100">
|
||||
<template slot-scope="scope">
|
||||
<span>{{ scope.row.status | filterShowOrHide }}</span>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="删除标记" prop="status" min-width="100">
|
||||
<template slot-scope="scope">
|
||||
<span>{{ scope.row.isDel | filterYesOrNo }}</span>
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
@@ -102,11 +100,14 @@
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import { userListApi } from '@/api/user';
|
||||
import * as systemAdminApi from '@/api/systemadmin.js'
|
||||
import * as roleApi from '@/api/role.js'
|
||||
import * as constants from '@/utils/constants.js'
|
||||
export default {
|
||||
name: "index",
|
||||
data(){
|
||||
return{
|
||||
return {
|
||||
constants,
|
||||
loading:false,
|
||||
templateRadio:'',
|
||||
dialogFormVisible:false,
|
||||
@@ -114,37 +115,48 @@
|
||||
artFrom: {
|
||||
page: 1,
|
||||
limit: 20,
|
||||
data: '',
|
||||
keywords: ''
|
||||
status: 1,
|
||||
realName: '',
|
||||
roles: ''
|
||||
},
|
||||
total:0,
|
||||
timeVal:'',
|
||||
fromData: [
|
||||
{ text: '全部', val: '' },
|
||||
{ text: '今天', val: 'today' },
|
||||
{ text: '昨天', val: 'yesterday' },
|
||||
{ text: '最近7天', val: 'lately7' },
|
||||
{ text: '最近30天', val: 'lately30' },
|
||||
{ text: '本月', val: 'month' },
|
||||
{ text: '本年', val: 'year' }
|
||||
]
|
||||
roleList: []
|
||||
}
|
||||
},
|
||||
created(){
|
||||
this.handleGetRoleList()
|
||||
},
|
||||
methods:{
|
||||
getTemplateRow(id,img){
|
||||
handleGetRoleList() {
|
||||
const _pram = {
|
||||
page: 1,
|
||||
limit: 9999
|
||||
}
|
||||
roleApi.getRoleList(_pram).then(data => {
|
||||
this.roleList = data
|
||||
})
|
||||
},
|
||||
getTemplateRow(row){
|
||||
this.dialogFormVisible = false;
|
||||
this.$emit("upImgUid",id,img);
|
||||
this.$emit("upImgUid", row);
|
||||
},
|
||||
tableList(){
|
||||
let that = this;
|
||||
that.loading = true;
|
||||
userListApi(that.artFrom).then(res=>{
|
||||
that.loading = false;
|
||||
that.tableData = res.list;
|
||||
that.total = res.total
|
||||
this.loading = true;
|
||||
systemAdminApi.adminList( this.artFrom ).then(data => {
|
||||
this.tableData = data.list
|
||||
this.total = data.total
|
||||
this.loading = false;
|
||||
}).catch(() => {
|
||||
this.loading = false;
|
||||
})
|
||||
// let that = this;
|
||||
// that.loading = true;
|
||||
// userListApi(that.artFrom).then(res=>{
|
||||
// that.loading = false;
|
||||
// that.tableData = res.list;
|
||||
// that.total = res.total
|
||||
// })
|
||||
},
|
||||
//切换显示条数
|
||||
sizeChange(index){
|
||||
@@ -175,7 +187,7 @@
|
||||
page: 1,
|
||||
limit: 20,
|
||||
data: '',
|
||||
keywords: ''
|
||||
realName: ''
|
||||
};
|
||||
this.timeVal = '';
|
||||
this.templateRadio = ''
|
||||
|
||||
@@ -67,7 +67,6 @@ export default {
|
||||
iconChange(n) {
|
||||
this.$emit('getIcon', n)
|
||||
this.$msgbox.close()
|
||||
console.log(n)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user