Merge remote-tracking branch 'origin/master'

master
董哲奇 6 days ago
commit 96eaf584c1

@ -8,12 +8,7 @@ export function goodsStatistics(query) {
params: query params: query
}) })
} }
export function memberAndCartStatistics() {
return request({
url: '/dev/statistics/index/memberAndCart/statistics',
method: 'get'
})
}
export function orderAndAftersaleStatistics() { export function orderAndAftersaleStatistics() {
return request({ return request({

@ -0,0 +1,63 @@
import request from '@/utils/request'
// 查询列表
export function listTenant(query) {
return request({
url: '/system/tenant/list/searchList',
method: 'get',
params: query
})
}
// 查询列表
export function treeSelect() {
return request({
url: '/system/tenant/list/treeSelect',
method: 'get'
})
}
// 查询详细
export function getTenant(dictTenantId) {
return request({
url: '/system/tenant/info/detailById/' + dictTenantId,
method: 'get'
})
}
// 新增
export function addTenant(data) {
return request({
url: '/system/tenant/add/addTenant',
method: 'post',
data: data
})
}
// 修改
export function updateTenant(data) {
return request({
url: '/system/tenant/update/updateTenant',
method: 'put',
data: data
})
}
// 删除
export function delTenant(dictTenantId) {
return request({
url: '/system/tenant/delete/deleteById/' + dictTenantId,
method: 'delete'
})
}
// 导出
export function exportTenant(query) {
return request({
url: '/system/tenant/export',
method: 'get',
params: query
})
}

@ -101,7 +101,7 @@
</el-dialog> </el-dialog>
</template> </template>
<script> <script>
import { addTenant, updateTenant } from '@/api/school/system/tenant' import { addTenant, updateTenant } from '@/api/system/tenant'
import { isPass, isSerialNumber, isUsername } from '@/utils/validate' import { isPass, isSerialNumber, isUsername } from '@/utils/validate'
export default { export default {
@ -227,10 +227,11 @@ export default {
} }
}, },
created() { created() {
this.getDictListByDictType('in_use').then(response => {
this.getDictListByDictType('sys_normal_disable').then(response => {
this.inUseOptions = response.data this.inUseOptions = response.data
}) })
this.getDictListByDictType('sex').then(response => { this.getDictListByDictType('sys_user_sex').then(response => {
this.sexOptions = response.data this.sexOptions = response.data
}) })
}, },
@ -241,10 +242,10 @@ export default {
if (valid) { if (valid) {
if (this.form.tenantId !== undefined) { if (this.form.tenantId !== undefined) {
this.loadingChange = true this.loadingChange = true
const formData = this.addDateRange(this.form, this.form.useDateRange) const formData = this.getTime(this.form, this.form.useDateRange)
updateTenant(formData).then(response => { updateTenant(formData).then(response => {
this.loadingChange = false this.loadingChange = false
if (response.respCode === '0000') { if (response.success ) {
this.msgSuccess('修改成功') this.msgSuccess('修改成功')
this.open = false this.open = false
this.$emit('ok') this.$emit('ok')
@ -256,10 +257,10 @@ export default {
}) })
} else { } else {
this.loadingChange = true this.loadingChange = true
const formData = this.addDateRange(this.form, this.form.useDateRange) const formData = this.getTime(this.form, this.form.useDateRange)
addTenant(formData).then(response => { addTenant(formData).then(response => {
this.loadingChange = false this.loadingChange = false
if (response.respCode === '0000') { if (response.success) {
this.msgSuccess('新增成功') this.msgSuccess('新增成功')
this.open = false this.open = false
this.$emit('ok') this.$emit('ok')
@ -286,6 +287,16 @@ export default {
inUse: '1' inUse: '1'
} }
this.resetForm('form') this.resetForm('form')
},
getTime(params, dateRange) {
var search = params
search.beginTime = ''
search.endTime = ''
if (dateRange != null && dateRange !== '') {
search.beginTime = dateRange[0]
search.endTime = dateRange[1]
}
return search
} }
} }
} }

@ -10,12 +10,7 @@
</div> </div>
</el-card> </el-card>
<el-row class="pl20 pr20" :gutter="10"> <el-row class="pl20 pr20" :gutter="10">
<el-col :span="3"> <el-col :span="9">
</el-col>
<el-col :span="3">
</el-col>
<el-col :span="6">
<el-card shadow="always" style="padding-bottom: 30px"> <el-card shadow="always" style="padding-bottom: 30px">
<div slot="header"><span>售后</span></div> <div slot="header"><span>售后</span></div>
<ul style="margin-top: 10px"> <ul style="margin-top: 10px">
@ -34,7 +29,7 @@
</ul> </ul>
</el-card> </el-card>
</el-col> </el-col>
<el-col :span="12"> <el-col :span="15">
<el-card shadow="always" style="padding-bottom: 30px"> <el-card shadow="always" style="padding-bottom: 30px">
<div slot="header"><span>订单</span></div> <div slot="header"><span>订单</span></div>
<div> <div>
@ -67,7 +62,7 @@
</el-col> </el-col>
</el-row> </el-row>
<el-row class="pl20 pr20" :gutter="10"> <el-row class="pl20 pr20" :gutter="10">
<el-col :span="16"> <el-col :span="24">
<order-line-chart></order-line-chart> <order-line-chart></order-line-chart>
<div class="card transform"> <div class="card transform">
<top-product></top-product> <top-product></top-product>
@ -82,7 +77,7 @@ import PanelGroup from '@/views/components/PanelGroup'
import {mapGetters} from 'vuex' import {mapGetters} from 'vuex'
import OrderLineChart from "@/views/dashboard/OrderLineChart.vue"; import OrderLineChart from "@/views/dashboard/OrderLineChart.vue";
import TopProduct from "@/views/components/IndexOrderPanelGroup/TopProduct.vue"; import TopProduct from "@/views/components/IndexOrderPanelGroup/TopProduct.vue";
import {memberAndCartStatistics, orderAndAftersaleStatistics} from "@/api/statistics"; import {orderAndAftersaleStatistics} from "@/api/statistics";
const DATA_FROM_BACKEND = { const DATA_FROM_BACKEND = {
columns: ['date', 'orderCount','orderAmount'], columns: ['date', 'orderCount','orderAmount'],
@ -152,10 +147,6 @@ export default {
dataEmpty: false, dataEmpty: false,
nowTime: '', nowTime: '',
hello: '', hello: '',
memberAndCartStatisticsObj: {
memberCount: 0,
cartCount: 0
},
orderAndAftersaleStatisticsObj: { orderAndAftersaleStatisticsObj: {
pendingAftersaleCount: 0, pendingAftersaleCount: 0,
processingAftersaleCount: 0, processingAftersaleCount: 0,
@ -172,7 +163,6 @@ export default {
created() { created() {
this.showTimes() this.showTimes()
this.helloTimes() this.helloTimes()
this.memberAndCartStat()
this.orderAndAftersaleStat() this.orderAndAftersaleStat()
this.initOrderCountDate() this.initOrderCountDate()
this.getData() this.getData()
@ -256,11 +246,6 @@ export default {
this.hello = '晚上好' this.hello = '晚上好'
} }
}, },
memberAndCartStat(){
memberAndCartStatistics().then((response) => {
this.memberAndCartStatisticsObj = response
})
},
orderAndAftersaleStat(){ orderAndAftersaleStat(){
orderAndAftersaleStatistics().then((response) => { orderAndAftersaleStatistics().then((response) => {
this.orderAndAftersaleStatisticsObj = response this.orderAndAftersaleStatisticsObj = response

@ -122,12 +122,6 @@ export default {
rememberMe: rememberMe === undefined ? false : Boolean(rememberMe) rememberMe: rememberMe === undefined ? false : Boolean(rememberMe)
}; };
}, },
handleTry(){
this.dialogVisible =true
},
dialogConfirm(){
this.dialogVisible =false;
},
handleLogin() { handleLogin() {
this.$refs.loginForm.validate(valid => { this.$refs.loginForm.validate(valid => {
if (valid) { if (valid) {

@ -0,0 +1,317 @@
<template>
<div class="app-container">
<el-form ref="queryForm" :model="queryParams" :inline="true" label-width="68px">
<el-form-item label="租户名称" prop="tenantName">
<el-input
v-model="queryParams.tenantName"
placeholder="请输入租户名称"
clearable
size="small"
style="width: 240px"
@keyup.enter.native="handleQuery"
/>
</el-form-item>
<el-form-item label="联系人" prop="contactName">
<el-input
v-model="queryParams.contactName"
placeholder="请输入联系人"
clearable
size="small"
style="width: 240px"
@keyup.enter.native="handleQuery"
/>
</el-form-item>
<el-form-item label="状态" prop="inUse">
<el-select
v-model="queryParams.inUse"
placeholder="租户状态"
clearable
size="small"
style="width: 240px"
>
<el-option
v-for="dict in inUseOptions"
:key="dict.dictValue"
:label="dict.dictLabel"
:value="dict.dictValue"
/>
</el-select>
</el-form-item>
<el-form-item label="到期日期">
<el-date-picker
v-model="dateRange"
size="small"
style="width: 240px"
value-format="yyyy-MM-dd"
type="daterange"
range-separator="-"
start-placeholder="开始日期"
end-placeholder="结束日期"
:picker-options="useEndRangeOptions"
/>
</el-form-item>
<el-form-item>
<el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery"></el-button>
<el-button icon="el-icon-refresh" size="mini" @click="resetQuery"></el-button>
</el-form-item>
</el-form>
<el-row :gutter="10" class="mb8">
<el-col :span="1.5">
<el-button
v-hasPermi="['system:tenant:add']"
type="primary"
icon="el-icon-plus"
size="mini"
@click="handleAdd"
>租户入驻</el-button>
</el-col>
<el-col :span="1.5">
<el-button
v-hasPermi="['system:tenant:update']"
type="primary"
icon="el-icon-edit-outline"
size="mini"
:disabled="single"
@click="handleUpdate"
>信息变更</el-button>
</el-col>
<el-col :span="1.5">
<el-button
v-hasPermi="['system:tenant:delete']"
type="danger"
icon="el-icon-delete"
size="mini"
:disabled="multiple"
@click="handleDelete"
>删除</el-button>
</el-col>
<!-- <el-col :span="1.5">-->
<!-- <el-button-->
<!-- v-hasPermi="['system:tenant:export']"-->
<!-- type="primary"-->
<!-- icon="el-icon-download"-->
<!-- size="mini"-->
<!-- @click="handleExport"-->
<!-- >导出</el-button>-->
<!-- </el-col>-->
</el-row>
<el-table v-loading="loading" :data="dataList" @selection-change="handleSelectionChange">
<el-table-column type="selection" width="55" align="center" />
<el-table-column label="租户名称" align="center" prop="tenantName" :show-overflow-tooltip="true" />
<el-table-column label="联系人" align="center" prop="contactName" :show-overflow-tooltip="true" />
<el-table-column label="联系电话" align="center" prop="contactPhone" :show-overflow-tooltip="true" />
<el-table-column label="状态" align="center" prop="inUse" :formatter="inUseFormat">
<template slot-scope="scope">
<el-tag v-if="scope.row.endTime < new Date().getTime()" size="medium" type="danger"></el-tag>
<el-tag v-else-if="scope.row.inUse === '0'" size="medium">在用</el-tag>
<el-tag v-else-if="scope.row.inUse === '1'" size="medium" type="warning">停用</el-tag>
</template>
</el-table-column>
<el-table-column label="入驻时间" align="center" prop="createTime" width="180">
<template slot-scope="scope">
<span>{{ parseTime(scope.row.createTime) }}</span>
</template>
</el-table-column>
<el-table-column label="生效时间" align="center" prop="beginTime" width="180">
<template slot-scope="scope">
<span>{{ parseTime(scope.row.beginTime) }}</span>
</template>
</el-table-column>
<el-table-column label="失效时间" align="center" prop="endTime" width="180">
<template slot-scope="scope">
<span>{{ parseTime(scope.row.endTime) }}</span>
</template>
</el-table-column>
<el-table-column label="备注" align="center" prop="memo" :show-overflow-tooltip="true" />
<el-table-column fixed="right" width="150" label="操作" align="center" class-name="small-padding fixed-width">
<template slot-scope="scope">
<el-button
v-hasPermi="['system:tenant:update']"
size="mini"
type="text"
icon="el-icon-edit-outline"
@click="handleUpdate(scope.row)"
>信息变更</el-button>
<el-button
v-hasPermi="['system:tenant:delete']"
size="mini"
type="text"
icon="el-icon-delete"
@click="handleDelete(scope.row)"
>删除</el-button>
</template>
</el-table-column>
</el-table>
<pagination
v-show="total>0"
:total="total"
:page.sync="queryParams.pageNum"
:limit.sync="queryParams.pageSize"
@pagination="getList"
/>
<change-tenant ref="changeTenant" @ok="getList" />
</div>
</template>
<script>
import { listTenant, getTenant, delTenant, exportTenant } from '@/api/system/tenant'
import changeTenant from '@/components/system/tenant/changeTenant'
export default {
components: {
changeTenant
},
data() {
return {
//
loading: true,
//
ids: [],
//
single: true,
//
multiple: true,
//
total: 0,
//
dataList: [],
//
inUseOptions: [],
//
dateRange: [],
//
queryParams: {
pageNum: 1,
pageSize: 10,
tenantName: undefined,
contactName: undefined,
inUse: undefined
},
useEndRangeOptions: {
shortcuts: [{
text: '7天',
onClick(picker) {
const start = new Date()
const end = new Date()
end.setTime(start.getTime() + 3600 * 1000 * 24 * 7)
picker.$emit('pick', [start, end])
}
}, {
text: '15天',
onClick(picker) {
const start = new Date()
const end = new Date()
end.setTime(start.getTime() + 3600 * 1000 * 24 * 15)
picker.$emit('pick', [start, end])
}
}, {
text: '1个月',
onClick(picker) {
const start = new Date()
const end = new Date()
end.setTime(start.getTime() + 3600 * 1000 * 24 * 30)
picker.$emit('pick', [start, end])
}
}, {
text: '3个月',
onClick(picker) {
const start = new Date()
const end = new Date()
end.setTime(start.getTime() + 3600 * 1000 * 24 * 90)
picker.$emit('pick', [start, end])
}
}]
}
}
},
created() {
this.getList()
this.getDictListByDictType('sys_normal_disable').then(response => {
this.inUseOptions = response.data
})
},
methods: {
/** 查询租户类型列表 */
getList() {
this.loading = true
listTenant(this.addDateRange(this.queryParams, this.dateRange)).then(response => {
this.dataList = response.data.rows
this.total = response.data.total
this.loading = false
})
},
//
inUseFormat(row, column) {
return this.selectDictLabel(this.inUseOptions, row.inUse)
},
/** 搜索按钮操作 */
handleQuery() {
this.queryParams.pageNum = 1
this.getList()
},
/** 重置按钮操作 */
resetQuery() {
this.dateRange = []
this.resetForm('queryForm')
this.handleQuery()
},
/** 新增按钮操作 */
handleAdd() {
this.$refs.changeTenant.reset()
this.$refs.changeTenant.title = '添加租户信息'
this.$refs.changeTenant.open = true
},
//
handleSelectionChange(selection) {
this.ids = selection.map(item => item.tenantId)
this.single = selection.length !== 1
this.multiple = !selection.length
},
/** 修改按钮操作 */
handleUpdate(row) {
const tenantId = row.tenantId || this.ids
getTenant(tenantId).then(response => {
this.$refs.changeTenant.reset()
this.$refs.changeTenant.form = response.data
this.$refs.changeTenant.title = '修改租户信息'
this.$refs.changeTenant.open = true
})
},
/** 删除按钮操作 */
handleDelete(row) {
const tenantIds = row.tenantId || this.ids
this.$confirm('是否确认删除?', '警告', {
confirmButtonText: '确定',
cancelButtonText: '取消',
type: 'warning'
}).then(function() {
return delTenant(tenantIds)
}).then((response) => {
if (response.success) {
this.getList()
this.msgSuccess('删除成功')
} else {
this.msgError(response.respMsg)
}
}).catch(function() {})
},
/** 导出按钮操作 */
handleExport() {
const queryParams = this.queryParams
this.$confirm('是否确认导出所有数据项?', '警告', {
confirmButtonText: '确定',
cancelButtonText: '取消',
type: 'warning'
}).then(function() {
return exportTenant(queryParams)
}).then(response => {
this.download(response.respMsg)
}).catch(function() {})
}
}
}
</script>
Loading…
Cancel
Save