1、提货点
2、客服(腾讯云智服)
3、接口权限控制
4、复制第三方商品可配置
4、优化附件上传配置
5、手机端核销订单
6、手机端订单统计、订单管理
7、短信优化
8、订阅消息全自动化
This commit is contained in:
张乐
2020-09-15 16:13:25 +08:00
parent 74b99a79b3
commit d14a75f9d8
245 changed files with 19900 additions and 994 deletions

View File

@@ -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) {

View File

@@ -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
})

View File

@@ -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 = []

View File

@@ -245,7 +245,6 @@ export default {
}
} catch (err) {
this.$message.error(`js错误${err}`)
console.error(err)
}
},
generateCode() {

View File

@@ -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))

View File

@@ -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
}
},

View File

@@ -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',

View File

@@ -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>

View File

@@ -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)">&nbsp;</el-radio>
<el-radio v-model="templateRadio" :label="row.uid" @change.native="getTemplateRow(row)">&nbsp;</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 = ''

View File

@@ -67,7 +67,6 @@ export default {
iconChange(n) {
this.$emit('getIcon', n)
this.$msgbox.close()
console.log(n)
}
}
}