新增应用中心
This commit is contained in:
197
src/views/application/components/wine/addModal.vue
Normal file
197
src/views/application/components/wine/addModal.vue
Normal file
@@ -0,0 +1,197 @@
|
||||
<template>
|
||||
<el-dialog :title="form.id ? '编辑酒品' : '添加酒品'" :visible.sync="dialogVisible" @close="reset">
|
||||
<div class="head-container">
|
||||
<div class="tab_wrap">
|
||||
<div class="tab" :style="{ '--index': form.source }">
|
||||
<div class="item" v-for="(item, index) in tabs" :key="item.value"
|
||||
:class="{ active: index == form.source }" @click="tabChange(item)">
|
||||
{{ item.label }}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<el-form ref="form" :model="form" :rules="rules" label-width="120px" label-position="left">
|
||||
<el-form-item label="酒品名" prop="name">
|
||||
<el-input v-model="form.name" placeholder="请输入酒品名" />
|
||||
</el-form-item>
|
||||
<el-form-item label="酒品图片" prop="imgUrl">
|
||||
</el-form-item>
|
||||
<el-form-item label="单位" prop="unit">
|
||||
<el-input v-model="form.name" placeholder="请选择单位,如:瓶" />
|
||||
</el-form-item>
|
||||
<el-form-item label="有效期">
|
||||
<el-input-number v-model="form.period" controls-position="right" :min="1"
|
||||
placeholder="请输入有效期(天)"></el-input-number>
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
<span slot="footer" class="dialog-footer">
|
||||
<el-button @click="dialogVisible = false">取 消</el-button>
|
||||
<el-button type="primary" @click="onSubmitHandle">确 定</el-button>
|
||||
</span>
|
||||
</el-dialog>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import { queryAllShopUser } from '@/api/shop'
|
||||
export default {
|
||||
data() {
|
||||
return {
|
||||
dialogVisible: true,
|
||||
tabs: [
|
||||
{
|
||||
value: 0,
|
||||
label: '手动添加'
|
||||
},
|
||||
{
|
||||
value: 1,
|
||||
label: '从商品添加'
|
||||
}
|
||||
],
|
||||
loading: false,
|
||||
options: [],
|
||||
form: {
|
||||
source: '',
|
||||
id: '',
|
||||
imgUrl: '',
|
||||
name: '',
|
||||
period: '',
|
||||
shopId: '',
|
||||
unit: ''
|
||||
},
|
||||
resetForm: '',
|
||||
rules: {
|
||||
name: [
|
||||
{
|
||||
required: true,
|
||||
message: ' ',
|
||||
trigger: 'blur'
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
},
|
||||
mounted() {
|
||||
this.resetForm = { ...this.form }
|
||||
// this.getTableData()
|
||||
},
|
||||
methods: {
|
||||
// 切换类型
|
||||
tabChange(item) {
|
||||
this.form.source = this.tabs.findIndex(i => i.value == item.value)
|
||||
},
|
||||
// 获取用户列表
|
||||
async getTableData(query = '') {
|
||||
this.loading = true
|
||||
try {
|
||||
const res = await queryAllShopUser({
|
||||
telephone: query,
|
||||
})
|
||||
this.loading = false
|
||||
this.options = res.content
|
||||
} catch (error) {
|
||||
this.loading = false
|
||||
console.log(error)
|
||||
}
|
||||
},
|
||||
// 提交
|
||||
onSubmitHandle() {
|
||||
console.log(this.form)
|
||||
this.$refs.form.validate(async valid => {
|
||||
if (valid) {
|
||||
try {
|
||||
this.form.shopId = localStorage.getItem('shopId')
|
||||
let res = await tbShopCategoryPost(this.form, this.form.id ? 'put' : 'post')
|
||||
this.$emit('success', res)
|
||||
this.close()
|
||||
this.$notify({
|
||||
title: '成功',
|
||||
message: `${this.form.id ? '编辑' : '添加'}成功`,
|
||||
type: 'success'
|
||||
});
|
||||
} catch (error) {
|
||||
console.log(error)
|
||||
}
|
||||
}
|
||||
})
|
||||
},
|
||||
show(obj) {
|
||||
// console.log(obj)
|
||||
this.dialogVisible = true
|
||||
if (obj.pid) {
|
||||
this.form.pid = obj.pid
|
||||
}
|
||||
if (obj && obj.id) {
|
||||
this.form = obj
|
||||
if (obj.pic) {
|
||||
setTimeout(() => {
|
||||
this.$refs.uploadImg.fileList = [
|
||||
{
|
||||
url: obj.pic
|
||||
}
|
||||
]
|
||||
}, 100)
|
||||
}
|
||||
}
|
||||
},
|
||||
close() {
|
||||
this.dialogVisible = false
|
||||
},
|
||||
reset() {
|
||||
this.form = { ...this.resetForm }
|
||||
this.$refs.uploadImg.clearFiles()
|
||||
}
|
||||
}
|
||||
}
|
||||
</script>
|
||||
|
||||
<style scoped lang="scss">
|
||||
.head-container {
|
||||
display: flex;
|
||||
justify-content: center;
|
||||
}
|
||||
|
||||
.tab_wrap {
|
||||
background-color: #DCF0E8;
|
||||
padding: 4px;
|
||||
|
||||
.tab {
|
||||
--w: 120px;
|
||||
height: 35px;
|
||||
display: flex;
|
||||
position: relative;
|
||||
|
||||
|
||||
&::after {
|
||||
content: "";
|
||||
width: var(--w);
|
||||
height: inherit;
|
||||
background-color: #39D47A;
|
||||
position: absolute;
|
||||
top: 0;
|
||||
left: calc(var(--index) * var(--w));
|
||||
z-index: 1;
|
||||
transition: left .3s ease-in-out;
|
||||
}
|
||||
|
||||
.item {
|
||||
width: var(--w);
|
||||
height: inherit;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
position: relative;
|
||||
z-index: 2;
|
||||
color: #39D47A;
|
||||
transition: all .1s ease-in-out .15s;
|
||||
|
||||
&:hover {
|
||||
cursor: pointer;
|
||||
}
|
||||
|
||||
&.active {
|
||||
color: #fff;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
</style>
|
||||
57
src/views/application/components/wine/record.vue
Normal file
57
src/views/application/components/wine/record.vue
Normal file
@@ -0,0 +1,57 @@
|
||||
<template>
|
||||
<div class="head-container">
|
||||
<div class="head-container">
|
||||
<el-form :model="query" inline>
|
||||
<el-form-item>
|
||||
<el-button type="primary">添加酒品</el-button>
|
||||
</el-form-item>
|
||||
<el-form-item label="搜索">
|
||||
<el-input v-model="query.name" placeholder="酒名"></el-input>
|
||||
</el-form-item>
|
||||
<el-form-item>
|
||||
<el-button type="primary">查询</el-button>
|
||||
<el-button>重置</el-button>
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
</div>
|
||||
<div class="head-container">
|
||||
<el-table :data="tableData.data" v-loading="tableData.loading"></el-table>
|
||||
</div>
|
||||
<addModal />
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import addModal from './addModal'
|
||||
export default {
|
||||
components: {
|
||||
addModal
|
||||
},
|
||||
data() {
|
||||
return {
|
||||
statusList: [
|
||||
{
|
||||
value: 0,
|
||||
label: '已取完'
|
||||
},
|
||||
{
|
||||
value: 1,
|
||||
label: '未取完'
|
||||
}
|
||||
],
|
||||
query: {
|
||||
name: "",
|
||||
telphone: "",
|
||||
status: 1
|
||||
},
|
||||
tableData: {
|
||||
data: [],
|
||||
page: 0,
|
||||
size: 10,
|
||||
loading: false,
|
||||
total: 0
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
</script>
|
||||
131
src/views/application/components/winestorage/addModal.vue
Normal file
131
src/views/application/components/winestorage/addModal.vue
Normal file
@@ -0,0 +1,131 @@
|
||||
<template>
|
||||
<el-dialog :title="form.id ? '编辑分类' : '添加分类'" :visible.sync="dialogVisible" @close="reset">
|
||||
<el-form ref="form" :model="form" :rules="rules" label-width="120px" label-position="left">
|
||||
<el-form-item label="选择用户" prop="nickname">
|
||||
<el-select v-model="form.nickname" placeholder="请输入用户昵称" filterable remote :remote-method="getTableData"
|
||||
:loading="loading">
|
||||
<el-option v-for="item in options" :key="item.id" :label="`${item.nickName}-${item.telephone}`"
|
||||
:value="item.id">
|
||||
</el-option>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
<el-form-item label="选择酒品">
|
||||
<el-select v-model="form.index">
|
||||
<el-option label="顶级" :value="1"></el-option>
|
||||
<el-option label="饮品" :value="2"></el-option>
|
||||
<el-option label="烤串" :value="3"></el-option>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
<el-form-item label="数量">
|
||||
<el-input-number v-model="form.sort" controls-position="right" :min="0"></el-input-number>
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
<span slot="footer" class="dialog-footer">
|
||||
<el-button @click="dialogVisible = false">取 消</el-button>
|
||||
<el-button type="primary" @click="onSubmitHandle">确 定</el-button>
|
||||
</span>
|
||||
</el-dialog>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import { queryAllShopUser } from '@/api/shop'
|
||||
export default {
|
||||
data() {
|
||||
return {
|
||||
dialogVisible: false,
|
||||
loading: false,
|
||||
options: [],
|
||||
form: {
|
||||
id: '',
|
||||
imgUrl: '',
|
||||
name: '',
|
||||
nickname: '',
|
||||
num: '',
|
||||
shopId: '',
|
||||
status: '',
|
||||
telphone: '',
|
||||
unit: '',
|
||||
userid: '',
|
||||
expDay: ''
|
||||
},
|
||||
resetForm: '',
|
||||
rules: {
|
||||
name: [
|
||||
{
|
||||
required: true,
|
||||
message: ' ',
|
||||
trigger: 'blur'
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
},
|
||||
mounted() {
|
||||
this.resetForm = { ...this.form }
|
||||
this.getTableData()
|
||||
},
|
||||
methods: {
|
||||
// 获取用户列表
|
||||
async getTableData(query = '') {
|
||||
this.loading = true
|
||||
try {
|
||||
const res = await queryAllShopUser({
|
||||
telephone: query,
|
||||
})
|
||||
this.loading = false
|
||||
this.options = res.content
|
||||
} catch (error) {
|
||||
this.loading = false
|
||||
console.log(error)
|
||||
}
|
||||
},
|
||||
// 提交
|
||||
onSubmitHandle() {
|
||||
console.log(this.form)
|
||||
this.$refs.form.validate(async valid => {
|
||||
if (valid) {
|
||||
try {
|
||||
this.form.shopId = localStorage.getItem('shopId')
|
||||
let res = await tbShopCategoryPost(this.form, this.form.id ? 'put' : 'post')
|
||||
this.$emit('success', res)
|
||||
this.close()
|
||||
this.$notify({
|
||||
title: '成功',
|
||||
message: `${this.form.id ? '编辑' : '添加'}成功`,
|
||||
type: 'success'
|
||||
});
|
||||
} catch (error) {
|
||||
console.log(error)
|
||||
}
|
||||
}
|
||||
})
|
||||
},
|
||||
show(obj) {
|
||||
// console.log(obj)
|
||||
this.dialogVisible = true
|
||||
if (obj.pid) {
|
||||
this.form.pid = obj.pid
|
||||
}
|
||||
if (obj && obj.id) {
|
||||
this.form = obj
|
||||
if (obj.pic) {
|
||||
setTimeout(() => {
|
||||
this.$refs.uploadImg.fileList = [
|
||||
{
|
||||
url: obj.pic
|
||||
}
|
||||
]
|
||||
}, 100)
|
||||
}
|
||||
}
|
||||
},
|
||||
close() {
|
||||
this.dialogVisible = false
|
||||
},
|
||||
reset() {
|
||||
this.form = { ...this.resetForm }
|
||||
this.$refs.uploadImg.clearFiles()
|
||||
}
|
||||
}
|
||||
}
|
||||
</script>
|
||||
66
src/views/application/components/winestorage/record.vue
Normal file
66
src/views/application/components/winestorage/record.vue
Normal file
@@ -0,0 +1,66 @@
|
||||
<template>
|
||||
<div class="head-container">
|
||||
<div class="head-container">
|
||||
<el-form :model="query" inline>
|
||||
<el-form-item>
|
||||
<el-button type="primary">添加存酒</el-button>
|
||||
</el-form-item>
|
||||
<el-form-item label="搜索">
|
||||
<el-input v-model="query.name" placeholder="酒名/用户昵称"></el-input>
|
||||
</el-form-item>
|
||||
<el-form-item label="手机号">
|
||||
<el-input v-model="query.telphone" placeholder="手机号"></el-input>
|
||||
</el-form-item>
|
||||
<el-form-item label="状态">
|
||||
<el-select v-model="query.status">
|
||||
<el-option v-for="item in statusList" :key="item.value" :value="item.value"
|
||||
:label="item.label"></el-option>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
<el-form-item>
|
||||
<el-button type="primary">查询</el-button>
|
||||
<el-button>重置</el-button>
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
</div>
|
||||
<div class="head-container">
|
||||
<el-table :data="tableData.data" v-loading="tableData.loading"></el-table>
|
||||
</div>
|
||||
<addModal />
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import addModal from './addModal'
|
||||
export default {
|
||||
components: {
|
||||
addModal
|
||||
},
|
||||
data() {
|
||||
return {
|
||||
statusList: [
|
||||
{
|
||||
value: 0,
|
||||
label: '已取完'
|
||||
},
|
||||
{
|
||||
value: 1,
|
||||
label: '未取完'
|
||||
}
|
||||
],
|
||||
query: {
|
||||
name: "",
|
||||
telphone: "",
|
||||
status: 1
|
||||
},
|
||||
tableData: {
|
||||
data: [],
|
||||
page: 0,
|
||||
size: 10,
|
||||
loading: false,
|
||||
total: 0
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
</script>
|
||||
105
src/views/application/index.vue
Normal file
105
src/views/application/index.vue
Normal file
@@ -0,0 +1,105 @@
|
||||
<template>
|
||||
<div class="app-container">
|
||||
<div class="title">应用中心</div>
|
||||
<div class="list">
|
||||
<div class="item" v-for="item in list" :key="item.id" @click="to(item)">
|
||||
<img :src="item.coverImg" class="icon">
|
||||
<div class="info">
|
||||
<div class="name">{{ item.name }}</div>
|
||||
<div class="intro">
|
||||
{{ item.value }}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import { appCenterGet } from "@/api/application";
|
||||
export default {
|
||||
data() {
|
||||
return {
|
||||
list: []
|
||||
}
|
||||
},
|
||||
mounted() {
|
||||
this.appCenterGet()
|
||||
},
|
||||
methods: {
|
||||
// 跳转
|
||||
to(item) {
|
||||
localStorage.setItem('applocation', JSON.stringify(item))
|
||||
this.$router.push({
|
||||
name: item.absUrl
|
||||
})
|
||||
},
|
||||
// 获取应用列表
|
||||
async appCenterGet() {
|
||||
try {
|
||||
const res = await appCenterGet()
|
||||
this.list = res
|
||||
} catch (error) {
|
||||
console.log(error);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
</script>
|
||||
|
||||
<style scoped lang="scss">
|
||||
.title {
|
||||
font-size: 24px;
|
||||
font-weight: bold;
|
||||
padding-top: 10px;
|
||||
}
|
||||
|
||||
.list {
|
||||
padding: 20px 0;
|
||||
display: flex;
|
||||
flex-wrap: wrap;
|
||||
gap: 14px;
|
||||
|
||||
.item {
|
||||
width: 400px;
|
||||
background-color: #f5f5f5;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
padding: 14px;
|
||||
|
||||
&:hover {
|
||||
cursor: pointer;
|
||||
|
||||
.info {
|
||||
.name {
|
||||
color: #39D47A;
|
||||
}
|
||||
|
||||
.intro {
|
||||
color: #39D47A;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.icon {
|
||||
width: 40px;
|
||||
height: 40px;
|
||||
object-fit: cover;
|
||||
}
|
||||
|
||||
.info {
|
||||
flex: 1;
|
||||
padding-left: 10px;
|
||||
|
||||
.name {
|
||||
font-weight: bold;
|
||||
}
|
||||
|
||||
.intro {
|
||||
color: #999;
|
||||
margin-top: 4px;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
</style>
|
||||
154
src/views/application/winestorage.vue
Normal file
154
src/views/application/winestorage.vue
Normal file
@@ -0,0 +1,154 @@
|
||||
<template>
|
||||
<div class="app-container">
|
||||
<div class="header">
|
||||
<div class="item">
|
||||
<img :src="applocation.coverImg" class="icon">
|
||||
<div class="info">
|
||||
<div class="name">{{ applocation.name }}</div>
|
||||
<div class="intro">
|
||||
{{ applocation.value }}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="head-container">
|
||||
<div class="tab_wrap">
|
||||
<div class="tab" :style="{ '--index': tabActive }">
|
||||
<div class="item" v-for="item in tabs" :key="item.value" @click="tabChange(item)">
|
||||
{{ item.label }}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="head-container">
|
||||
<winestorageRecord v-if="tabActive == 0" />
|
||||
<wineRecord v-if="tabActive == 1" />
|
||||
</div>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import winestorageRecord from './components/winestorage/record.vue'
|
||||
import wineRecord from './components/wine/record.vue'
|
||||
export default {
|
||||
components: {
|
||||
winestorageRecord,
|
||||
wineRecord
|
||||
},
|
||||
data() {
|
||||
return {
|
||||
applocation: JSON.parse(localStorage.getItem('applocation')),
|
||||
tabActive: 1,
|
||||
tabs: [
|
||||
{
|
||||
value: 1,
|
||||
label: '存酒记录'
|
||||
},
|
||||
{
|
||||
value: 2,
|
||||
label: '可存酒管理'
|
||||
},
|
||||
{
|
||||
value: 3,
|
||||
label: '存酒统计'
|
||||
}
|
||||
]
|
||||
}
|
||||
},
|
||||
mounted() {
|
||||
},
|
||||
methods: {
|
||||
tabChange(item) {
|
||||
this.tabActive = this.tabs.findIndex(i => i.value == item.value)
|
||||
}
|
||||
}
|
||||
}
|
||||
</script>
|
||||
|
||||
<style scoped lang="scss">
|
||||
.header {
|
||||
display: flex;
|
||||
|
||||
.item {
|
||||
flex: 1;
|
||||
background-color: #f5f5f5;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
padding: 14px;
|
||||
|
||||
&:hover {
|
||||
cursor: pointer;
|
||||
|
||||
.info {
|
||||
.name {
|
||||
color: #39D47A;
|
||||
}
|
||||
|
||||
.intro {
|
||||
color: #39D47A;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.icon {
|
||||
width: 40px;
|
||||
height: 40px;
|
||||
object-fit: cover;
|
||||
}
|
||||
|
||||
.info {
|
||||
flex: 1;
|
||||
padding-left: 10px;
|
||||
|
||||
.name {
|
||||
font-weight: bold;
|
||||
}
|
||||
|
||||
.intro {
|
||||
color: #999;
|
||||
margin-top: 4px;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.tab_wrap {
|
||||
background-color: #f5f5f5;
|
||||
padding: 4px;
|
||||
margin-top: 20px;
|
||||
|
||||
.tab {
|
||||
--w: 150px;
|
||||
height: 40px;
|
||||
display: flex;
|
||||
position: relative;
|
||||
|
||||
|
||||
&::after {
|
||||
content: "";
|
||||
width: var(--w);
|
||||
height: inherit;
|
||||
background-color: #fff;
|
||||
position: absolute;
|
||||
top: 0;
|
||||
left: calc(var(--index) * var(--w));
|
||||
z-index: 1;
|
||||
transition: left .3s ease-in-out;
|
||||
}
|
||||
|
||||
.item {
|
||||
width: var(--w);
|
||||
height: inherit;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
position: relative;
|
||||
z-index: 2;
|
||||
|
||||
&:hover {
|
||||
cursor: pointer;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
</style>
|
||||
Reference in New Issue
Block a user