master
271556543@qq.com 3 years ago
parent 693a5c4bb0
commit 6247637ad8

@ -0,0 +1,9 @@
import request from '@/utils/request'
export function index(params){
return request({
method:'get',
url:'/api/admin/member/index',
params
})
}

@ -0,0 +1,41 @@
import request from '@/utils/request'
export function index(params){
return request({
method:'get',
url:'/api/admin/merchant/index',
params
})
}
export function store(data){
return request({
method:'post',
url:'/api/admin/merchant/store',
data
})
}
export function show(params){
return request({
method:'get',
url:'/api/admin/merchant/show',
params
})
}
export function save(data){
return request({
method:'post',
url:'/api/admin/merchant/save',
data
})
}
export function destroy(params){
return request({
method:'get',
url:'/api/admin/merchant/destroy',
params
})
}

@ -0,0 +1,34 @@
//分类管理
import request from '@/utils/request'
export function index(params){
return request({
method:'get',
url:'/api/admin/product-type/index',
params
})
}
export function store(data){
return request({
method:'post',
url:'/api/admin/product-type/store',
data
})
}
export function save(data){
return request({
method:'post',
url:'/api/admin/product-type/save',
data
})
}
export function destroy(data){
return request({
method:'post',
url:'/api/admin/product-type/destroy',
data
})
}

@ -1,94 +1,372 @@
<!--新增商户-->
<template>
<div>
<Modal draggable title="新建商家" :value.sync="isShow" @on-visible-change="$emit('update:isShow',$event)">
<Form ref="form" :model="form" :rules="rules" label-position="left" :label-width="80">
<FormItem prop="name" label="姓名">
<Row>
<Col span="18" offset="1">
<Input v-model="form.name" placeholder="请输入姓名"/>
</Col>
</Row>
</FormItem>
<FormItem prop="businessNumber" label="营业执照">
<Row>
<Col span="18" offset="1">
<Input v-model="form.businessNumber" placeholder="请输入营业执照"/>
</Col>
</Row>
</FormItem>
<FormItem prop="address" label="地址">
<Row>
<Col span="18" offset="1">
<Input v-model="form.address" placeholder="请输入地址"/>
</Col>
</Row>
</FormItem>
<FormItem label="位置">
<Row>
<Col span="8" offset="1">
<FormItem>
<Input v-model="form.lat"/>
</FormItem>
</Col>
<Col offset="1" span="1">
<div style="font-weight: 500;font-size: 20px;">/</div>
</Col>
<Col span="8" offset="0">
<FormItem>
<Input v-model="form.lng"/>
</FormItem>
</Col>
</Row>
</FormItem>
<Divider></Divider>
<FormItem prop="password" label="密码">
<Row>
<Col span="18" offset="1">
<Input v-model="form.password" placeholder="请输入密码"/>
</Col>
</Row>
</FormItem>
</Form>
</Modal>
<xy-dialog ref="dialog" :is-show.sync="isShow" :title="type === 'add' ? '新增商户' : '编辑商户'" :form="form" :rules="rules" type="form" @submit="submit">
<template v-slot:name>
<div class="xy-table-item">
<div class="xy-table-item-label">
<span style="color: red;font-weight: 600;padding-right: 4px;">*</span>全称
</div>
<div class="xy-table-item-content">
<el-input v-model="form.name" placeholder="请输入商户全称" clearable style="width: 300px;"></el-input>
</div>
</div>
</template>
<template v-slot:logo_id>
<div class="xy-table-item">
<div class="xy-table-item-label">
图片logo
</div>
<div class="xy-table-item-content">
<div class="xy-table-item-content">
<div v-if="form.logo_id" style="position: relative;">
<img :src="form.logo_id" class="avatar">
<Button
shape="circle"
icon="md-close"
type="error"
size="small"
class="img__delete"
@click="form.logo_id = ''"></Button>
</div>
<el-upload
v-else
accept="picture"
:limit="1"
class="avatar-uploader"
list-type="picture-card"
action="/api/admin/upload-file"
:show-file-list="true"
:on-error="uploadFail"
:on-success="uploadSuccess"
:before-upload="uploadBefore">
<i class="el-icon-plus avatar-uploader-icon"></i>
</el-upload>
</div>
</div>
</div>
</template>
<template v-slot:address>
<div class="xy-table-item">
<div class="xy-table-item-label">
地址
</div>
<div class="xy-table-item-content">
<el-input v-model="form.address" placeholder="请输入地址" clearable style="width: 300px;"></el-input>
</div>
</div>
</template>
<template v-slot:slogan>
<div class="xy-table-item">
<div class="xy-table-item-label">
<span style="color: red;font-weight: 600;padding-right: 4px;">*</span>宣传语
</div>
<div class="xy-table-item-content">
<el-input v-model="form.slogan" placeholder="请输入宣传语" clearable style="width: 300px;"></el-input>
</div>
</div>
</template>
<template v-slot:boss>
<div class="xy-table-item">
<div class="xy-table-item-label">
<span style="color: red;font-weight: 600;padding-right: 4px;">*</span>法人/老板
</div>
<div class="xy-table-item-content">
<el-input v-model="form.boss" placeholder="请输入法人/老板" clearable style="width: 300px;"></el-input>
</div>
</div>
</template>
<template v-slot:boss_phone>
<div class="xy-table-item">
<div class="xy-table-item-label">
<span style="color: red;font-weight: 600;padding-right: 4px;">*</span>法人/老板电话
</div>
<div class="xy-table-item-content">
<el-input v-model="form.boss_phone" placeholder="请输入法人/老板电话" clearable style="width: 300px;"></el-input>
</div>
</div>
</template>
<template v-slot:contact>
<div class="xy-table-item">
<div class="xy-table-item-label">
<span style="color: red;font-weight: 600;padding-right: 4px;">*</span>联系人
</div>
<div class="xy-table-item-content">
<el-input v-model="form.contact" placeholder="请输入联系人" clearable style="width: 300px;"></el-input>
</div>
</div>
</template>
<template v-slot:phone>
<div class="xy-table-item">
<div class="xy-table-item-label">
<span style="color: red;font-weight: 600;padding-right: 4px;">*</span>联系人电话
</div>
<div class="xy-table-item-content">
<el-input v-model="form.phone" placeholder="请输入联系人电话" clearable style="width: 300px;"></el-input>
</div>
</div>
</template>
<template v-slot:business_number>
<div class="xy-table-item">
<div class="xy-table-item-label">
<span style="color: red;font-weight: 600;padding-right: 4px;">*</span>营业执照号码
</div>
<div class="xy-table-item-content">
<el-input v-model="form.business_number" placeholder="请输入营业执照号码" clearable style="width: 300px;"></el-input>
</div>
</div>
</template>
<template v-slot:certificate_id>
<div class="xy-table-item">
<div class="xy-table-item-label">
营业执照
</div>
<div class="xy-table-item-content">
<div class="xy-table-item-content">
<div v-if="form.certificate_id" style="position: relative;">
<img :src="form.certificate_id" class="avatar">
<Button
shape="circle"
icon="md-close"
type="error"
size="small"
class="img__delete"
@click="form.certificate_id = ''"></Button>
</div>
<el-upload
v-else
accept="picture"
:limit="1"
class="avatar-uploader"
list-type="picture-card"
action="/api/admin/upload-file"
:show-file-list="true"
:on-error="uploadFail"
:on-success="uploadSuccess1"
:before-upload="uploadBefore">
<i class="el-icon-plus avatar-uploader-icon"></i>
</el-upload>
</div>
</div>
</div>
</template>
<template v-slot:username>
<Divider />
<div class="xy-table-item">
<div class="xy-table-item-label">
<span style="color: red;font-weight: 600;padding-right: 4px;">*</span>简称/用户名
</div>
<div class="xy-table-item-content">
<el-input v-model="form.username" placeholder="请输入联系人电话" clearable style="width: 300px;"></el-input>
</div>
</div>
</template>
<template v-slot:password>
<div class="xy-table-item">
<div class="xy-table-item-label">
<span style="color: red;font-weight: 600;padding-right: 4px;">*</span>密码
</div>
<div class="xy-table-item-content">
<el-input v-model="showPassword" placeholder="请输入密码" clearable style="width: 300px;" @input="e => form.password = e"></el-input>
</div>
</div>
</template>
</xy-dialog>
</div>
</template>
<script>
import {store,show,save} from '@/api/merchant'
import { Message } from 'element-ui'
export default {
props:{
isShow:{
type:Boolean,
default:false
}
},
data() {
return {
id:'',
type:'add',
isShow:false,
form:{
name:"",
businessNumber:"",
name:"",//
logo_id:'',//
address:"",
slogan:'',
boss:'',
boss_phone:'',
contact:'',
phone:'',
certificate_id:'',//
business_number:'',//
state:1,
username:"",//
password:"",
lat:"",
lng:"",
},
showPassword:'',
rules:{
name: [
{ required: true, message: '请填写姓名', trigger: 'blur' }
],
businessNumber: [
{ required: true, message: '请填写营业执照', trigger: 'blur' }
slogan:[
{ required: true, message: '请填写宣传语', trigger: 'blur' }
],
boss:[
{ required: true, message: '请填写法人/老板', trigger: 'blur' }
],
boss_phone:[
{ required: true, message: '请填写法人/老板电话', trigger: 'blur' }
],
contact:[
{ required: true, message: '请填写联系人', trigger: 'blur' }
],
address: [
{ required: true, message: '请填写地址', trigger: 'blur' }
phone:[
{ required: true, message: '请填写联系人电话', trigger: 'blur' }
],
username:[
{ required: true, message: '请填写简称/用户名', trigger: 'blur' }
],
password:[
{ required: true, message: '请填写密码', trigger: 'blur' }
],
business_number:[
{ required: true, message:'请填写营业执照编号'}
]
}
}
},
methods: {
//
uploadFail(err){
console.log(err)
},
uploadSuccess(response){
console.log(response)
this.form.logo_id = response.url
},
uploadSuccess1(response){
console.log(response)
this.form.certificate_id = response.url
},
uploadBefore(file){
console.log(file)
if((file.size/1000) > 2024){
Message({
type:'warning',
message:'上传图片大小超过2M'
})
return false
}
},
submit(){
if(this.type === 'add'){
store(this.form).then(res => {
this.isShow = false
this.$emit('refresh')
Message({
type:'success',
message:'新增商户成功'
})
})
return
}
if(this.type === 'editor'){
save({
id:this.id,
name:this.form.name,
logo_id:this.form.logo_id,
address:this.form.address,
slogan:this.form.slogan,
boss:this.form.boss,
boss_phone:this.form.boss_phone,
contact:this.form.contact,
phone:this.form.phone,
certificate_id:this.form.certificate_id,
business_number:this.form.business_number,
username:this.form.username,
password:this.form.password
}).then(res => {
Message({
type:'success',
message:'编辑成功'
})
this.isShow = false
this.$emit('refresh')
})
}
}
},
watch:{
isShow(newVal){
if(newVal){
if(this.type === 'editor'){
show({id:this.id}).then(res => {
this.form = {
name:res.name,//
logo_id:res.logo_id,//
address:res.address,
slogan:res.slogan,
boss:res.boss,
boss_phone:res.boss_phone,
contact:res.contact,
phone:res.phone,
certificate_id:res.certificate_id,//
business_number:res.business_number,//
state:res.state,
username:res.username,//
password:res.password,
}
})
}
}else{
this.id = ''
this.$refs['dialog'].reset()
}
}
}
}
</script>
<style scoped lang="scss">
.img__delete{
transform: scale(0.8,0.8);
position: absolute;
top: 1px;
right: 12px;
}
::v-deep .avatar-uploader .el-upload {
border: 1px dashed #d9d9d9;
border-radius: 6px;
cursor: pointer;
position: relative;
overflow: hidden;
}
::v-deep .avatar-uploader .el-upload:hover {
border-color: #409EFF;
}
::v-deep .el-upload--picture-card {
font-size: 28px;
color: #8c939d;
width: 80px !important;
height: 80px !important;
line-height: 80px !important;
text-align: center;
}
::v-deep .avatar-uploader-icon{
font-size: 28px;
color: #8c939d;
width: 80px !important;
height: 80px !important;
line-height: 80px !important;
text-align: center;
}
::v-deep .avatar {
width: 80px !important;
display: block;
border-radius: 6px;
}
::v-deep .xy-table-item-label{
width: 160px !important;
}
</style>

@ -1,21 +0,0 @@
<script>
export default {
data () {
return {
}
},
computed: {
},
methods: {
},
render(createElement, context) {
}
}
</script>
<style scoped lang="scss">
</style>

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

@ -0,0 +1,145 @@
<template>
<div>
<xy-dialog :title="type === 'add' ? '新增分类' : '编辑分类'" :is-show.sync="isShow" type="form" :form="form" :rules="rules" ref="dialog" @submit="submit">
<template v-slot:pid>
<div class="xy-table-item">
<div class="xy-table-item-label">
<span style="color: red;font-weight: 600;padding-right: 4px;">*</span>父级
</div>
<div class="xy-table-item-content">
<el-cascader
:key="cascaderId"
clearable
style="width: 300px;"
:show-all-levels="false"
:value="form.pid"
:options="types"
:props="{value:'id',label:'name',checkStrictly:true}"
@change="handleChange"></el-cascader>
</div>
</div>
</template>
<template v-slot:name>
<div class="xy-table-item">
<div class="xy-table-item-label">
<span style="color: red;font-weight: 600;padding-right: 4px;">*</span>菜单名称
</div>
<div class="xy-table-item-content">
<el-input v-model="form.name" placeholder="请填写分类名称" clearable style="width: 300px;"></el-input>
</div>
</div>
</template>
<template v-slot:sortnumber>
<div class="xy-table-item">
<div class="xy-table-item-label">
排序
</div>
<div class="xy-table-item-content">
<el-input v-model="form.sortnumber" placeholder="请填写排序" clearable style="width: 300px;"></el-input>
</div>
</div>
</template>
</xy-dialog>
</div>
</template>
<script>
import {index,store,save} from "@/api/type"
import { Message } from 'element-ui'
export default {
data() {
return {
cascaderId:1,
id:'',
isShow:false,
type:'add',
types:[{}],
form:{
pid:0,
name:'',
sortnumber:''
},
rules:{
pid:[
{required:true,message:'请选择父级编号'}
],
name:[
{required:true,message:'请填写名称'}
]
}
}
},
methods: {
async getTypes(){
const res = await index()
this.types = [{
id:0,
name:'根结点',
children:res
}]
},
handleChange(e){
if(e.length > 0){
this.form.pid = e.at(-1)
}else{
this.form.pid = ''
}
},
submit(){
if(this.type === 'add'){
store({
pid:this.form.pid,
name:this.form.name,
sortnumber:this.form.sortnumber
}).then(res => {
Message({
type:'success',
message:'新增成功'
})
this.$refs['dialog'].reset()
this.id = ''
this.isShow = false
this.$emit('refresh')
})
return
}
if(this.type === 'editor'){
save({
id:this.id,
pid:this.form.pid,
name:this.form.name,
sortnumber:this.form.sortnumber
}).then(res => {
Message({
type:'success',
message:'更改成功'
})
this.$refs['dialog'].reset()
this.id = ''
this.isShow = false
this.$emit('refresh')
})
}
}
},
watch:{
isShow(newVal){
if(newVal){
this.getTypes()
}else{
this.types = []
this.$refs['dialog'].reset()
this.id = ''
}
},
types(){
++this.cascaderId
}
}
}
</script>
<style scoped lang="scss">
</style>

@ -0,0 +1,103 @@
<template>
<div style="padding: 0 20px">
<div ref="lxHeader">
<lx-header icon="md-apps" text="会员管理" style="margin-bottom: 10px; border: 0px; margin-top: 15px">
<div slot="content"></div>
<slot>
<div>
<Input style="width: 200px; margin-right: 10px" placeholder="关键字搜索" />
<Button type="primary">查询</Button>
<Button type="primary" style="margin-left: 10px" >新增分类</Button>
</div>
</slot>
</lx-header>
</div>
<xy-table></xy-table>
<div style="display: flex;justify-content: flex-end;">
<Page :total="total" show-elevator @on-change="pageChange"/>
</div>
</div>
</template>
<script>
import {index} from '@/api/member'
export default {
data() {
return {
select:{
pageSize:10,
pageIndex:1
},
total:0,
list:[],
table:[
{
prop:'name',
label:'姓名',
width:180,
sortable:false
},
{
prop:'phone',
label:'电话',
width:220
},
{
prop:'due_date',
label:'预产期',
width: 200
},
{
prop:'area',
label:'所属区域',
width: 160,
},
{
prop:'address',
label:'住址',
align:'left',
width: 300
},
{
prop:'hospital',
label:'建卡医院',
width: 200
},
{
prop:'promotion',
label:'推广人员'
},
{
}
]
}
},
methods: {
pageChange(e){
this.select.pageIndex = e
this.getMembers()
},
async getMembers(){
const res = await index({
page_size:this.select.pageSize,
page:this.select.pageIndex
})
console.log(res)
this.total = res.total
this.list = res.data
}
},
mounted() {
this.getMembers()
}
}
</script>
<style scoped lang="scss">
</style>

@ -46,7 +46,9 @@ module.exports = {
//before: require('./mock/mock-server.js'),
proxy: {
[process.env.VUE_APP_BASE_API]: {
target: 'https://yunyubang.ali251.langye.net/',
target:
'http://yybtest.ali251.langye.net/',
//'https://yunyubang.ali251.langye.net/',
changeOrigin: true, //配置跨域
pathRewrite: {
['^' + process.env.VUE_APP_BASE_API]: ''

Loading…
Cancel
Save