删除无用代码 开发后台作者和笔记接口

This commit is contained in:
wxl
2025-01-08 23:15:45 +08:00
parent d1f8ee0787
commit 45f2ed3a2a
89 changed files with 940 additions and 13011 deletions

7
SQLREADME.md Normal file
View File

@@ -0,0 +1,7 @@
#### 删除无用字段
ALTER TABLE `business_note`
DROP COLUMN `AUTHOR_AVATAR`,
DROP COLUMN `UP_COUNT`,
DROP COLUMN `STAR_COUNT`;

View File

@@ -18,6 +18,7 @@ import com.dd.admin.business.upNotes.service.UpNotesService;
import com.dd.admin.business.upReplys.service.UpReplysService;
import com.dd.admin.common.aop.operationLog.aop.OperLog;
import com.dd.admin.common.aop.operationLog.aop.OperType;
import com.dd.admin.common.exception.ApiException;
import com.dd.admin.common.model.result.ResultBean;
import com.github.xiaoymin.knife4j.annotations.ApiOperationSupport;
import io.swagger.annotations.ApiModel;
@@ -51,6 +52,9 @@ public class AuthAuthorApi {
public ResultBean<Author> getMine() {
String authorId = String.valueOf(request.getAttribute("authorId"));
Author author = authorService.getById(authorId);
if(author==null){
throw new ApiException(700,"当前用户信息不存在~");
}
if(author.getBirth()!=null){
author.setAge(DateUtil.ageOfNow(author.getBirth()));
}

View File

@@ -282,7 +282,6 @@ public class AuthNoteApi {
Note note = BeanUtil.copyProperties(noteDto, Note.class);
note.setAuthorId(author.getAuthorId());
note.setAuthorName(author.getAuthorName());
note.setAuthorAvatar(author.getAvatarUrl());
note.setIpAddress(IPUtils.getIpAddr(request)); // 请求IP
note.setIpRealAddress(AddressUtils.getRealAddress(note.getIpAddress()));
noteService.save(note);
@@ -321,7 +320,6 @@ public class AuthNoteApi {
Note note = BeanUtil.copyProperties(noteDto, Note.class);
note.setAuthorId(author.getAuthorId());
note.setAuthorName(author.getAuthorName());
note.setAuthorAvatar(author.getAvatarUrl());
note.setIpAddress(IPUtils.getIpAddr(request)); // 请求IP
note.setIpRealAddress(AddressUtils.getRealAddress(note.getIpAddress()));
noteService.updateById(note);

View File

@@ -58,8 +58,13 @@ public class LoginApi {
//验证后登陆
Author author = authorService.selectAuthorByPhoneNumber(phoneLoginDto.getPhoneNumber());
if(author==null){
author = authorService.createNewAuthor(phoneLoginDto.getPhoneNumber());
author = authorService.createNewAuthor(phoneLoginDto.getPhoneNumber());
}else if(author.getDeleted().equals(1)){
throw new ApiException("当前用户状态异常~");
}
// else if(author.getAuthorStatus().equals(1)){
// throw new ApiException("当前用户已冻结~");
// }
//根据用户id生成token
final String token = jwtTokenUtil.generateTokenByUserId(author.getAuthorId());
author.setToken(token);

View File

@@ -112,5 +112,6 @@ public class AuthorDto {
@ApiModelProperty(value = "手机号")
private String phoneNumber;
@ApiModelProperty(value = "关键字搜索")
private String keyword;
}

View File

@@ -26,5 +26,7 @@ public interface AuthorMapper extends BaseMapper<Author> {
List<AuthorVo> selectAuthorList(@Param("authorDto") AuthorDto authorDto);
Author selectAuthorByPhoneNumber(@Param("phoneNumber") String phoneNumber);
Long selectAuthorUpAndStarTotalCount(@Param("authorId") String authorId);
}

View File

@@ -39,9 +39,26 @@
</sql>
<select id="selectAuthorPage" resultType="com.dd.admin.business.author.domain.AuthorVo">
select
*
from business_author where 1 = 1
SELECT
(
select count(1) from business_follow where follow_id = a.author_id
) as follow,
(
select count(1) from business_follow where author_id = a.author_id
) as fans,
(
select count(1) from business_up_notes where author_id = a.author_id
) as upCount,
(
select count(1) from business_star_notes where author_id = a.author_id
) as starCount,a.*
FROM
business_author a where 1=1
<if test="authorDto.keyword != null and authorDto.keyword != ''">
and (a.AUTHOR_NAME like CONCAT('%', #{authorDto.keyword}, '%')
or a.PHONE_NUMBER like CONCAT('%', #{authorDto.keyword}, '%'))
</if>
ORDER BY a.create_time desc
</select>
<select id="selectAuthorList" resultType="com.dd.admin.business.author.domain.AuthorVo">
@@ -60,4 +77,8 @@
SELECT COUNT(*) AS count_value FROM business_up_replys WHERE AUTHOR_ID = #{authorId}
) AS subquery_counts;
</select>
<select id="selectAuthorByPhoneNumber" resultType="com.dd.admin.business.author.entity.Author"
parameterType="java.lang.String">
select * from business_author where phone_number = #{phoneNumber}
</select>
</mapper>

View File

@@ -47,10 +47,7 @@ public class AuthorServiceImpl extends ServiceImpl<AuthorMapper, Author> impleme
@Override
public Author selectAuthorByPhoneNumber(String phoneNumber) {
LambdaQueryWrapper<Author> queryWrapper = new LambdaQueryWrapper<>();
queryWrapper.eq(Author::getPhoneNumber,phoneNumber);
Author author = baseMapper.selectOne(queryWrapper);
return author;
return baseMapper.selectAuthorByPhoneNumber(phoneNumber);
}
@Override

View File

@@ -11,12 +11,14 @@ import com.baomidou.mybatisplus.annotation.TableField;
import java.io.Serializable;
import java.util.List;
import com.fasterxml.jackson.annotation.JsonFormat;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import lombok.EqualsAndHashCode;
import javax.validation.constraints.NotBlank;
import com.dd.admin.common.model.UpdateGroup;
import org.springframework.format.annotation.DateTimeFormat;
/**
@@ -100,5 +102,8 @@ public class NoteDto {
//传入此参数 如果你点赞了会显示相应状态
private String followId;
@ApiModelProperty(value = "关键字搜索")
private String keyword;
private Integer noteStatus;
}

View File

@@ -95,4 +95,5 @@ public class NoteVo {
@ApiModelProperty(value = "图片集合")
private List<String> imgList;
private Integer noteStatus;
}

View File

@@ -58,10 +58,6 @@ public class Note implements Serializable {
@TableField("AUTHOR_ID")
private String authorId;
@ApiModelProperty(value = "作者头像")
@TableField("AUTHOR_AVATAR")
private String authorAvatar;
@ApiModelProperty(value = "作者名字")
@TableField("AUTHOR_NAME")
private String authorName;
@@ -96,13 +92,7 @@ public class Note implements Serializable {
@TableField("IP_REAL_ADDRESS")
private String ipRealAddress;
@ApiModelProperty(value = "点赞数")
@TableField("UP_COUNT")
private Long upCount;
@ApiModelProperty(value = "收藏数")
@TableField("STAR_COUNT")
private Long starCount;
@ApiModelProperty(value = "0正常")
@TableField("NOTE_STATUS")
private Integer noteStatus;
}

View File

@@ -11,7 +11,6 @@
<result column="NOTE_CATEGORY_NAME" property="noteCategoryName" />
<result column="NOTE_TYPE" property="noteType" />
<result column="AUTHOR_ID" property="authorId" />
<result column="AUTHOR_AVATAR" property="authorAvatar" />
<result column="AUTHOR_NAME" property="authorName" />
<result column="FIRST_PICTURE" property="firstPicture" />
<result column="VERSION" property="version" />
@@ -20,8 +19,6 @@
<result column="UPDATE_TIME" property="updateTime" />
<result column="IP_ADDRESS" property="ipAddress" />
<result column="IP_REAL_ADDRESS" property="ipRealAddress" />
<result column="UP_COUNT" property="upCount" />
<result column="STAR_COUNT" property="starCount" />
</resultMap>
<!-- 通用查询结果列 -->
@@ -31,26 +28,25 @@
<select id="selectNotePage" resultType="com.dd.admin.business.note.domain.NoteVo">
SELECT
a.*,
(SELECT
COALESCE (COUNT(e.note_id), 0)
(
SELECT
IFNULL(COUNT(e.note_id), 0)
FROM
business_star_notes e
WHERE
e.note_id = a.note_id
GROUP BY
e.note_id
) AS starCount,
(
SELECT
COALESCE (COUNT(d.note_id), 0)
IFNULL(COUNT(d.note_id), 0)
FROM
business_up_notes d
WHERE
d.note_id = a.note_id
GROUP BY
d.note_id
) AS upCount
) AS upCount,
d.AVATAR_URL AS authorAvatar,
a.*,
d.AUTHOR_NAME AS authorName
<if test="noteDto.followId!= null and noteDto.followId!= ''">
,CASE WHEN EXISTS (
SELECT 1
@@ -71,8 +67,15 @@
business_star_notes b ON a.note_id = b.note_id
LEFT JOIN
business_up_notes c ON a.note_id = c.note_id
LEFT JOIN
business_author d ON a.author_id = d.author_id
WHERE
a.deleted = 0
<if test="noteDto.keyword != null and noteDto.keyword != ''">
and (a.NOTE_TITLE like CONCAT('%', #{noteDto.keyword}, '%')
or a.NOTE_CONTENT like CONCAT('%', #{noteDto.keyword}, '%'))
</if>
<if test="noteDto.authorId!= null and noteDto.authorId!= ''">
AND a.AUTHOR_ID = #{noteDto.authorId}
</if>

View File

@@ -54,8 +54,11 @@ public class ApiInterceptor implements HandlerInterceptor {
request.setAttribute("authorId",authorId);
// Author author = authorService.getById(authorId);
// request.setAttribute("author",author);
Author author = authorService.getById(authorId);
request.setAttribute("author",author);
if(author.getAuthorStatus().equals(1)){
throw new ApiException(700,"当前用户已冻结~");
}
return true;
}
}

View File

@@ -6,3 +6,5 @@ VUE_APP_BASE_API = 'http://127.0.0.1:8080'
# system name
VUE_APP_SYSTEM_NAME = 'DD ADMIN'
VUE_APP_SYSTEM_LOGO = 'logo.png'

View File

@@ -1,41 +0,0 @@
import request from '@/utils/request'
export function getCardPage(params) {
return request({
url: '/admin/card/page',
method: 'get',
params
})
}
export function getCardList(params) {
return request({
url: '/admin/card/list',
method: 'get',
params
})
}
export function addCard(data) {
return request({
url: '/admin/card/add',
method: 'post',
data: data
})
}
export function editCard(data) {
return request({
url: '/admin/card/update',
method: 'post',
data: data
})
}
export function deleteCard(cardId) {
return request({
url: '/admin/card/delete/' + cardId,
method: 'get'
})
}

View File

@@ -1,41 +0,0 @@
import request from '@/utils/request'
export function getCategoryPage(params) {
return request({
url: '/admin/category/page',
method: 'get',
params
})
}
export function getCategoryList(params) {
return request({
url: '/admin/category/list',
method: 'get',
params
})
}
export function addCategory(data) {
return request({
url: '/admin/category/add',
method: 'post',
data: data
})
}
export function editCategory(data) {
return request({
url: '/admin/category/update',
method: 'post',
data: data
})
}
export function deleteCategory(categoryId) {
return request({
url: '/admin/category/delete/' + categoryId,
method: 'get'
})
}

View File

@@ -1,41 +0,0 @@
import request from '@/utils/request'
export function getSellDetailServerPage(params) {
return request({
url: '/admin/detailServer/page',
method: 'get',
params
})
}
export function getSellDetailServerList(params) {
return request({
url: '/admin/detailServer/list',
method: 'get',
params
})
}
export function addSellDetailServer(data) {
return request({
url: '/admin/detailServer/add',
method: 'post',
data: data
})
}
export function editSellDetailServer(data) {
return request({
url: '/admin/detailServer/update',
method: 'post',
data: data
})
}
export function deleteSellDetailServer(detailServerId) {
return request({
url: '/admin/detailServer/delete/' + detailServerId,
method: 'get'
})
}

View File

@@ -1,49 +0,0 @@
import request from '@/utils/request'
export function getMemberPage(params) {
return request({
url: '/admin/member/page',
method: 'get',
params
})
}
export function getMemberList(params) {
return request({
url: '/admin/member/list',
method: 'get',
params
})
}
export function getMemberSearchList(params) {
return request({
url: '/admin/member/searchList',
method: 'get',
params
})
}
export function addMember(data) {
return request({
url: '/admin/member/add',
method: 'post',
data: data
})
}
export function editMember(data) {
return request({
url: '/admin/member/update',
method: 'post',
data: data
})
}
export function deleteMember(memberId) {
return request({
url: '/admin/member/delete/' + memberId,
method: 'get'
})
}

View File

@@ -1,49 +0,0 @@
import request from '@/utils/request'
export function getMemberCardPage(params) {
return request({
url: '/admin/memberCard/page',
method: 'get',
params
})
}
export function getMemberCardList(params) {
return request({
url: '/admin/memberCard/list',
method: 'get',
params
})
}
export function getMemberCardSearchList(params) {
return request({
url: '/admin/memberCard/searchList',
method: 'get',
params
})
}
export function addMemberCard(data) {
return request({
url: '/admin/memberCard/add',
method: 'post',
data: data
})
}
export function editMemberCard(data) {
return request({
url: '/admin/memberCard/update',
method: 'post',
data: data
})
}
export function deleteMemberCard(memberCardId) {
return request({
url: '/admin/memberCard/delete/' + memberCardId,
method: 'get'
})
}

View File

@@ -1,25 +0,0 @@
import request from '@/utils/request'
export function buildCard(data) {
return request({
url: '/pay/buildCard',
method: 'post',
data: data
})
}
export function chargedCard(data) {
return request({
url: '/pay/chargedCard',
method: 'post',
data: data
})
}
export function productPay(data) {
return request({
url: '/pay/productPay',
method: 'post',
data: data
})
}

View File

@@ -1,41 +0,0 @@
import request from '@/utils/request'
export function getProductPage(params) {
return request({
url: '/admin/product/page',
method: 'get',
params
})
}
export function getProductList(params) {
return request({
url: '/admin/product/list',
method: 'get',
params
})
}
export function addProduct(data) {
return request({
url: '/admin/product/add',
method: 'post',
data: data
})
}
export function editProduct(data) {
return request({
url: '/admin/product/update',
method: 'post',
data: data
})
}
export function deleteProduct(productId) {
return request({
url: '/admin/product/delete/' + productId,
method: 'get'
})
}

View File

@@ -1,48 +0,0 @@
import request from '@/utils/request'
export function getSellPage(params) {
return request({
url: '/admin/sell/page',
method: 'get',
params
})
}
export function getSellList(params) {
return request({
url: '/admin/sell/list',
method: 'get',
params
})
}
export function addSell(data) {
return request({
url: '/admin/sell/add',
method: 'post',
data: data
})
}
export function editSell(data) {
return request({
url: '/admin/sell/update',
method: 'post',
data: data
})
}
export function deleteSell(sellId) {
return request({
url: '/admin/sell/delete/' + sellId,
method: 'get'
})
}
export function cancelSell(data) {
return request({
url: '/admin/sell/cancel',
method: 'post',
data: data
})
}

View File

@@ -1,41 +0,0 @@
import request from '@/utils/request'
export function getSellDetailPage(params) {
return request({
url: '/admin/sellDetail/page',
method: 'get',
params
})
}
export function getSellDetailList(params) {
return request({
url: '/admin/sellDetail/list',
method: 'get',
params
})
}
export function addSellDetail(data) {
return request({
url: '/admin/sellDetail/add',
method: 'post',
data: data
})
}
export function editSellDetail(data) {
return request({
url: '/admin/sellDetail/update',
method: 'post',
data: data
})
}
export function deleteSellDetail(sellDetailId) {
return request({
url: '/admin/sellDetail/delete/' + sellDetailId,
method: 'get'
})
}

View File

@@ -1,41 +0,0 @@
import request from '@/utils/request'
export function getSelljsonPage(params) {
return request({
url: '/admin/sellJson/page',
method: 'get',
params
})
}
export function getSelljsonList(params) {
return request({
url: '/admin/sellJson/list',
method: 'get',
params
})
}
export function addSelljson(data) {
return request({
url: '/admin/sellJson/add',
method: 'post',
data: data
})
}
export function editSelljson(data) {
return request({
url: '/admin/sellJson/update',
method: 'post',
data: data
})
}
export function deleteSelljson(sellJsonId) {
return request({
url: '/admin/sellJson/delete/' + sellJsonId,
method: 'get'
})
}

View File

@@ -1,41 +0,0 @@
import request from '@/utils/request'
export function getSellpayPage(params) {
return request({
url: '/admin/sellPay/page',
method: 'get',
params
})
}
export function getSellpayList(params) {
return request({
url: '/admin/sellPay/list',
method: 'get',
params
})
}
export function addSellpay(data) {
return request({
url: '/admin/sellPay/add',
method: 'post',
data: data
})
}
export function editSellpay(data) {
return request({
url: '/admin/sellPay/update',
method: 'post',
data: data
})
}
export function deleteSellpay(sellPayId) {
return request({
url: '/admin/sellPay/delete/' + sellPayId,
method: 'get'
})
}

View File

@@ -1,41 +0,0 @@
import request from '@/utils/request'
export function getServerPage(params) {
return request({
url: '/admin/server/page',
method: 'get',
params
})
}
export function getServerList(params) {
return request({
url: '/admin/server/list',
method: 'get',
params
})
}
export function addServer(data) {
return request({
url: '/admin/server/add',
method: 'post',
data: data
})
}
export function editServer(data) {
return request({
url: '/admin/server/update',
method: 'post',
data: data
})
}
export function deleteServer(serverId) {
return request({
url: '/admin/server/delete/' + serverId,
method: 'get'
})
}

View File

@@ -1,10 +0,0 @@
import request from '@/utils/request'
export function getDashboardInfo(params) {
return request({
url: '/admin/stats/getDashboardInfo',
method: 'get',
params
})
}

View File

@@ -1,49 +0,0 @@
import request from '@/utils/request'
export function getStockPage(params) {
return request({
url: '/admin/stock/page',
method: 'get',
params
})
}
export function getStockList(params) {
return request({
url: '/admin/stock/list',
method: 'get',
params
})
}
export function addStock(data) {
return request({
url: '/admin/stock/add',
method: 'post',
data: data
})
}
export function addStockOut(data) {
return request({
url: '/admin/stock/addStockOut',
method: 'post',
data: data
})
}
export function editStock(data) {
return request({
url: '/admin/stock/update',
method: 'post',
data: data
})
}
export function deleteStock(stockId) {
return request({
url: '/admin/stock/delete/' + stockId,
method: 'get'
})
}

View File

@@ -1,41 +0,0 @@
import request from '@/utils/request'
export function getStockDetailPage(params) {
return request({
url: '/admin/stockDetail/page',
method: 'get',
params
})
}
export function getStockDetailList(params) {
return request({
url: '/admin/stockDetail/list',
method: 'get',
params
})
}
export function addStockDetail(data) {
return request({
url: '/admin/stockDetail/add',
method: 'post',
data: data
})
}
export function editStockDetail(data) {
return request({
url: '/admin/stockDetail/update',
method: 'post',
data: data
})
}
export function deleteStockDetail(stockDetailId) {
return request({
url: '/admin/stockDetail/delete/' + stockDetailId,
method: 'get'
})
}

View File

@@ -27,6 +27,9 @@ import '@/permission' // permission control
// const { mockXHR } = require('../mock')
// mockXHR()
// }
import MChat from '@maybecode/m-chat'
Vue.use(MChat)
// set ElementUI lang to EN
Vue.use(ElementUI, { locale })

View File

@@ -30,16 +30,6 @@
重置
</el-button>
</el-button-group>
<el-button
size="small"
class="filter-item"
type="primary"
icon="el-icon-plus"
style="margin-left: 10px;"
@click="add"
>
新增
</el-button>
</div>
<el-table
@@ -55,26 +45,17 @@
<el-table-column
label="序号"
width="150"
width="80"
align="center"
>
<template slot-scope="scope">
{{ scope.$index+1 }}
</template>
</el-table-column>
<el-table-column
label="作者id"
width="160"
align="center"
>
<template slot-scope="scope">
{{ scope.row.authorId }}
</template>
</el-table-column>
<el-table-column
label="作者号"
width="160"
label="小红书号"
width="150"
align="center"
>
<template slot-scope="scope">
@@ -83,36 +64,81 @@
</el-table-column>
<el-table-column
label="作者姓名"
width="160"
label="昵称"
width="120"
align="center"
>
<template slot-scope="scope">
{{ scope.row.authorName }}
</template>
</el-table-column>
<el-table-column
label="头像id"
width="160"
label="账号"
width="160"
align="center"
>
<template slot-scope="scope">
{{ scope.row.phoneNumber }}
</template>
</el-table-column>
<el-table-column
label="头像"
width="130"
align="center"
>
<template slot-scope="scope">
{{ scope.row.avatarId }}
<el-avatar shape="circle" :size="80" fit="cover" :src="scope.row.avatarUrl "></el-avatar>
</template>
</el-table-column>
<el-table-column
label="头像地址"
width="160"
align="center"
>
<template slot-scope="scope">
{{ scope.row.avatarUrl }}
</template>
</el-table-column>
<el-table-column
<el-table-column
label="关注数"
width="120"
align="center"
>
<template slot-scope="scope">
{{ scope.row.follow }}
</template>
</el-table-column>
<el-table-column
label="粉丝数"
width="120"
align="center"
>
<template slot-scope="scope">
{{ scope.row.fans }}
</template>
</el-table-column>
<el-table-column
label="点赞数"
width="120"
align="center"
>
<template slot-scope="scope">
{{ scope.row.upCount }}
</template>
</el-table-column>
<el-table-column
label="收藏数"
width="120"
align="center"
>
<template slot-scope="scope">
{{ scope.row.starCount }}
</template>
</el-table-column>
<el-table-column
label="简介"
width="160"
align="center"
@@ -122,9 +148,60 @@
</template>
</el-table-column>
<el-table-column
label="创建时间"
width="160"
align="center"
>
<template slot-scope="scope">
{{ scope.row.createTime }}
</template>
</el-table-column>
<el-table-column
label="ip地址"
width="160"
align="center"
>
<template slot-scope="scope">
{{ scope.row.ipAddress }}
</template>
</el-table-column>
<el-table-column
label="真实ip地址"
width="160"
align="center"
>
<template slot-scope="scope">
{{ scope.row.ipRealAddress }}
</template>
</el-table-column>
<el-table-column
label="冻结状态"
width="160"
align="center"
>
<template slot-scope="scope">
{{ scope.row.authorStatus==0?'正常':'冻结' }}
</template>
</el-table-column>
<el-table-column
label="删除状态"
width="160"
align="center"
>
<template slot-scope="scope">
{{ scope.row.deleted==0?'正常':'删除' }}
</template>
</el-table-column>
<el-table-column
label="性别"
width="160"
label="性别 1男 2女"
width="120"
align="center"
>
<template slot-scope="scope">
@@ -144,7 +221,7 @@
<el-table-column
label="职业"
width="160"
width="120"
align="center"
>
<template slot-scope="scope">
@@ -154,7 +231,7 @@
<el-table-column
label="地区"
width="160"
width="120"
align="center"
>
<template slot-scope="scope">
@@ -164,7 +241,7 @@
<el-table-column
label="学校"
width="160"
width="120"
align="center"
>
<template slot-scope="scope">
@@ -172,135 +249,8 @@
</template>
</el-table-column>
<el-table-column
label="背景图"
width="160"
align="center"
>
<template slot-scope="scope">
{{ scope.row.backGroundId }}
</template>
</el-table-column>
<el-table-column
label="背景图地址"
width="160"
align="center"
>
<template slot-scope="scope">
{{ scope.row.backGroundUrl }}
</template>
</el-table-column>
<el-table-column
label="关注数"
width="160"
align="center"
>
<template slot-scope="scope">
{{ scope.row.follow }}
</template>
</el-table-column>
<el-table-column
label="粉丝数"
width="160"
align="center"
>
<template slot-scope="scope">
{{ scope.row.fans }}
</template>
</el-table-column>
<el-table-column
label="点赞数"
width="160"
align="center"
>
<template slot-scope="scope">
{{ scope.row.upCount }}
</template>
</el-table-column>
<el-table-column
label="收藏数"
width="160"
align="center"
>
<template slot-scope="scope">
{{ scope.row.starCount }}
</template>
</el-table-column>
<el-table-column
label="0正常"
width="160"
align="center"
>
<template slot-scope="scope">
{{ scope.row.authorStatus }}
</template>
</el-table-column>
<el-table-column
label="乐观锁字段"
width="160"
align="center"
>
<template slot-scope="scope">
{{ scope.row.version }}
</template>
</el-table-column>
<el-table-column
label="0正常 1删除"
width="160"
align="center"
>
<template slot-scope="scope">
{{ scope.row.deleted }}
</template>
</el-table-column>
<el-table-column
label="创建时间"
width="160"
align="center"
>
<template slot-scope="scope">
{{ scope.row.createTime }}
</template>
</el-table-column>
<el-table-column
label="修改时间"
width="160"
align="center"
>
<template slot-scope="scope">
{{ scope.row.updateTime }}
</template>
</el-table-column>
<el-table-column
label="ip地址"
width="160"
align="center"
>
<template slot-scope="scope">
{{ scope.row.ipAddress }}
</template>
</el-table-column>
<el-table-column
label="真实ip地址"
width="160"
align="center"
>
<template slot-scope="scope">
{{ scope.row.ipRealAddress }}
</template>
</el-table-column>
<el-table-column
label="真实姓名"
@@ -322,15 +272,7 @@
</template>
</el-table-column>
<el-table-column
label="手机号"
width="160"
align="center"
>
<template slot-scope="scope">
{{ scope.row.phoneNumber }}
</template>
</el-table-column>
<el-table-column
@@ -349,14 +291,14 @@
>
修改
</el-button>
<el-button
type="danger"
icon="el-icon-delete"
size="mini"
@click="del(scope)"
>
删除
</el-button>
<!-- <el-button-->
<!-- type="danger"-->
<!-- icon="el-icon-delete"-->
<!-- size="mini"-->
<!-- @click="del(scope)"-->
<!-- >-->
<!-- 删除-->
<!-- </el-button>-->
</el-button-group>
</template>
</el-table-column>

View File

@@ -18,24 +18,16 @@
style="height: 90%;"
>
<el-form-item label="作者id" prop="authorId" class="is-required">
<el-input v-model="temp.authorId" placeholder="作者id" />
</el-form-item>
<el-form-item label="作者号" prop="authorNo" class="is-required">
<el-input v-model="temp.authorNo" placeholder="作者号" />
<el-input v-model="temp.authorNo" readonly placeholder="作者号" />
</el-form-item>
<el-form-item label="作者姓名" prop="authorName" class="is-required">
<el-input v-model="temp.authorName" placeholder="作者姓名" />
<el-input v-model="temp.authorName" readonly placeholder="作者姓名" />
</el-form-item>
<el-form-item label="头像id" prop="avatarId" class="is-required">
<el-input v-model="temp.avatarId" placeholder="头像id" />
</el-form-item>
<el-form-item label="头像地址" prop="avatarUrl" class="is-required">
<el-input v-model="temp.avatarUrl" placeholder="头像地址" />
<el-form-item label="账号" prop="phoneNumber" class="is-required">
<el-input v-model="temp.phoneNumber" readonly placeholder="账号" />
</el-form-item>
<el-form-item label="简介" prop="description" class="is-required">
@@ -43,11 +35,20 @@
</el-form-item>
<el-form-item label="性别" prop="sex" class="is-required">
<el-input v-model="temp.sex" placeholder="性别" />
<el-radio-group v-model="temp.sex">
<el-radio label="1"></el-radio>
<el-radio label="2"></el-radio>
</el-radio-group>
</el-form-item>
<el-form-item label="生日" prop="birth" class="is-required">
<el-input v-model="temp.birth" placeholder="生日" />
<el-date-picker
v-model="temp.birth"
type="date"
placeholder="出生年月"
value-format="yyyy-MM-dd"
>
</el-date-picker>
</el-form-item>
<el-form-item label="职业" prop="job" class="is-required">
@@ -62,48 +63,27 @@
<el-input v-model="temp.school" placeholder="学校" />
</el-form-item>
<el-form-item label="背景图" prop="backGroundId" class="is-required">
<el-input v-model="temp.backGroundId" placeholder="背景图" />
</el-form-item>
<el-form-item label="背景图地址" prop="backGroundUrl" class="is-required">
<el-input v-model="temp.backGroundUrl" placeholder="背景图地址" />
</el-form-item>
<el-form-item label="关注数" prop="follow" class="is-required">
<el-input v-model="temp.follow" placeholder="关注数" />
<el-input v-model="temp.follow" readonly placeholder="关注数" />
</el-form-item>
<el-form-item label="粉丝数" prop="fans" class="is-required">
<el-input v-model="temp.fans" placeholder="粉丝数" />
<el-input v-model="temp.fans" readonly placeholder="粉丝数" />
</el-form-item>
<el-form-item label="点赞数" prop="upCount" class="is-required">
<el-input v-model="temp.upCount" placeholder="点赞数" />
<el-input v-model="temp.upCount" readonly placeholder="点赞数" />
</el-form-item>
<el-form-item label="收藏数" prop="starCount" class="is-required">
<el-input v-model="temp.starCount" placeholder="收藏数" />
<el-input v-model="temp.starCount" readonly placeholder="收藏数" />
</el-form-item>
<el-form-item label="0正常" prop="authorStatus" class="is-required">
<el-input v-model="temp.authorStatus" placeholder="0正常" />
</el-form-item>
<el-form-item label="乐观锁字段" prop="version" class="is-required">
<el-input v-model="temp.version" placeholder="乐观锁字段" />
</el-form-item>
<el-form-item label="0正常 1删除" prop="deleted" class="is-required">
<el-input v-model="temp.deleted" placeholder="0正常 1删除" />
</el-form-item>
<el-form-item label="创建时间" prop="createTime" class="is-required">
<el-input v-model="temp.createTime" placeholder="创建时间" />
</el-form-item>
<el-form-item label="修改时间" prop="updateTime" class="is-required">
<el-input v-model="temp.updateTime" placeholder="修改时间" />
<el-form-item label="冻结状态" prop="authorStatus" class="is-required">
<el-radio-group v-model="temp.authorStatus">
<el-radio :label="0">正常</el-radio>
<el-radio :label="1">冻结</el-radio>
</el-radio-group>
</el-form-item>
<el-form-item label="ip地址" prop="ipAddress" class="is-required">
@@ -122,9 +102,6 @@
<el-input v-model="temp.idCard" placeholder="身份证号" />
</el-form-item>
<el-form-item label="手机号" prop="phoneNumber" class="is-required">
<el-input v-model="temp.phoneNumber" placeholder="手机号" />
</el-form-item>
</el-form>
</div>

View File

@@ -1,132 +0,0 @@
<template>
<div>
<el-dialog
:close-on-click-modal="false"
top="8vh"
width="40%"
:visible.sync="dialogVisible"
center
@close="handleCancel"
>
<div class="el-dialog-div">
<el-form
:rules="rules"
ref="dataForm"
:model="temp"
label-position="right"
label-width="120px"
style="height: 90%;"
>
<el-form-item label="会员卡名" prop="cardName" class="is-required">
<el-input v-model="temp.cardName" placeholder="会员卡名" />
</el-form-item>
<el-form-item label="卡编号" prop="cardNo" class="is-required">
<el-input v-model="temp.cardNo" placeholder="卡编号" />
</el-form-item>
<el-form-item label="预设开卡金" prop="cardAmount" class="is-required">
<el-input v-model="temp.cardAmount" placeholder="预设开卡金" />
</el-form-item>
<el-form-item label="预设赠送金" prop="giveAmount" class="is-required">
<el-input v-model="temp.giveAmount" placeholder="预设赠送金" />
</el-form-item>
<el-form-item label="最低开卡金额" prop="buildCardAmount" class="is-required">
<el-input v-model="temp.buildCardAmount" placeholder="最低开卡金额" />
</el-form-item>
<el-form-item label="卡折扣" prop="cardDiscount" class="is-required">
<el-input v-model="temp.cardDiscount" placeholder="卡折扣" />
</el-form-item>
<el-form-item label="卡提成" prop="cardPushPercent" class="is-required">
<el-input v-model="temp.cardPushPercent" placeholder="卡提成" />
</el-form-item>
<el-form-item label="工本费用" prop="todos" class="is-required">
<el-input v-model="temp.todos" placeholder="工本费用" />
</el-form-item>
<el-form-item label="状态" prop="cardStatus" class="is-required">
<el-radio-group v-model="temp.cardStatus" size="small">
<el-radio-button label="0">正常</el-radio-button>
<el-radio-button label="1">禁用</el-radio-button>
</el-radio-group>
</el-form-item>
<!-- <el-form-item label="所属门店" prop="shopId" class="is-required">-->
<!-- <dept-select v-model="temp.shopId" @changeSelect="getDept" style="width: 100%;"/>-->
<!-- </el-form-item>-->
</el-form>
</div>
<div slot="footer" class="dialog-footer">
<el-button @click="handleCancel"> </el-button>
<el-button type="primary" @click="submit"> </el-button>
</div>
</el-dialog>
</div>
</template>
<script>
import {addCard} from "@/api/business/card/card";
import {setRequiredFields} from "@/utils";
import DeptSelect from "@/views/common/system/deptSelect";
const requiredFields = []
export default {
name: "addForm",
components: {DeptSelect},
data() {
return {
rules: setRequiredFields(requiredFields),
dialogVisible: false,
temp: {
cardName:'',
cardNo:'',
cardAmount:'',
giveAmount:'',
buildCardAmount:'',
cardDiscount:'',
cardPushPercent:'',
todos:'',
cardStatus:0,
},
}
},
methods: {
open() {
this.dialogVisible = true
},
submit() {
this.$refs['dataForm'].validate((valid) => {
if (valid) {
addCard(this.temp).then(response =>{
this.handleCancel()
this.$emit('ok', response.data)
})
} else {
console.log('error submit!!');
return false;
}
});
},
handleCancel() {
//初始化
this.temp = this.$options.data().temp
this.dialogVisible = false
this.$refs['dataForm'].resetFields();
},
getDept(e){
this.temp.shopName = e.deptName
}
},
}
</script>
<style scoped>
</style>

View File

@@ -1,333 +0,0 @@
<template>
<div class="app-container">
<div class="filter-container">
<el-input
v-model="listQuery.keyword"
size="small"
placeholder="请输入关键词"
clearable
class="filter-item"
style="width: 200px;margin-left: 10px;"
/>
<el-button-group style="margin-left: 10px;">
<el-button
size="small"
class="filter-item"
type="primary"
icon="el-icon-search"
@click="search"
>
搜索
</el-button>
<el-button
size="small"
class="filter-item"
type="primary"
icon="el-icon-refresh"
@click="refresh"
>
重置
</el-button>
</el-button-group>
<el-button
size="small"
class="filter-item"
type="primary"
icon="el-icon-plus"
style="margin-left: 10px;"
@click="add"
>
新增
</el-button>
</div>
<el-table
v-loading="listLoading"
:data="list"
element-loading-text="Loading"
border
fit
height="100%"
class="table-container"
highlight-current-row
>
<el-table-column
label="序号"
width="150"
align="center"
>
<template slot-scope="scope">
{{ scope.$index+1 }}
</template>
</el-table-column>
<el-table-column
label="会员卡名"
width="160"
align="center"
>
<template slot-scope="scope">
{{ scope.row.cardName }}
</template>
</el-table-column>
<el-table-column
label="卡编号"
width="160"
align="center"
>
<template slot-scope="scope">
{{ scope.row.cardNo }}
</template>
</el-table-column>
<el-table-column
label="预设开卡金"
width="160"
align="center"
>
<template slot-scope="scope">
{{ scope.row.cardAmount }}
</template>
</el-table-column>
<el-table-column
label="预设赠送金"
width="160"
align="center"
>
<template slot-scope="scope">
{{ scope.row.giveAmount }}
</template>
</el-table-column>
<el-table-column
label="最低开卡金额"
width="160"
align="center"
>
<template slot-scope="scope">
{{ scope.row.buildCardAmount }}
</template>
</el-table-column>
<el-table-column
label="卡折扣"
width="160"
align="center"
>
<template slot-scope="scope">
{{ scope.row.cardDiscount }}
</template>
</el-table-column>
<el-table-column
label="卡提成"
width="160"
align="center"
>
<template slot-scope="scope">
{{ scope.row.cardPushPercent }}
</template>
</el-table-column>
<el-table-column
label="工本费用"
width="160"
align="center"
>
<template slot-scope="scope">
{{ scope.row.todos }}
</template>
</el-table-column>
<el-table-column
label="0正常 1下架"
width="160"
align="center"
>
<template slot-scope="scope">
{{ scope.row.cardStatus }}
</template>
</el-table-column>
<el-table-column
label="0正常 1删除"
width="160"
align="center"
>
<template slot-scope="scope">
{{ scope.row.deleted }}
</template>
</el-table-column>
<el-table-column
label="门店名"
width="160"
align="center"
>
<template slot-scope="scope">
{{ scope.row.shopName }}
</template>
</el-table-column>
<el-table-column
label="创建人"
width="160"
align="center"
>
<template slot-scope="scope">
{{ scope.row.createName }}
</template>
</el-table-column>
<el-table-column
label="创建时间"
width="160"
align="center"
>
<template slot-scope="scope">
{{ scope.row.createTime }}
</template>
</el-table-column>
<el-table-column
label="修改时间"
width="160"
align="center"
>
<template slot-scope="scope">
{{ scope.row.updateTime }}
</template>
</el-table-column>
<el-table-column
label="修改人"
width="160"
align="center"
>
<template slot-scope="scope">
{{ scope.row.updateName }}
</template>
</el-table-column>
<el-table-column
fixed="right"
label="操作"
width="200"
align="center"
>
<template slot-scope="scope">
<el-button-group>
<el-button
type="primary"
icon="el-icon-edit"
size="mini"
@click="edit(scope)"
>
修改
</el-button>
<el-button
type="danger"
icon="el-icon-delete"
size="mini"
@click="del(scope)"
>
删除
</el-button>
</el-button-group>
</template>
</el-table-column>
</el-table>
<pagination
:total="total"
:page.sync="listQuery.page"
:limit.sync="listQuery.limit"
@pagination="fetchData"
/>
<add-form ref="addForm" @ok="addOk" />
<edit-form ref="editForm" @ok="editOk" />
</div>
</template>
<script>
import {getCardPage,deleteCard} from "@/api/business/card/card";
import {deepClone,success} from "@/utils";
import confirm from "@/utils/confirm";
import Pagination from '@/components/Pagination'
import addForm from "@/views/business/card/addCard";
import editForm from "@/views/business/card/editCard";
export default {
name: 'card',
components: {addForm,editForm,Pagination},
data() {
return {
total: 0,
list: [],
listLoading: true,
listQuery: {
page: 1,
limit: 50,
keyword: ''
},
temp: {},
}
},
created() {
this.fetchData()
},
methods: {
search() {
this.fetchData()
},
refresh() {
this.listQuery = this.$options.data().listQuery
this.fetchData()
},
fetchData() {
this.listLoading = true
getCardPage(this.listQuery).then(response => {
const { records, total } = response.data
this.list = records
this.total = total
this.listLoading = false
})
},
add(){
this.$refs.addForm.open()
},
addOk(){
this.fetchData()
},
edit(scope) {
const temp = deepClone(scope.row)
this.$refs.editForm.open(temp)
},
editOk(){
this.fetchData()
},
del(scope) {
confirm("确定要删除吗?").then(res=>{
if(res){
deleteCard(scope.row.cardId).then(response => {
console.log(response)
success('删除成功')
this.fetchData()
})
}
})
},
}
}
</script>
<style scoped>
</style>

View File

@@ -1,128 +0,0 @@
<template>
<div>
<el-dialog
:close-on-click-modal="false"
top="8vh"
width="40%"
:visible.sync="dialogVisible"
center
@close="handleCancel"
>
<div class="el-dialog-div">
<el-form
:rules="rules"
ref="dataForm"
:model="temp"
label-position="right"
label-width="120px"
style="height: 90%;"
>
<el-form-item label="会员卡名" prop="cardName" class="is-required">
<el-input v-model="temp.cardName" placeholder="会员卡名" />
</el-form-item>
<el-form-item label="卡编号" prop="cardNo" class="is-required">
<el-input v-model="temp.cardNo" placeholder="卡编号" />
</el-form-item>
<el-form-item label="预设开卡金" prop="cardAmount" class="is-required">
<el-input v-model="temp.cardAmount" placeholder="预设开卡金" />
</el-form-item>
<el-form-item label="预设赠送金" prop="giveAmount" class="is-required">
<el-input v-model="temp.giveAmount" placeholder="预设赠送金" />
</el-form-item>
<el-form-item label="最低开卡金额" prop="buildCardAmount" class="is-required">
<el-input v-model="temp.buildCardAmount" placeholder="最低开卡金额" />
</el-form-item>
<el-form-item label="卡折扣" prop="cardDiscount" class="is-required">
<el-input v-model="temp.cardDiscount" placeholder="卡折扣" />
</el-form-item>
<el-form-item label="卡提成" prop="cardPushPercent" class="is-required">
<el-input v-model="temp.cardPushPercent" placeholder="卡提成" />
</el-form-item>
<el-form-item label="工本费用" prop="todos" class="is-required">
<el-input v-model="temp.todos" placeholder="工本费用" />
</el-form-item>
<el-form-item label="状态" prop="cardStatus" class="is-required">
<el-radio-group v-model="temp.cardStatus" size="small">
<el-radio-button label="0">正常</el-radio-button>
<el-radio-button label="1">禁用</el-radio-button>
</el-radio-group>
</el-form-item>
<!-- <el-form-item label="所属门店" prop="shopId" class="is-required">-->
<!-- <dept-select v-model="temp.shopId" @changeSelect="getDept" style="width: 100%;"/>-->
<!-- </el-form-item>-->
</el-form>
</div>
<div slot="footer" class="dialog-footer">
<el-button @click="handleCancel"> </el-button>
<el-button type="primary" @click="submit"> </el-button>
</div>
</el-dialog>
</div>
</template>
<script>
import { editCard } from "@/api/business/card/card";
import {setRequiredFields} from "@/utils";
const requiredFields = []
export default {
name: "editForm",
data() {
return {
rules: setRequiredFields(requiredFields),
dialogVisible: false,
temp: {
cardId:'',
cardName:'',
cardNo:'',
cardAmount:'',
giveAmount:'',
buildCardAmount:'',
cardDiscount:'',
cardPushPercent:'',
todos:'',
cardStatus:0,
},
}
},
methods: {
open(row) {
this.temp = this.$options.data().temp
this.temp = row
this.dialogVisible = true
},
submit() {
this.$refs['dataForm'].validate((valid) => {
if (valid) {
editCard(this.temp).then(response => {
this.handleCancel()
this.$emit('ok', response.data)
})
} else {
console.log('error submit!!');
return false;
}
});
},
handleCancel() {
//初始化
this.temp = this.$options.data().temp
this.dialogVisible = false
this.$refs['dataForm'].resetFields()
}
},
}
</script>
<style scoped>
</style>

File diff suppressed because it is too large Load Diff

View File

@@ -1,53 +0,0 @@
<template>
<div>
<el-dialog
append-to-body
top="2vh"
width="60%"
:visible.sync="dialogVisible"
center
@close="handleCancel"
>
<div class="el-dialog-div" style="height:80vh">
<pending-sell-list ref="pendingSellListRef" @ok="getCheckedsell"/>
</div>
</el-dialog>
</div>
</template>
<script>
import pendingSellList from "@/views/business/cashier/pendingSellList";
export default {
name: "chooseSell",
components: {pendingSellList},
props: {
sellList: Array,
},
data() {
return {
dialogVisible: false,
temp:{}
}
},
methods: {
open() {
this.dialogVisible = true
//并获取最新值
this.$refs.pendingSellListRef.fetchData()
},
getCheckedsell(sell){
this.$emit('ok', sell)
this.handleCancel()
},
handleCancel(){
this.dialogVisible = false
},
submit(){
}
},
}
</script>
<style scoped>
</style>

View File

@@ -1,56 +0,0 @@
<template>
<div>
<el-dialog
append-to-body
top="2vh"
width="60%"
:visible.sync="dialogVisible"
center
@close="handleCancel"
>
<div class="el-dialog-div" style="height:80vh">
<server-list ref="serverListRef" @ok="getCheckedsell"/>
</div>
</el-dialog>
</div>
</template>
<script>
import serverList from "@/views/business/cashier/serverList";
export default {
name: "chooseServer",
components: {serverList},
props: {
sellList: Array,
},
data() {
return {
dialogVisible: false,
temp:{},
scope:{}
}
},
methods: {
open() {
this.dialogVisible = true
//并获取最新值
this.$nextTick(() => {
this.$refs.serverListRef.fetchData()
})
},
getCheckedsell(serverList){
this.$emit('ok', serverList)
this.handleCancel()
},
handleCancel(){
this.dialogVisible = false
},
submit(){
}
},
}
</script>
<style scoped>
</style>

View File

@@ -1,161 +0,0 @@
<template>
<div>
<!-- :close-on-click-modal="false"-->
<el-dialog
append-to-body
top="15vh"
width="35%"
:visible.sync="dialogVisible"
center
@close="handleCancel"
>
<div class="el-dialog-div" style="height:40vh;text-align: center;">
<div style="text-align: left;">
<h2> 应付金额<span class="price-text">{{totalPrice}}</span></h2>
<h2> 实付金额<span class="price-text">{{realTotalPrice}}</span></h2>
<h2> 仍需支付<span class="price-text">{{app.Subtr(totalPrice,realTotalPrice)}}</span></h2>
</div>
<div style="width:100%;"
v-for="(item,index) in payTypeList"
:key="item.payType">
<el-input
style="text-align: center;width: 70%;margin-bottom: 10px;"
placeholder="请输入金额"
@click.native="inputClick(item,payTypeList,index)"
v-model="item.amount">
<span slot="prefix" style="line-height: 40px;text-align: right;width: 80px;display: inline-block;">{{item.payName}}&nbsp;</span>
<span slot="suffix" style="line-height: 40px;text-align: right;width: 200px;display: inline-block;" v-if="app.isNotEmpty(memberCard.memberCardId) && item.payType == '1'">
会员卡总余额<span class="price-text">{{app.getFloatStr(memberCardAmount)}}</span>
</span>
</el-input>
</div>
</div>
<div slot="footer" class="dialog-footer">
<el-button @click="handleCancel"> </el-button>
<el-button type="primary" @click="submit"> </el-button>
<slot name="button2"></slot>
</div>
</el-dialog>
</div>
</template>
<script>
import {accAdd,error,isNotEmpty} from "@/utils";
export default {
name: "payType",
props: {
},
data() {
return {
dialogVisible: false,
temp:{},
menu: '',
totalPrice:'',
memberCard:{amount:0,giveAmount:0},
payTypeList:[
{payType:"1",payName:"会员卡支付",amount:""},
{payType:"2",payName:"扫码支付",amount:""},
{payType:"3",payName:"现金支付",amount:""},
{payType:"888",payName:"优惠",amount:""},
]
}
},
computed:{
realTotalPrice(){
let realTotalPrice = 0;
for(let pay of this.payTypeList){
if(pay.amount){
realTotalPrice = accAdd(pay.amount,realTotalPrice);
}
}
return realTotalPrice;
},
memberCardAmount(){
let memberCardAmount = 0;
if(isNotEmpty(this.memberCard.memberCardId)){
memberCardAmount = accAdd(this.memberCard.amount,this.memberCard.giveAmount);
}
return memberCardAmount;
}
},
methods: {
open(totalPrice,memberCard,menu) {
this.menu = menu
// 打印应付金额和会员卡信息
console.log('应付金额' + totalPrice)
console.log('当前会员卡' + memberCard)
// 设置应付金额
this.totalPrice = totalPrice
// 根据会员卡是否存在进行不同操作
if(isNotEmpty(memberCard.memberCardId)){
// 存在会员卡,设置会员卡信息
this.memberCard = memberCard
if(menu == '2' || menu == '3'){
this.payTypeList.splice(0, 1)
}
} else {
// 不存在会员卡,调整支付类型列表
this.payTypeList.splice(0, 1)
}
// 显示对话框
this.dialogVisible = true
},
//首次输入金额时自动填充
inputClick(pay, payList,index) {
let flag = true;
for (let i = 0; i < payList.length; i++) {
if (isNotEmpty(payList[i].amount)) {
flag = false;
break;
}
}
let needPay = this.totalPrice;
if (needPay > 0 && flag) {
if(index==0 && this.menu == '1' && isNotEmpty(this.memberCard.memberCardId)){
//证明是卡金支付
//如果应付金额大于卡金总余额 则卡金这一栏仅填写卡金余额
if(needPay>this.memberCardAmount){
pay.amount = this.memberCardAmount
}else{
pay.amount = needPay;
}
}else{
pay.amount = needPay;
}
}
},
handleCancel(){
this.dialogVisible = false
this.totalPrice = this.$options.data().totalPrice
this.menu = this.$options.data().menu
this.memberCard = this.$options.data().memberCard
this.payTypeList = this.$options.data().payTypeList
},
submit(){
if(this.totalPrice == this.realTotalPrice){
let payList = this.payTypeList.filter(item => item.amount > 0)
this.$emit('ok', payList)
this.handleCancel()
}else{
error('应付金额不等于实际金额~')
}
}
},
}
</script>
<style scoped>
::v-deep .el-input--prefix .el-input__inner{
padding-left: 90px !important;
}
</style>

View File

@@ -1,289 +0,0 @@
<template>
<div class="app-container">
<div class="filter-container" style="margin-bottom: 10px;">
<el-input
v-model="listQuery.keyword"
size="small"
placeholder="请输入关键词"
clearable
class="filter-item"
style="width: 200px;margin-left: 10px;"
/>
<el-button-group style="margin-left: 10px;">
<el-button
size="small"
class="filter-item"
type="primary"
icon="el-icon-search"
@click="search"
>
搜索
</el-button>
</el-button-group>
</div>
<el-row :gutter="24" class="row-container">
<el-table
ref="productTable"
v-loading="listLoading"
:data="list"
element-loading-text="Loading"
border
fit
height="80%"
class="table-container"
highlight-current-row
@row-click="handleRowClick"
@selection-change="getSelection"
>
<el-table-column
align="center"
type="selection"
width="55">
</el-table-column>
<el-table-column
label="序号"
width="150"
align="center"
>
<template slot-scope="scope">
{{ scope.$index+1 }}
</template>
</el-table-column>
<el-table-column
label="会员"
width="160"
align="center"
>
<template slot-scope="scope">
{{ scope.row.memberName }}
</template>
</el-table-column>
<el-table-column
label="手机号"
width="160"
align="center"
>
<template slot-scope="scope">
{{ scope.row.memberPhone }}
</template>
</el-table-column>
<el-table-column
label="下单时间"
width="160"
align="center"
>
<template slot-scope="scope">
{{ scope.row.createTime }}
</template>
</el-table-column>
<el-table-column
label="操作人"
width="160"
align="center"
>
<template slot-scope="scope">
{{ scope.row.createName }}
</template>
</el-table-column>
<el-table-column
label="门店名"
width="160"
align="center"
>
<template slot-scope="scope">
{{ scope.row.shopName }}
</template>
</el-table-column>
<el-table-column
fixed="right"
label="操作"
width="200"
align="center"
>
<template slot-scope="scope">
<el-button-group>
<el-button
type="danger"
icon="el-icon-delete"
size="mini"
@click="del(scope)"
>
删除
</el-button>
</el-button-group>
</template>
</el-table-column>
</el-table>
<pagination
:total="total"
:page.sync="listQuery.page"
:limit.sync="listQuery.limit"
@pagination="fetchData"
/>
<div class="div-border" style="height: 29%;margin-top:15px;">
<el-alert
type="warning"
:closable="false">
<template slot="title">
已选择的条目{{productList.length}}
<el-button style="margin-left: 15px;"
@click="chooseDone"
icon="el-icon-check"
type="danger">选好了</el-button>
</template>
</el-alert>
<div class="tag-view">
<el-tag
v-for="(tag,index) in productList"
:key="tag.productId"
closable
effect="dark"
@close="handleClose(tag,index)"
>
{{tag.memberName}}
</el-tag>
</div>
</div>
</el-row>
</div>
</template>
<script>
import {deleteProduct} from "@/api/business/product/product";
import {deepClone,success} from "@/utils";
import {deleteSelljson, getSelljsonPage} from "@/api/business/sellJson/sellJson";
import confirm from "@/utils/confirm";
import Pagination from '@/components/Pagination'
import addForm from "@/views/business/product/addProduct";
import editForm from "@/views/business/product/editProduct";
import {error} from "@/utils";
export default {
name: 'productList',
components: {addForm,editForm,Pagination},
data() {
return {
total: 0,
list: [],
listLoading: true,
listQuery: {
page: 1,
limit: 50,
keyword: '',
pendingStatus:0
},
defaultProps: {
id: 'categoryId',
label: 'categoryName',
},
temp: {},
productList: []
}
},
created() {
this.fetchData()
},
methods: {
handleClose(tag,index){
this.productList.splice(index,1);
//取消选中状态
this.$refs.productTable.toggleRowSelection(tag, false);
},
chooseDone(){
if(this.productList.length==0){
error('还没有选择订单')
return false
}
this.$emit('ok', this.productList[0])
const table = this.$refs.productTable;
const rows = table.store.states.data; // 获取表格所有行的数据(不同组件获取方式可能不同)
rows.forEach(row => {
table.toggleRowSelection(row, false); // 调用toggleRowSelection方法第二个参数传false表示取消选中
});
},
handleRowClick(row) {
//先删除所选中的 只选当前行
const table = this.$refs.productTable;
const rows = table.store.states.data; // 获取表格所有行的数据(不同组件获取方式可能不同)
rows.forEach(row => {
table.toggleRowSelection(row, false); // 调用toggleRowSelection方法第二个参数传false表示取消选中
});
this.$refs.productTable.toggleRowSelection(row)
},
getSelection(e){
this.productList = e
},
handleNodeClick(e){
this.listQuery.categoryId = e.categoryId
this.fetchData()
},
search() {
this.fetchData()
},
refresh() {
this.listQuery = this.$options.data().listQuery
this.fetchData()
},
fetchData() {
this.listLoading = true
getSelljsonPage(this.listQuery).then(response => {
const { records, total } = response.data
this.list = records
this.total = total
this.listLoading = false
})
},
add(){
this.$refs.addForm.open(this.listQuery.categoryId)
},
addOk(){
this.fetchData()
},
edit(scope) {
const temp = deepClone(scope.row)
this.$refs.editForm.open(temp)
},
editOk(){
this.fetchData()
},
del(scope) {
confirm("确定要删除吗?").then(res=>{
if(res){
deleteSelljson(scope.row.jsonId).then(response => {
console.log(response)
success('删除成功')
this.fetchData()
})
}
})
},
}
}
</script>
<style scoped>
.tag-view /deep/ .el-tag {
margin: 10px;
}
</style>

View File

@@ -1,271 +0,0 @@
<template>
<div class="app-container">
<div class="filter-container" style="margin-bottom: 10px;">
<el-input
v-model="listQuery.keyword"
size="small"
placeholder="请输入关键词"
clearable
class="filter-item"
style="width: 200px;margin-left: 10px;"
/>
<el-button-group style="margin-left: 10px;">
<el-button
size="small"
class="filter-item"
type="primary"
icon="el-icon-search"
@click="search"
>
搜索
</el-button>
<el-button
size="small"
class="filter-item"
type="primary"
icon="el-icon-refresh"
@click="refresh"
>
重置
</el-button>
</el-button-group>
</div>
<el-row :gutter="24" class="row-container">
<el-table
ref="productTable"
v-loading="listLoading"
:data="list"
element-loading-text="Loading"
border
fit
height="80%"
class="table-container"
highlight-current-row
@row-click="handleRowClick"
@selection-change="getSelection"
>
<el-table-column
align="center"
type="selection"
width="55">
</el-table-column>
<el-table-column
label="工号"
width="160"
align="center"
>
<template slot-scope="scope">
{{ scope.row.serverNo }}
</template>
</el-table-column>
<el-table-column
label="服务人员名称"
width="160"
align="center"
>
<template slot-scope="scope">
{{ scope.row.serverName }}
</template>
</el-table-column>
<el-table-column
label="服务人员手机号"
width="160"
align="center"
>
<template slot-scope="scope">
{{ scope.row.serverPhone }}
</template>
</el-table-column>
<el-table-column
label="入职时间"
width="160"
align="center"
>
<template slot-scope="scope">
{{ scope.row.joinTime }}
</template>
</el-table-column>
<el-table-column
label="门店名"
width="160"
align="center"
>
<template slot-scope="scope">
{{ scope.row.shopName }}
</template>
</el-table-column>
<el-table-column
label="创建人"
width="160"
align="center"
>
<template slot-scope="scope">
{{ scope.row.createName }}
</template>
</el-table-column>
<el-table-column
label="创建时间"
width="160"
align="center"
>
<template slot-scope="scope">
{{ scope.row.createTime }}
</template>
</el-table-column>
</el-table>
<pagination
:total="total"
:page.sync="listQuery.page"
:limit.sync="listQuery.limit"
@pagination="fetchData"
/>
<div class="div-border" style="height: 29%;margin-top:15px;">
<el-alert
type="warning"
:closable="false">
<template slot="title">
已选择的条目{{productList.length}}
<el-button style="margin-left: 15px;"
@click="chooseDone"
icon="el-icon-check"
type="danger">选好了
</el-button>
</template>
</el-alert>
<div class="tag-view">
<el-tag
v-for="(tag,index) in productList"
:key="tag.serverId"
closable
effect="dark"
@close="handleClose(tag,index)"
>
{{tag.serverName}}
</el-tag>
</div>
</div>
</el-row>
</div>
</template>
<script>
import {getServerPage, deleteServer} from "@/api/business/server/server";
import {deepClone, error, success} from "@/utils";
import confirm from "@/utils/confirm";
import Pagination from '@/components/Pagination'
import addForm from "@/views/business/server/addServer";
import editForm from "@/views/business/server/editServer";
export default {
name: 'serverList',
components: {addForm, editForm, Pagination},
data() {
return {
total: 0,
list: [],
listLoading: true,
listQuery: {
page: 1,
limit: 50,
keyword: ''
},
temp: {},
productList: []
}
},
created() {
this.fetchData()
},
methods: {
getSelection(e) {
this.productList = e
},
chooseDone() {
if (this.productList.length == 0) {
error('还没有选择订单')
return false
}
this.$emit('ok', this.productList)
const table = this.$refs.productTable;
const rows = table.store.states.data; // 获取表格所有行的数据(不同组件获取方式可能不同)
rows.forEach(row => {
table.toggleRowSelection(row, false); // 调用toggleRowSelection方法第二个参数传false表示取消选中
});
},
handleRowClick(row) {
//先删除所选中的 只选当前行
// const table = this.$refs.productTable;
// const rows = table.store.states.data; // 获取表格所有行的数据(不同组件获取方式可能不同)
// rows.forEach(row => {
// table.toggleRowSelection(row, false); // 调用toggleRowSelection方法第二个参数传false表示取消选中
// });
this.$refs.productTable.toggleRowSelection(row)
},
search() {
this.fetchData()
},
refresh() {
this.listQuery = this.$options.data().listQuery
this.fetchData()
},
fetchData() {
this.listLoading = true
getServerPage(this.listQuery).then(response => {
const {records, total} = response.data
this.list = records
this.total = total
this.listLoading = false
})
},
add() {
this.$refs.addForm.open()
},
addOk() {
this.fetchData()
},
edit(scope) {
const temp = deepClone(scope.row)
this.$refs.editForm.open(temp)
},
editOk() {
this.fetchData()
},
del(scope) {
confirm("确定要删除吗?").then(res => {
if (res) {
deleteServer(scope.row.serverId).then(response => {
console.log(response)
success('删除成功')
this.fetchData()
})
}
})
},
}
}
</script>
<style scoped>
.tag-view /deep/ .el-tag {
margin: 10px;
}
</style>

View File

@@ -1,98 +0,0 @@
<template>
<div>
<el-dialog
:close-on-click-modal="false"
top="8vh"
width="40%"
:visible.sync="dialogVisible"
center
@close="handleCancel"
>
<div class="el-dialog-div">
<el-form
:rules="rules"
ref="dataForm"
:model="temp"
label-position="right"
label-width="120px"
style="height: 90%;"
>
<el-form-item label="分类名" prop="categoryName" class="is-required">
<el-input v-model="temp.categoryName" placeholder="分类名" />
</el-form-item>
<el-form-item label="状态" prop="categoryStatus" class="is-required">
<el-radio-group v-model="temp.categoryStatus" size="small">
<el-radio-button label="0">正常</el-radio-button>
<el-radio-button label="1">禁用</el-radio-button>
</el-radio-group>
</el-form-item>
<!-- <el-form-item label="所属门店" prop="shopId" class="is-required">-->
<!-- <dept-select v-model="temp.shopId" @changeSelect="getDept" style="width: 100%;"/>-->
<!-- </el-form-item>-->
</el-form>
</div>
<div slot="footer" class="dialog-footer">
<el-button @click="handleCancel"> </el-button>
<el-button type="primary" @click="submit"> </el-button>
</div>
</el-dialog>
</div>
</template>
<script>
import {addCategory} from "@/api/business/category/category";
import {setRequiredFields} from "@/utils";
import DeptSelect from "@/views/common/system/deptSelect";
const requiredFields = []
export default {
name: "addForm",
components: {DeptSelect},
data() {
return {
rules: setRequiredFields(requiredFields),
dialogVisible: false,
temp: {
categoryName:'',
categoryStatus:0,
},
}
},
methods: {
open() {
this.dialogVisible = true
},
submit() {
this.$refs['dataForm'].validate((valid) => {
if (valid) {
addCategory(this.temp).then(response =>{
this.handleCancel()
this.$emit('ok', response.data)
})
} else {
console.log('error submit!!');
return false;
}
});
},
handleCancel() {
//初始化
this.temp = this.$options.data().temp
this.dialogVisible = false
this.$refs['dataForm'].resetFields();
},
getDept(e){
console.log(e)
this.temp.shopName = e.deptName
}
},
}
</script>
<style scoped>
</style>

View File

@@ -1,249 +0,0 @@
<template>
<div class="app-container">
<div class="filter-container">
<el-input
v-model="listQuery.keyword"
size="small"
placeholder="请输入关键词"
clearable
class="filter-item"
style="width: 200px;margin-left: 10px;"
/>
<el-button-group style="margin-left: 10px;">
<el-button
size="small"
class="filter-item"
type="primary"
icon="el-icon-search"
@click="search"
>
搜索
</el-button>
<el-button
size="small"
class="filter-item"
type="primary"
icon="el-icon-refresh"
@click="refresh"
>
重置
</el-button>
</el-button-group>
<el-button
size="small"
class="filter-item"
type="primary"
icon="el-icon-plus"
style="margin-left: 10px;"
@click="add"
>
新增
</el-button>
</div>
<el-table
v-loading="listLoading"
:data="list"
element-loading-text="Loading"
border
fit
height="100%"
class="table-container"
highlight-current-row
>
<el-table-column
label="序号"
width="150"
align="center"
>
<template slot-scope="scope">
{{ scope.$index+1 }}
</template>
</el-table-column>
<el-table-column
label="分类名"
width="160"
align="center"
>
<template slot-scope="scope">
{{ scope.row.categoryName }}
</template>
</el-table-column>
<el-table-column
label="0正常 1禁用"
width="160"
align="center"
>
<template slot-scope="scope">
{{ scope.row.categoryStatus }}
</template>
</el-table-column>
<el-table-column
label="门店名"
width="160"
align="center"
>
<template slot-scope="scope">
{{ scope.row.shopName }}
</template>
</el-table-column>
<el-table-column
label="创建人"
width="160"
align="center"
>
<template slot-scope="scope">
{{ scope.row.createName }}
</template>
</el-table-column>
<el-table-column
label="创建时间"
width="160"
align="center"
>
<template slot-scope="scope">
{{ scope.row.createTime }}
</template>
</el-table-column>
<el-table-column
label="修改时间"
width="160"
align="center"
>
<template slot-scope="scope">
{{ scope.row.updateTime }}
</template>
</el-table-column>
<el-table-column
label="修改人"
width="160"
align="center"
>
<template slot-scope="scope">
{{ scope.row.updateName }}
</template>
</el-table-column>
<el-table-column
fixed="right"
label="操作"
width="200"
align="center"
>
<template slot-scope="scope">
<el-button-group>
<el-button
type="primary"
icon="el-icon-edit"
size="mini"
@click="edit(scope)"
>
修改
</el-button>
</el-button-group>
</template>
</el-table-column>
</el-table>
<pagination
:total="total"
:page.sync="listQuery.page"
:limit.sync="listQuery.limit"
@pagination="fetchData"
/>
<add-form ref="addForm" @ok="addOk" />
<edit-form ref="editForm" @ok="editOk" />
</div>
</template>
<script>
import {getCategoryPage,deleteCategory} from "@/api/business/category/category";
import {deepClone,success} from "@/utils";
import confirm from "@/utils/confirm";
import Pagination from '@/components/Pagination'
import addForm from "@/views/business/category/addCategory";
import editForm from "@/views/business/category/editCategory";
export default {
name: 'category',
components: {addForm,editForm,Pagination},
data() {
return {
total: 0,
list: [],
listLoading: true,
listQuery: {
page: 1,
limit: 50,
keyword: ''
},
temp: {},
}
},
created() {
this.fetchData()
},
methods: {
search() {
this.fetchData()
},
refresh() {
this.listQuery = this.$options.data().listQuery
this.fetchData()
},
fetchData() {
this.listLoading = true
getCategoryPage(this.listQuery).then(response => {
const { records, total } = response.data
this.list = records
this.total = total
this.listLoading = false
})
},
add(){
this.$refs.addForm.open()
},
addOk(){
this.fetchData()
},
edit(scope) {
const temp = deepClone(scope.row)
this.$refs.editForm.open(temp)
},
editOk(){
this.fetchData()
},
del(scope) {
confirm("确定要删除吗?").then(res=>{
if(res){
deleteCategory(scope.row.categoryId).then(response => {
console.log(response)
success('删除成功')
this.fetchData()
})
}
})
},
}
}
</script>
<style scoped>
</style>

View File

@@ -1,104 +0,0 @@
<template>
<div>
<el-dialog
:close-on-click-modal="false"
top="8vh"
width="40%"
:visible.sync="dialogVisible"
center
@close="handleCancel"
>
<div class="el-dialog-div">
<el-form
:rules="rules"
ref="dataForm"
:model="temp"
label-position="right"
label-width="120px"
style="height: 90%;"
>
<el-form-item label="分类名" prop="categoryName" class="is-required">
<el-input v-model="temp.categoryName" placeholder="分类名" />
</el-form-item>
<el-form-item label="状态" prop="categoryStatus" class="is-required">
<el-radio-group v-model="temp.categoryStatus" size="small">
<el-radio-button label="0">正常</el-radio-button>
<el-radio-button label="1">禁用</el-radio-button>
</el-radio-group>
</el-form-item>
<!-- <el-form-item label="所属门店" prop="shopId" class="is-required">-->
<!-- <dept-select v-model="temp.shopId" @changeSelect="getDept" style="width: 100%;"/>-->
<!-- </el-form-item>-->
</el-form>
</div>
<div slot="footer" class="dialog-footer">
<el-button @click="handleCancel"> </el-button>
<el-button type="primary" @click="submit"> </el-button>
</div>
</el-dialog>
</div>
</template>
<script>
import { editCategory } from "@/api/business/category/category";
import {setRequiredFields} from "@/utils";
import DeptSelect from "@/views/common/system/deptSelect";
const requiredFields = []
export default {
name: "editForm",
components: {DeptSelect},
data() {
return {
rules: setRequiredFields(requiredFields),
dialogVisible: false,
temp: {
categoryId:'',
categoryName:'',
categoryStatus:'',
shopId:'',
shopName:'',
},
}
},
methods: {
open(row) {
this.temp = this.$options.data().temp
this.temp = row
this.dialogVisible = true
},
submit() {
this.$refs['dataForm'].validate((valid) => {
if (valid) {
editCategory(this.temp).then(response => {
this.handleCancel()
this.$emit('ok', response.data)
})
} else {
console.log('error submit!!');
return false;
}
});
},
handleCancel() {
//初始化
this.temp = this.$options.data().temp
this.dialogVisible = false
this.$refs['dataForm'].resetFields()
},
getDept(e){
console.log(e)
this.temp.shopName = e.deptName
}
},
}
</script>
<style scoped>
</style>

View File

@@ -1,156 +0,0 @@
<template>
<div>
<el-dialog
:close-on-click-modal="false"
top="8vh"
width="40%"
:visible.sync="dialogVisible"
center
@close="handleCancel"
>
<div class="el-dialog-div">
<el-form
:rules="rules"
ref="dataForm"
:model="temp"
label-position="right"
label-width="120px"
style="height: 90%;"
>
<el-form-item label="详单对应服务人员记录id" prop="detailServerId" class="is-required">
<el-input v-model="temp.detailServerId" placeholder="详单对应服务人员记录id" />
</el-form-item>
<el-form-item label="订单id" prop="sellId" class="is-required">
<el-input v-model="temp.sellId" placeholder="订单id" />
</el-form-item>
<el-form-item label="详单id" prop="sellDetailId" class="is-required">
<el-input v-model="temp.sellDetailId" placeholder="详单id" />
</el-form-item>
<el-form-item label="服务人员" prop="serverId" class="is-required">
<el-input v-model="temp.serverId" placeholder="服务人员" />
</el-form-item>
<el-form-item label="服务人员" prop="serverName" class="is-required">
<el-input v-model="temp.serverName" placeholder="服务人员" />
</el-form-item>
<el-form-item label="提成" prop="serverPushMoney" class="is-required">
<el-input v-model="temp.serverPushMoney" placeholder="提成" />
</el-form-item>
<el-form-item label="业绩" prop="serverGrade" class="is-required">
<el-input v-model="temp.serverGrade" placeholder="业绩" />
</el-form-item>
<el-form-item label="门店id" prop="shopId" class="is-required">
<el-input v-model="temp.shopId" placeholder="门店id" />
</el-form-item>
<el-form-item label="门店名" prop="shopName" class="is-required">
<el-input v-model="temp.shopName" placeholder="门店名" />
</el-form-item>
<el-form-item label="创建人" prop="createName" class="is-required">
<el-input v-model="temp.createName" placeholder="创建人" />
</el-form-item>
<el-form-item label="创建时间" prop="createTime" class="is-required">
<el-input v-model="temp.createTime" placeholder="创建时间" />
</el-form-item>
<el-form-item label="创建人id" prop="createId" class="is-required">
<el-input v-model="temp.createId" placeholder="创建人id" />
</el-form-item>
<el-form-item label="修改时间" prop="updateTime" class="is-required">
<el-input v-model="temp.updateTime" placeholder="修改时间" />
</el-form-item>
<el-form-item label="修改人" prop="updateName" class="is-required">
<el-input v-model="temp.updateName" placeholder="修改人" />
</el-form-item>
<el-form-item label="修改人id" prop="updateId" class="is-required">
<el-input v-model="temp.updateId" placeholder="修改人id" />
</el-form-item>
<el-form-item label="备注" prop="remark" class="is-required">
<el-input v-model="temp.remark" placeholder="备注" />
</el-form-item>
</el-form>
</div>
<div slot="footer" class="dialog-footer">
<el-button @click="handleCancel"> </el-button>
<el-button type="primary" @click="submit"> </el-button>
</div>
</el-dialog>
</div>
</template>
<script>
import {addSellDetailServer} from "@/api/business/detailServer/detailServer";
import {setRequiredFields} from "@/utils";
const requiredFields = []
export default {
name: "addForm",
data() {
return {
rules: setRequiredFields(requiredFields),
dialogVisible: false,
temp: {
detailServerId:'',
sellId:'',
sellDetailId:'',
serverId:'',
serverName:'',
serverPushMoney:'',
serverGrade:'',
shopId:'',
shopName:'',
createName:'',
createTime:'',
createId:'',
updateTime:'',
updateName:'',
updateId:'',
remark:'',
},
}
},
methods: {
open() {
this.dialogVisible = true
},
submit() {
this.$refs['dataForm'].validate((valid) => {
if (valid) {
addSellDetailServer(this.temp).then(response =>{
this.handleCancel()
this.$emit('ok', response.data)
})
} else {
console.log('error submit!!');
return false;
}
});
},
handleCancel() {
//初始化
this.temp = this.$options.data().temp
this.dialogVisible = false
this.$refs['dataForm'].resetFields();
}
},
}
</script>
<style scoped>
</style>

View File

@@ -1,343 +0,0 @@
<template>
<div class="app-container">
<div class="filter-container">
<el-input
v-model="listQuery.keyword"
size="small"
placeholder="请输入关键词"
clearable
class="filter-item"
style="width: 200px;margin-left: 10px;"
/>
<el-button-group style="margin-left: 10px;">
<el-button
size="small"
class="filter-item"
type="primary"
icon="el-icon-search"
@click="search"
>
搜索
</el-button>
<el-button
size="small"
class="filter-item"
type="primary"
icon="el-icon-refresh"
@click="refresh"
>
重置
</el-button>
</el-button-group>
<el-button
size="small"
class="filter-item"
type="primary"
icon="el-icon-plus"
style="margin-left: 10px;"
@click="add"
>
新增
</el-button>
</div>
<el-table
v-loading="listLoading"
:data="list"
element-loading-text="Loading"
border
fit
height="100%"
class="table-container"
highlight-current-row
>
<el-table-column
label="序号"
width="150"
align="center"
>
<template slot-scope="scope">
{{ scope.$index+1 }}
</template>
</el-table-column>
<el-table-column
label="详单对应服务人员记录id"
width="160"
align="center"
>
<template slot-scope="scope">
{{ scope.row.detailServerId }}
</template>
</el-table-column>
<el-table-column
label="订单id"
width="160"
align="center"
>
<template slot-scope="scope">
{{ scope.row.sellId }}
</template>
</el-table-column>
<el-table-column
label="详单id"
width="160"
align="center"
>
<template slot-scope="scope">
{{ scope.row.sellDetailId }}
</template>
</el-table-column>
<el-table-column
label="服务人员"
width="160"
align="center"
>
<template slot-scope="scope">
{{ scope.row.serverId }}
</template>
</el-table-column>
<el-table-column
label="服务人员"
width="160"
align="center"
>
<template slot-scope="scope">
{{ scope.row.serverName }}
</template>
</el-table-column>
<el-table-column
label="提成"
width="160"
align="center"
>
<template slot-scope="scope">
{{ scope.row.serverPushMoney }}
</template>
</el-table-column>
<el-table-column
label="业绩"
width="160"
align="center"
>
<template slot-scope="scope">
{{ scope.row.serverGrade }}
</template>
</el-table-column>
<el-table-column
label="门店id"
width="160"
align="center"
>
<template slot-scope="scope">
{{ scope.row.shopId }}
</template>
</el-table-column>
<el-table-column
label="门店名"
width="160"
align="center"
>
<template slot-scope="scope">
{{ scope.row.shopName }}
</template>
</el-table-column>
<el-table-column
label="创建人"
width="160"
align="center"
>
<template slot-scope="scope">
{{ scope.row.createName }}
</template>
</el-table-column>
<el-table-column
label="创建时间"
width="160"
align="center"
>
<template slot-scope="scope">
{{ scope.row.createTime }}
</template>
</el-table-column>
<el-table-column
label="创建人id"
width="160"
align="center"
>
<template slot-scope="scope">
{{ scope.row.createId }}
</template>
</el-table-column>
<el-table-column
label="修改时间"
width="160"
align="center"
>
<template slot-scope="scope">
{{ scope.row.updateTime }}
</template>
</el-table-column>
<el-table-column
label="修改人"
width="160"
align="center"
>
<template slot-scope="scope">
{{ scope.row.updateName }}
</template>
</el-table-column>
<el-table-column
label="修改人id"
width="160"
align="center"
>
<template slot-scope="scope">
{{ scope.row.updateId }}
</template>
</el-table-column>
<el-table-column
label="备注"
width="160"
align="center"
>
<template slot-scope="scope">
{{ scope.row.remark }}
</template>
</el-table-column>
<el-table-column
fixed="right"
label="操作"
width="200"
align="center"
>
<template slot-scope="scope">
<el-button-group>
<el-button
type="primary"
icon="el-icon-edit"
size="mini"
@click="edit(scope)"
>
修改
</el-button>
<el-button
type="danger"
icon="el-icon-delete"
size="mini"
@click="del(scope)"
>
删除
</el-button>
</el-button-group>
</template>
</el-table-column>
</el-table>
<pagination
:total="total"
:page.sync="listQuery.page"
:limit.sync="listQuery.limit"
@pagination="fetchData"
/>
<add-form ref="addForm" @ok="addOk" />
<edit-form ref="editForm" @ok="editOk" />
</div>
</template>
<script>
import {getSellDetailServerPage,deleteSellDetailServer} from "@/api/business/detailServer/detailServer";
import {deepClone,success} from "@/utils";
import confirm from "@/utils/confirm";
import Pagination from '@/components/Pagination'
import addForm from "@/views/business/detailServer/addSellDetailServer";
import editForm from "@/views/business/detailServer/editSellDetailServer";
export default {
name: 'detailServer',
components: {addForm,editForm,Pagination},
data() {
return {
total: 0,
list: [],
listLoading: true,
listQuery: {
page: 1,
limit: 50,
keyword: ''
},
temp: {},
}
},
created() {
this.fetchData()
},
methods: {
search() {
this.fetchData()
},
refresh() {
this.listQuery = this.$options.data().listQuery
this.fetchData()
},
fetchData() {
this.listLoading = true
getSellDetailServerPage(this.listQuery).then(response => {
const { records, total } = response.data
this.list = records
this.total = total
this.listLoading = false
})
},
add(){
this.$refs.addForm.open()
},
addOk(){
this.fetchData()
},
edit(scope) {
const temp = deepClone(scope.row)
this.$refs.editForm.open(temp)
},
editOk(){
this.fetchData()
},
del(scope) {
confirm("确定要删除吗?").then(res=>{
if(res){
deleteSellDetailServer(scope.row.detailServerId).then(response => {
console.log(response)
success('删除成功')
this.fetchData()
})
}
})
},
}
}
</script>
<style scoped>
</style>

View File

@@ -1,157 +0,0 @@
<template>
<div>
<el-dialog
:close-on-click-modal="false"
top="8vh"
width="40%"
:visible.sync="dialogVisible"
center
@close="handleCancel"
>
<div class="el-dialog-div">
<el-form
:rules="rules"
ref="dataForm"
:model="temp"
label-position="right"
label-width="120px"
style="height: 90%;"
>
<el-form-item label="详单对应服务人员记录id" prop="detailServerId" class="is-required">
<el-input v-model="temp.detailServerId" placeholder="详单对应服务人员记录id" />
</el-form-item>
<el-form-item label="订单id" prop="sellId" class="is-required">
<el-input v-model="temp.sellId" placeholder="订单id" />
</el-form-item>
<el-form-item label="详单id" prop="sellDetailId" class="is-required">
<el-input v-model="temp.sellDetailId" placeholder="详单id" />
</el-form-item>
<el-form-item label="服务人员" prop="serverId" class="is-required">
<el-input v-model="temp.serverId" placeholder="服务人员" />
</el-form-item>
<el-form-item label="服务人员" prop="serverName" class="is-required">
<el-input v-model="temp.serverName" placeholder="服务人员" />
</el-form-item>
<el-form-item label="提成" prop="serverPushMoney" class="is-required">
<el-input v-model="temp.serverPushMoney" placeholder="提成" />
</el-form-item>
<el-form-item label="业绩" prop="serverGrade" class="is-required">
<el-input v-model="temp.serverGrade" placeholder="业绩" />
</el-form-item>
<el-form-item label="门店id" prop="shopId" class="is-required">
<el-input v-model="temp.shopId" placeholder="门店id" />
</el-form-item>
<el-form-item label="门店名" prop="shopName" class="is-required">
<el-input v-model="temp.shopName" placeholder="门店名" />
</el-form-item>
<el-form-item label="创建人" prop="createName" class="is-required">
<el-input v-model="temp.createName" placeholder="创建人" />
</el-form-item>
<el-form-item label="创建时间" prop="createTime" class="is-required">
<el-input v-model="temp.createTime" placeholder="创建时间" />
</el-form-item>
<el-form-item label="创建人id" prop="createId" class="is-required">
<el-input v-model="temp.createId" placeholder="创建人id" />
</el-form-item>
<el-form-item label="修改时间" prop="updateTime" class="is-required">
<el-input v-model="temp.updateTime" placeholder="修改时间" />
</el-form-item>
<el-form-item label="修改人" prop="updateName" class="is-required">
<el-input v-model="temp.updateName" placeholder="修改人" />
</el-form-item>
<el-form-item label="修改人id" prop="updateId" class="is-required">
<el-input v-model="temp.updateId" placeholder="修改人id" />
</el-form-item>
<el-form-item label="备注" prop="remark" class="is-required">
<el-input v-model="temp.remark" placeholder="备注" />
</el-form-item>
</el-form>
</div>
<div slot="footer" class="dialog-footer">
<el-button @click="handleCancel"> </el-button>
<el-button type="primary" @click="submit"> </el-button>
</div>
</el-dialog>
</div>
</template>
<script>
import { editSellDetailServer } from "@/api/business/detailServer/detailServer";
import {setRequiredFields} from "@/utils";
const requiredFields = []
export default {
name: "editForm",
data() {
return {
rules: setRequiredFields(requiredFields),
dialogVisible: false,
temp: {
detailServerId:'',
sellId:'',
sellDetailId:'',
serverId:'',
serverName:'',
serverPushMoney:'',
serverGrade:'',
shopId:'',
shopName:'',
createName:'',
createTime:'',
createId:'',
updateTime:'',
updateName:'',
updateId:'',
remark:'',
},
}
},
methods: {
open(row) {
this.temp = this.$options.data().temp
this.temp = row
this.dialogVisible = true
},
submit() {
this.$refs['dataForm'].validate((valid) => {
if (valid) {
editSellDetailServer(this.temp).then(response => {
this.handleCancel()
this.$emit('ok', response.data)
})
} else {
console.log('error submit!!');
return false;
}
});
},
handleCancel() {
//初始化
this.temp = this.$options.data().temp
this.dialogVisible = false
this.$refs['dataForm'].resetFields()
}
},
}
</script>
<style scoped>
</style>

View File

@@ -1,112 +0,0 @@
<template>
<div>
<el-dialog
:close-on-click-modal="false"
top="8vh"
width="40%"
:visible.sync="dialogVisible"
center
@close="handleCancel"
>
<div class="el-dialog-div">
<el-form
:rules="rules"
ref="dataForm"
:model="temp"
label-position="right"
label-width="120px"
style="height: 90%;"
>
<el-form-item label="会员姓名" prop="memberName" class="is-required">
<el-input v-model="temp.memberName" placeholder="会员姓名" />
</el-form-item>
<el-form-item label="手机号" prop="memberPhone" class="is-required">
<el-input v-model="temp.memberPhone" placeholder="手机号" />
</el-form-item>
<el-form-item label="备注" prop="remark" class="is-required">
<el-input type="textarea"
:rows="2" v-model="temp.remark" placeholder="备注" />
</el-form-item>
<el-form-item label="消费密码" prop="payPassword" >
<el-input v-model="temp.payPassword" placeholder="消费密码" />
</el-form-item>
</el-form>
</div>
<div slot="footer" class="dialog-footer">
<el-button @click="handleCancel"> </el-button>
<el-button type="primary" @click="submit"> </el-button>
</div>
</el-dialog>
</div>
</template>
<script>
import {addMember} from "@/api/business/member/member";
import {getDeptList} from "@/api/system/dept/dept";
import {setRequiredFields,getSelectObj} from "@/utils";
const requiredFields = []
export default {
name: "addForm",
data() {
return {
rules: setRequiredFields(requiredFields),
dialogVisible: false,
temp: {
memberId:'',
memberName:'',
memberPhone:'',
remark:'',
payPassword:'',
shopName:'',
shopId:'',
createTime:'',
},
deptList:[]
}
},
methods: {
open() {
this.dialogVisible = true
getDeptList().then(response => {
this.deptList = response.data
})
},
submit() {
this.$refs['dataForm'].validate((valid) => {
if (valid) {
addMember(this.temp).then(response =>{
this.handleCancel()
this.$emit('ok', response.data)
})
} else {
console.log('error submit!!');
return false;
}
});
},
handleCancel() {
//初始化
this.temp = this.$options.data().temp
this.dialogVisible = false
this.$refs['dataForm'].resetFields();
},
handleSelect(e){
console.log(e)
let obj = getSelectObj(e,this.deptList,"deptId")
console.log(obj)
this.temp.shopName = obj.deptName
}
},
}
</script>
<style scoped>
</style>

View File

@@ -1,124 +0,0 @@
<template>
<div>
<el-dialog
:close-on-click-modal="false"
top="8vh"
width="40%"
:visible.sync="dialogVisible"
center
@close="handleCancel"
>
<div class="el-dialog-div">
<el-form
:rules="rules"
ref="dataForm"
:model="temp"
label-position="right"
label-width="120px"
style="height: 90%;"
>
<el-form-item label="会员姓名" prop="memberName" class="is-required">
<el-input v-model="temp.memberName" placeholder="会员姓名" />
</el-form-item>
<el-form-item label="手机号" prop="memberPhone" class="is-required">
<el-input v-model="temp.memberPhone" placeholder="手机号" />
</el-form-item>
<el-form-item label="备注" prop="remark" class="is-required">
<el-input v-model="temp.remark" placeholder="备注" />
</el-form-item>
<el-form-item label="消费密码" prop="payPassword" class="is-required">
<el-input v-model="temp.payPassword" placeholder="消费密码" />
</el-form-item>
<!-- <el-form-item label="所属门店" prop="shopId" class="is-required">-->
<!-- <el-select v-model="temp.shopId" placeholder="请选择" @change="handleSelect">-->
<!-- <el-option-->
<!-- v-for="item in deptList"-->
<!-- :key="item.deptId"-->
<!-- :label="item.deptName"-->
<!-- :value="item.deptId">-->
<!-- <span style="float: left">{{ item.deptName }}</span>-->
<!-- <span style="float: right; color: #8492a6; font-size: 13px">{{ item.deptNo }}</span>-->
<!-- </el-option>-->
<!-- </el-select>-->
<!-- </el-form-item>-->
</el-form>
</div>
<div slot="footer" class="dialog-footer">
<el-button @click="handleCancel"> </el-button>
<el-button type="primary" @click="submit"> </el-button>
</div>
</el-dialog>
</div>
</template>
<script>
import { editMember } from "@/api/business/member/member";
import {getDeptList} from "@/api/system/dept/dept";
import {setRequiredFields,getSelectObj} from "@/utils";
const requiredFields = []
export default {
name: "editForm",
data() {
return {
rules: setRequiredFields(requiredFields),
dialogVisible: false,
temp: {
memberId:'',
memberName:'',
memberPhone:'',
remark:'',
payPassword:'',
shopName:'',
shopId:'',
createTime:'',
},
deptList:[]
}
},
methods: {
open(row) {
this.temp = this.$options.data().temp
this.temp = row
this.dialogVisible = true
getDeptList().then(response => {
this.deptList = response.data
})
},
submit() {
this.$refs['dataForm'].validate((valid) => {
if (valid) {
editMember(this.temp).then(response => {
this.handleCancel()
this.$emit('ok', response.data)
})
} else {
console.log('error submit!!');
return false;
}
});
},
handleCancel() {
//初始化
this.temp = this.$options.data().temp
this.dialogVisible = false
this.$refs['dataForm'].resetFields()
},
handleSelect(e){
console.log(e)
let obj = getSelectObj(e,this.deptList,"deptId")
console.log(obj)
this.temp.shopName = obj.deptName
}
},
}
</script>
<style scoped>
</style>

View File

@@ -1,245 +0,0 @@
<template>
<div class="app-container">
<div class="filter-container">
<el-input
v-model="listQuery.keyword"
size="small"
placeholder="请输入关键词"
clearable
class="filter-item"
style="width: 200px;margin-left: 10px;"
/>
<el-button-group style="margin-left: 10px;">
<el-button
size="small"
class="filter-item"
type="primary"
icon="el-icon-search"
@click="search"
>
搜索
</el-button>
<el-button
size="small"
class="filter-item"
type="primary"
icon="el-icon-refresh"
@click="refresh"
>
重置
</el-button>
</el-button-group>
<el-button
size="small"
class="filter-item"
type="primary"
icon="el-icon-plus"
style="margin-left: 10px;"
@click="add"
>
新增
</el-button>
</div>
<el-table
v-loading="listLoading"
:data="list"
element-loading-text="Loading"
border
fit
height="100%"
class="table-container"
highlight-current-row
>
<el-table-column
label="序号"
width="150"
align="center"
>
<template slot-scope="scope">
{{ scope.$index+1 }}
</template>
</el-table-column>
<el-table-column
label="会员姓名"
width="160"
align="center"
>
<template slot-scope="scope">
{{ scope.row.memberName }}
</template>
</el-table-column>
<el-table-column
label="手机号"
width="160"
align="center"
>
<template slot-scope="scope">
{{ scope.row.memberPhone }}
</template>
</el-table-column>
<el-table-column
label="备注"
width="160"
align="center"
>
<template slot-scope="scope">
{{ scope.row.remark }}
</template>
</el-table-column>
<el-table-column
label="消费密码"
width="160"
align="center"
>
<template slot-scope="scope">
{{ scope.row.payPassword }}
</template>
</el-table-column>
<el-table-column
label="门店名"
width="160"
align="center"
>
<template slot-scope="scope">
{{ scope.row.shopName }}
</template>
</el-table-column>
<el-table-column
label="创建时间"
align="center"
>
<template slot-scope="scope">
{{ scope.row.createTime }}
</template>
</el-table-column>
<el-table-column
fixed="right"
label="操作"
width="200"
align="center"
>
<template slot-scope="scope">
<el-button-group>
<el-button
type="primary"
icon="el-icon-edit"
size="mini"
@click="edit(scope)"
>
修改
</el-button>
<!-- <el-button-->
<!-- type="danger"-->
<!-- icon="el-icon-delete"-->
<!-- size="mini"-->
<!-- @click="del(scope)"-->
<!-- >-->
<!-- 删除-->
<!-- </el-button>-->
</el-button-group>
</template>
</el-table-column>
</el-table>
<pagination
:total="total"
:page.sync="listQuery.page"
:limit.sync="listQuery.limit"
@pagination="fetchData"
/>
<add-form ref="addForm" @ok="addOk" />
<edit-form ref="editForm" @ok="editOk" />
</div>
</template>
<script>
import {getMemberPage,deleteMember} from "@/api/business/member/member";
import {deepClone,success} from "@/utils";
import confirm from "@/utils/confirm";
import Pagination from '@/components/Pagination/index'
import addForm from "@/views/business/member/addMember";
import editForm from "@/views/business/member/editMember";
export default {
name: 'member',
components: {addForm,editForm,Pagination},
data() {
return {
total: 0,
list: [],
listLoading: true,
listQuery: {
page: 1,
limit: 50,
keyword: ''
},
temp: {},
}
},
created() {
this.fetchData()
},
methods: {
search() {
this.fetchData()
},
refresh() {
this.listQuery = this.$options.data().listQuery
this.fetchData()
},
fetchData() {
this.listLoading = true
getMemberPage(this.listQuery).then(response => {
const { records, total } = response.data
this.list = records
this.total = total
this.listLoading = false
})
},
add(){
this.$refs.addForm.open()
},
addOk(){
this.fetchData()
},
edit(scope) {
const temp = deepClone(scope.row)
this.$refs.editForm.open(temp)
},
editOk(){
this.fetchData()
},
del(scope) {
confirm("确定要删除吗?").then(res=>{
if(res){
deleteMember(scope.row.memberId).then(response => {
console.log(response)
success('删除成功')
this.fetchData()
})
}
})
},
}
}
</script>
<style scoped>
</style>

View File

@@ -1,181 +0,0 @@
<template>
<div>
<el-dialog
:close-on-click-modal="false"
top="8vh"
width="40%"
:visible.sync="dialogVisible"
center
@close="handleCancel"
>
<div class="el-dialog-div">
<el-form
:rules="rules"
ref="dataForm"
:model="temp"
label-position="right"
label-width="120px"
style="height: 90%;"
>
<el-form-item label="会员卡id" prop="memberCardId" class="is-required">
<el-input v-model="temp.memberCardId" placeholder="会员卡id" />
</el-form-item>
<el-form-item label="会员id" prop="memberId" class="is-required">
<el-input v-model="temp.memberId" placeholder="会员id" />
</el-form-item>
<el-form-item label="卡项ID" prop="cardId" class="is-required">
<el-input v-model="temp.cardId" placeholder="卡项ID" />
</el-form-item>
<el-form-item label="卡号" prop="cardNo" class="is-required">
<el-input v-model="temp.cardNo" placeholder="卡号" />
</el-form-item>
<el-form-item label="卡名称" prop="cardName" class="is-required">
<el-input v-model="temp.cardName" placeholder="卡名称" />
</el-form-item>
<el-form-item label="余额" prop="amount" class="is-required">
<el-input v-model="temp.amount" placeholder="余额" />
</el-form-item>
<el-form-item label="赠送金额" prop="giveAmount" class="is-required">
<el-input v-model="temp.giveAmount" placeholder="赠送金额" />
</el-form-item>
<el-form-item label="商品折扣" prop="discount" class="is-required">
<el-input v-model="temp.discount" placeholder="商品折扣" />
</el-form-item>
<el-form-item label="开卡金额" prop="buildCardAmount" class="is-required">
<el-input v-model="temp.buildCardAmount" placeholder="开卡金额" />
</el-form-item>
<el-form-item label="提成比例" prop="pushMoney" class="is-required">
<el-input v-model="temp.pushMoney" placeholder="提成比例" />
</el-form-item>
<el-form-item label="0正常 1取消" prop="cardStatus" class="is-required">
<el-input v-model="temp.cardStatus" placeholder="0正常 1取消" />
</el-form-item>
<el-form-item label="0正常 1删除" prop="deleted" class="is-required">
<el-input v-model="temp.deleted" placeholder="0正常 1删除" />
</el-form-item>
<el-form-item label="乐观锁字段" prop="version" class="is-required">
<el-input v-model="temp.version" placeholder="乐观锁字段" />
</el-form-item>
<el-form-item label="门店id" prop="shopId" class="is-required">
<el-input v-model="temp.shopId" placeholder="门店id" />
</el-form-item>
<el-form-item label="门店名" prop="shopName" class="is-required">
<el-input v-model="temp.shopName" placeholder="门店名" />
</el-form-item>
<el-form-item label="创建人" prop="createName" class="is-required">
<el-input v-model="temp.createName" placeholder="创建人" />
</el-form-item>
<el-form-item label="创建时间" prop="createTime" class="is-required">
<el-input v-model="temp.createTime" placeholder="创建时间" />
</el-form-item>
<el-form-item label="创建人id" prop="createId" class="is-required">
<el-input v-model="temp.createId" placeholder="创建人id" />
</el-form-item>
<el-form-item label="修改时间" prop="updateTime" class="is-required">
<el-input v-model="temp.updateTime" placeholder="修改时间" />
</el-form-item>
<el-form-item label="修改人" prop="updateName" class="is-required">
<el-input v-model="temp.updateName" placeholder="修改人" />
</el-form-item>
<el-form-item label="修改人id" prop="updateId" class="is-required">
<el-input v-model="temp.updateId" placeholder="修改人id" />
</el-form-item>
</el-form>
</div>
<div slot="footer" class="dialog-footer">
<el-button @click="handleCancel"> </el-button>
<el-button type="primary" @click="submit"> </el-button>
</div>
</el-dialog>
</div>
</template>
<script>
import {addMemberCard} from "@/api/business/memberCard/memberCard";
import {setRequiredFields} from "@/utils";
const requiredFields = []
export default {
name: "addForm",
data() {
return {
rules: setRequiredFields(requiredFields),
dialogVisible: false,
temp: {
memberCardId:'',
memberId:'',
cardId:'',
cardNo:'',
cardName:'',
amount:'',
giveAmount:'',
discount:'',
buildCardAmount:'',
pushMoney:'',
cardStatus:'',
deleted:'',
version:'',
shopId:'',
shopName:'',
createName:'',
createTime:'',
createId:'',
updateTime:'',
updateName:'',
updateId:'',
},
}
},
methods: {
open() {
this.dialogVisible = true
},
submit() {
this.$refs['dataForm'].validate((valid) => {
if (valid) {
addMemberCard(this.temp).then(response =>{
this.handleCancel()
this.$emit('ok', response.data)
})
} else {
console.log('error submit!!');
return false;
}
});
},
handleCancel() {
//初始化
this.temp = this.$options.data().temp
this.dialogVisible = false
this.$refs['dataForm'].resetFields();
}
},
}
</script>
<style scoped>
</style>

View File

@@ -1,182 +0,0 @@
<template>
<div>
<el-dialog
:close-on-click-modal="false"
top="8vh"
width="40%"
:visible.sync="dialogVisible"
center
@close="handleCancel"
>
<div class="el-dialog-div">
<el-form
:rules="rules"
ref="dataForm"
:model="temp"
label-position="right"
label-width="120px"
style="height: 90%;"
>
<el-form-item label="会员卡id" prop="memberCardId" class="is-required">
<el-input v-model="temp.memberCardId" placeholder="会员卡id" />
</el-form-item>
<el-form-item label="会员id" prop="memberId" class="is-required">
<el-input v-model="temp.memberId" placeholder="会员id" />
</el-form-item>
<el-form-item label="卡项ID" prop="cardId" class="is-required">
<el-input v-model="temp.cardId" placeholder="卡项ID" />
</el-form-item>
<el-form-item label="卡号" prop="cardNo" class="is-required">
<el-input v-model="temp.cardNo" placeholder="卡号" />
</el-form-item>
<el-form-item label="卡名称" prop="cardName" class="is-required">
<el-input v-model="temp.cardName" placeholder="卡名称" />
</el-form-item>
<el-form-item label="余额" prop="amount" class="is-required">
<el-input v-model="temp.amount" placeholder="余额" />
</el-form-item>
<el-form-item label="赠送金额" prop="giveAmount" class="is-required">
<el-input v-model="temp.giveAmount" placeholder="赠送金额" />
</el-form-item>
<el-form-item label="商品折扣" prop="discount" class="is-required">
<el-input v-model="temp.discount" placeholder="商品折扣" />
</el-form-item>
<el-form-item label="开卡金额" prop="buildCardAmount" class="is-required">
<el-input v-model="temp.buildCardAmount" placeholder="开卡金额" />
</el-form-item>
<el-form-item label="提成比例" prop="pushMoney" class="is-required">
<el-input v-model="temp.pushMoney" placeholder="提成比例" />
</el-form-item>
<el-form-item label="0正常 1取消" prop="cardStatus" class="is-required">
<el-input v-model="temp.cardStatus" placeholder="0正常 1取消" />
</el-form-item>
<el-form-item label="0正常 1删除" prop="deleted" class="is-required">
<el-input v-model="temp.deleted" placeholder="0正常 1删除" />
</el-form-item>
<el-form-item label="乐观锁字段" prop="version" class="is-required">
<el-input v-model="temp.version" placeholder="乐观锁字段" />
</el-form-item>
<el-form-item label="门店id" prop="shopId" class="is-required">
<el-input v-model="temp.shopId" placeholder="门店id" />
</el-form-item>
<el-form-item label="门店名" prop="shopName" class="is-required">
<el-input v-model="temp.shopName" placeholder="门店名" />
</el-form-item>
<el-form-item label="创建人" prop="createName" class="is-required">
<el-input v-model="temp.createName" placeholder="创建人" />
</el-form-item>
<el-form-item label="创建时间" prop="createTime" class="is-required">
<el-input v-model="temp.createTime" placeholder="创建时间" />
</el-form-item>
<el-form-item label="创建人id" prop="createId" class="is-required">
<el-input v-model="temp.createId" placeholder="创建人id" />
</el-form-item>
<el-form-item label="修改时间" prop="updateTime" class="is-required">
<el-input v-model="temp.updateTime" placeholder="修改时间" />
</el-form-item>
<el-form-item label="修改人" prop="updateName" class="is-required">
<el-input v-model="temp.updateName" placeholder="修改人" />
</el-form-item>
<el-form-item label="修改人id" prop="updateId" class="is-required">
<el-input v-model="temp.updateId" placeholder="修改人id" />
</el-form-item>
</el-form>
</div>
<div slot="footer" class="dialog-footer">
<el-button @click="handleCancel"> </el-button>
<el-button type="primary" @click="submit"> </el-button>
</div>
</el-dialog>
</div>
</template>
<script>
import { editMemberCard } from "@/api/business/memberCard/memberCard";
import {setRequiredFields} from "@/utils";
const requiredFields = []
export default {
name: "editForm",
data() {
return {
rules: setRequiredFields(requiredFields),
dialogVisible: false,
temp: {
memberCardId:'',
memberId:'',
cardId:'',
cardNo:'',
cardName:'',
amount:'',
giveAmount:'',
discount:'',
buildCardAmount:'',
pushMoney:'',
cardStatus:'',
deleted:'',
version:'',
shopId:'',
shopName:'',
createName:'',
createTime:'',
createId:'',
updateTime:'',
updateName:'',
updateId:'',
},
}
},
methods: {
open(row) {
this.temp = this.$options.data().temp
this.temp = row
this.dialogVisible = true
},
submit() {
this.$refs['dataForm'].validate((valid) => {
if (valid) {
editMemberCard(this.temp).then(response => {
this.handleCancel()
this.$emit('ok', response.data)
})
} else {
console.log('error submit!!');
return false;
}
});
},
handleCancel() {
//初始化
this.temp = this.$options.data().temp
this.dialogVisible = false
this.$refs['dataForm'].resetFields()
}
},
}
</script>
<style scoped>
</style>

View File

@@ -1,393 +0,0 @@
<template>
<div class="app-container">
<div class="filter-container">
<el-input
v-model="listQuery.keyword"
size="small"
placeholder="请输入关键词"
clearable
class="filter-item"
style="width: 200px;margin-left: 10px;"
/>
<el-button-group style="margin-left: 10px;">
<el-button
size="small"
class="filter-item"
type="primary"
icon="el-icon-search"
@click="search"
>
搜索
</el-button>
<el-button
size="small"
class="filter-item"
type="primary"
icon="el-icon-refresh"
@click="refresh"
>
重置
</el-button>
</el-button-group>
<el-button
size="small"
class="filter-item"
type="primary"
icon="el-icon-plus"
style="margin-left: 10px;"
@click="add"
>
新增
</el-button>
</div>
<el-table
v-loading="listLoading"
:data="list"
element-loading-text="Loading"
border
fit
height="100%"
class="table-container"
highlight-current-row
>
<el-table-column
label="序号"
width="150"
align="center"
>
<template slot-scope="scope">
{{ scope.$index+1 }}
</template>
</el-table-column>
<el-table-column
label="会员卡id"
width="160"
align="center"
>
<template slot-scope="scope">
{{ scope.row.memberCardId }}
</template>
</el-table-column>
<el-table-column
label="会员id"
width="160"
align="center"
>
<template slot-scope="scope">
{{ scope.row.memberId }}
</template>
</el-table-column>
<el-table-column
label="卡项ID"
width="160"
align="center"
>
<template slot-scope="scope">
{{ scope.row.cardId }}
</template>
</el-table-column>
<el-table-column
label="卡号"
width="160"
align="center"
>
<template slot-scope="scope">
{{ scope.row.cardNo }}
</template>
</el-table-column>
<el-table-column
label="卡名称"
width="160"
align="center"
>
<template slot-scope="scope">
{{ scope.row.cardName }}
</template>
</el-table-column>
<el-table-column
label="余额"
width="160"
align="center"
>
<template slot-scope="scope">
{{ scope.row.amount }}
</template>
</el-table-column>
<el-table-column
label="赠送金额"
width="160"
align="center"
>
<template slot-scope="scope">
{{ scope.row.giveAmount }}
</template>
</el-table-column>
<el-table-column
label="商品折扣"
width="160"
align="center"
>
<template slot-scope="scope">
{{ scope.row.discount }}
</template>
</el-table-column>
<el-table-column
label="开卡金额"
width="160"
align="center"
>
<template slot-scope="scope">
{{ scope.row.buildCardAmount }}
</template>
</el-table-column>
<el-table-column
label="提成比例"
width="160"
align="center"
>
<template slot-scope="scope">
{{ scope.row.pushMoney }}
</template>
</el-table-column>
<el-table-column
label="0正常 1取消"
width="160"
align="center"
>
<template slot-scope="scope">
{{ scope.row.cardStatus }}
</template>
</el-table-column>
<el-table-column
label="0正常 1删除"
width="160"
align="center"
>
<template slot-scope="scope">
{{ scope.row.deleted }}
</template>
</el-table-column>
<el-table-column
label="乐观锁字段"
width="160"
align="center"
>
<template slot-scope="scope">
{{ scope.row.version }}
</template>
</el-table-column>
<el-table-column
label="门店id"
width="160"
align="center"
>
<template slot-scope="scope">
{{ scope.row.shopId }}
</template>
</el-table-column>
<el-table-column
label="门店名"
width="160"
align="center"
>
<template slot-scope="scope">
{{ scope.row.shopName }}
</template>
</el-table-column>
<el-table-column
label="创建人"
width="160"
align="center"
>
<template slot-scope="scope">
{{ scope.row.createName }}
</template>
</el-table-column>
<el-table-column
label="创建时间"
width="160"
align="center"
>
<template slot-scope="scope">
{{ scope.row.createTime }}
</template>
</el-table-column>
<el-table-column
label="创建人id"
width="160"
align="center"
>
<template slot-scope="scope">
{{ scope.row.createId }}
</template>
</el-table-column>
<el-table-column
label="修改时间"
width="160"
align="center"
>
<template slot-scope="scope">
{{ scope.row.updateTime }}
</template>
</el-table-column>
<el-table-column
label="修改人"
width="160"
align="center"
>
<template slot-scope="scope">
{{ scope.row.updateName }}
</template>
</el-table-column>
<el-table-column
label="修改人id"
width="160"
align="center"
>
<template slot-scope="scope">
{{ scope.row.updateId }}
</template>
</el-table-column>
<el-table-column
fixed="right"
label="操作"
width="200"
align="center"
>
<template slot-scope="scope">
<el-button-group>
<el-button
type="primary"
icon="el-icon-edit"
size="mini"
@click="edit(scope)"
>
修改
</el-button>
<el-button
type="danger"
icon="el-icon-delete"
size="mini"
@click="del(scope)"
>
删除
</el-button>
</el-button-group>
</template>
</el-table-column>
</el-table>
<pagination
:total="total"
:page.sync="listQuery.page"
:limit.sync="listQuery.limit"
@pagination="fetchData"
/>
<add-form ref="addForm" @ok="addOk" />
<edit-form ref="editForm" @ok="editOk" />
</div>
</template>
<script>
import {getMemberCardPage,deleteMemberCard} from "@/api/business/memberCard/memberCard";
import {deepClone,success} from "@/utils";
import confirm from "@/utils/confirm";
import Pagination from '@/components/Pagination'
import addForm from "@/views/business/memberCard/addMemberCard";
import editForm from "@/views/business/memberCard/editMemberCard";
export default {
name: 'memberCard',
components: {addForm,editForm,Pagination},
data() {
return {
total: 0,
list: [],
listLoading: true,
listQuery: {
page: 1,
limit: 50,
keyword: ''
},
temp: {},
}
},
created() {
this.fetchData()
},
methods: {
search() {
this.fetchData()
},
refresh() {
this.listQuery = this.$options.data().listQuery
this.fetchData()
},
fetchData() {
this.listLoading = true
getMemberCardPage(this.listQuery).then(response => {
const { records, total } = response.data
this.list = records
this.total = total
this.listLoading = false
})
},
add(){
this.$refs.addForm.open()
},
addOk(){
this.fetchData()
},
edit(scope) {
const temp = deepClone(scope.row)
this.$refs.editForm.open(temp)
},
editOk(){
this.fetchData()
},
del(scope) {
confirm("确定要删除吗?").then(res=>{
if(res){
deleteMemberCard(scope.row.memberCardId).then(response => {
console.log(response)
success('删除成功')
this.fetchData()
})
}
})
},
}
}
</script>
<style scoped>
</style>

View File

@@ -18,60 +18,36 @@
style="height: 90%;"
>
<el-form-item label="笔记id" prop="noteId" class="is-required">
<el-input v-model="temp.noteId" placeholder="笔记id" />
</el-form-item>
<el-form-item label="笔记标题" prop="noteTitle" class="is-required">
<el-input v-model="temp.noteTitle" placeholder="笔记标题" />
</el-form-item>
<el-form-item label="笔记内容" prop="noteContent" class="is-required">
<el-input v-model="temp.noteContent" placeholder="笔记内容" />
</el-form-item>
<el-form-item label="类型id" prop="noteCategory" class="is-required">
<el-input v-model="temp.noteCategory" placeholder="类型id" />
</el-form-item>
<el-form-item label="笔记类型名" prop="noteCategoryName" class="is-required">
<el-input v-model="temp.noteCategoryName" placeholder="笔记类型名" />
</el-form-item>
<el-form-item label="1 图文 2视频 3文字" prop="noteType" class="is-required">
<el-input v-model="temp.noteType" placeholder="1 图文 2视频 3文字" />
</el-form-item>
<el-form-item label="作者ID" prop="authorId" class="is-required">
<el-input v-model="temp.authorId" placeholder="作者ID" />
</el-form-item>
<el-form-item label="作者头像" prop="authorAvatar" class="is-required">
<el-input v-model="temp.authorAvatar" placeholder="作者头像" />
<el-input type="textarea" v-model="temp.noteContent" placeholder="笔记内容" />
</el-form-item>
<el-form-item label="作者名字" prop="authorName" class="is-required">
<el-input v-model="temp.authorName" placeholder="作者名字" />
</el-form-item>
<el-form-item label="首图URL" prop="firstPicture" class="is-required">
<el-input v-model="temp.firstPicture" placeholder="首图URL" />
</el-form-item>
<el-form-item label="乐观锁字段" prop="version" class="is-required">
<el-input v-model="temp.version" placeholder="乐观锁字段" />
</el-form-item>
<el-form-item label="0正常 1删除" prop="deleted" class="is-required">
<el-input v-model="temp.deleted" placeholder="0正常 1删除" />
<el-input v-model="temp.authorName" readonly placeholder="作者名字" />
</el-form-item>
<el-form-item label="创建时间" prop="createTime" class="is-required">
<el-input v-model="temp.createTime" placeholder="创建时间" />
<el-date-picker
v-model="temp.createTime"
type="datetime"
placeholder="创建时间"
value-format="yyyy-MM-dd HH:mm:ss"
>
</el-date-picker>
</el-form-item>
<el-form-item label="修改时间" prop="updateTime" class="is-required">
<el-input v-model="temp.updateTime" placeholder="修改时间" />
<el-date-picker
v-model="temp.updateTime"
type="datetime"
placeholder="修改时间"
value-format="yyyy-MM-dd HH:mm:ss"
>
</el-date-picker>
</el-form-item>
<el-form-item label="ip地址" prop="ipAddress" class="is-required">
@@ -83,11 +59,18 @@
</el-form-item>
<el-form-item label="点赞数" prop="upCount" class="is-required">
<el-input v-model="temp.upCount" placeholder="点赞数" />
<el-input v-model="temp.upCount" readonly placeholder="点赞数" />
</el-form-item>
<el-form-item label="收藏数" prop="starCount" class="is-required">
<el-input v-model="temp.starCount" placeholder="收藏数" />
<el-input v-model="temp.starCount" readonly placeholder="收藏数" />
</el-form-item>
<el-form-item label="冻结状态" prop="authorStatus" class="is-required">
<el-radio-group v-model="temp.noteStatus">
<el-radio :label="0">正常</el-radio>
<el-radio :label="1">冻结</el-radio>
</el-radio-group>
</el-form-item>
</el-form>

View File

@@ -30,16 +30,6 @@
重置
</el-button>
</el-button-group>
<el-button
size="small"
class="filter-item"
type="primary"
icon="el-icon-plus"
style="margin-left: 10px;"
@click="add"
>
新增
</el-button>
</div>
<el-table
@@ -55,22 +45,23 @@
<el-table-column
label="序号"
width="150"
width="100"
align="center"
>
<template slot-scope="scope">
{{ scope.$index+1 }}
</template>
</el-table-column>
<el-table-column
label="笔记id"
width="160"
align="center"
>
<template slot-scope="scope">
{{ scope.row.noteId }}
</template>
</el-table-column>
<el-table-column
label="首图URL"
width="200"
align="center"
>
<template slot-scope="scope">
<img :src="scope.row.firstPicture" class="note-img">
</template>
</el-table-column>
<el-table-column
label="笔记标题"
@@ -84,7 +75,7 @@
<el-table-column
label="笔记内容"
width="160"
width="260"
align="center"
>
<template slot-scope="scope">
@@ -92,115 +83,98 @@
</template>
</el-table-column>
<el-table-column
label="笔记博主"
width="160"
align="center"
>
<template slot-scope="scope">
<div style="display: flex;align-items: center;justify-content: center;">
<el-avatar shape="circle" :size="30" fit="cover" :src="scope.row.authorAvatar "></el-avatar>
&nbsp;
{{ scope.row.authorName }}
</div>
</template>
</el-table-column>
<el-table-column
label="类型id"
label="笔记类型"
width="160"
align="center"
>
<template slot-scope="scope">
{{ scope.row.noteCategory }}
<span v-show="scope.row.noteType==1">图文</span>
<span v-show="scope.row.noteType==2">视频</span>
<span v-show="scope.row.noteType==3">文字</span>
</template>
</el-table-column>
<el-table-column
label="笔记类型名"
width="160"
align="center"
<el-table-column
label="点赞数"
width="100"
align="center"
>
<template slot-scope="scope">
{{ scope.row.upCount }}
</template>
</el-table-column>
<el-table-column
label="收藏数"
width="100"
align="center"
>
<template slot-scope="scope">
{{ scope.row.starCount }}
</template>
</el-table-column>
<el-table-column
label="冻结状态"
width="160"
align="center"
>
<template slot-scope="scope">
{{ scope.row.noteStatus==0?'正常':'冻结' }}
</template>
</el-table-column>
<el-table-column
label="删除状态"
width="100"
align="center"
>
<template slot-scope="scope">
{{ scope.row.deleted==0?'正常':'删除' }}
</template>
</el-table-column>
<el-table-column
label="创建时间"
width="160"
align="center"
>
<template slot-scope="scope">
{{ scope.row.noteCategoryName }}
</template>
<template slot-scope="scope">
{{ scope.row.createTime }}
</template>
</el-table-column>
<el-table-column
label="1 图文 2视频 3文字"
width="160"
align="center"
>
<template slot-scope="scope">
{{ scope.row.noteType }}
</template>
</el-table-column>
<el-table-column
label="编辑时间"
width="160"
align="center"
>
<template slot-scope="scope">
{{ scope.row.updateTime }}
</template>
</el-table-column>
<el-table-column
label="作者ID"
width="160"
align="center"
>
<template slot-scope="scope">
{{ scope.row.authorId }}
</template>
</el-table-column>
<el-table-column
label="作者头像"
width="160"
align="center"
>
<template slot-scope="scope">
{{ scope.row.authorAvatar }}
</template>
</el-table-column>
<el-table-column
label="作者名字"
width="160"
align="center"
>
<template slot-scope="scope">
{{ scope.row.authorName }}
</template>
</el-table-column>
<el-table-column
label="首图URL"
width="160"
align="center"
>
<template slot-scope="scope">
{{ scope.row.firstPicture }}
</template>
</el-table-column>
<el-table-column
label="乐观锁字段"
width="160"
align="center"
>
<template slot-scope="scope">
{{ scope.row.version }}
</template>
</el-table-column>
<el-table-column
label="0正常 1删除"
width="160"
align="center"
>
<template slot-scope="scope">
{{ scope.row.deleted }}
</template>
</el-table-column>
<el-table-column
label="创建时间"
width="160"
align="center"
>
<template slot-scope="scope">
{{ scope.row.createTime }}
</template>
</el-table-column>
<el-table-column
label="修改时间"
width="160"
align="center"
>
<template slot-scope="scope">
{{ scope.row.updateTime }}
</template>
</el-table-column>
<el-table-column
label="ip地址"
@@ -214,7 +188,7 @@
<el-table-column
label="真实ip地址"
width="160"
width="100"
align="center"
>
<template slot-scope="scope">
@@ -222,26 +196,6 @@
</template>
</el-table-column>
<el-table-column
label="点赞数"
width="160"
align="center"
>
<template slot-scope="scope">
{{ scope.row.upCount }}
</template>
</el-table-column>
<el-table-column
label="收藏数"
width="160"
align="center"
>
<template slot-scope="scope">
{{ scope.row.starCount }}
</template>
</el-table-column>
<el-table-column
fixed="right"
@@ -259,14 +213,6 @@
>
修改
</el-button>
<el-button
type="danger"
icon="el-icon-delete"
size="mini"
@click="del(scope)"
>
删除
</el-button>
</el-button-group>
</template>
</el-table-column>
@@ -359,5 +305,7 @@ export default {
</script>
<style scoped>
.note-img{
height: 150px;width: 150px;border-radius: 10px;object-fit: contain;border: 1px solid #eeeeee;box-shadow: 0 2px 12px 0 rgba(0, 0, 0, 0.1);
}
</style>

View File

@@ -1,242 +0,0 @@
<template>
<div>
<el-dialog
:close-on-click-modal="false"
top="3vh"
height="80%"
width="40%"
:visible.sync="dialogVisible"
center
@close="handleCancel"
>
<div class="el-dialog-div">
<el-form
:rules="rules"
ref="dataForm"
:model="temp"
label-position="right"
label-width="120px"
style="height: 90%;"
>
<el-form-item label="分类" prop="categoryId" class="is-required">
<category-select v-model="temp.categoryId" @changeSelect="getCategory"/>
</el-form-item>
<el-form-item label="商品名" prop="productName" class="is-required">
<el-input v-model="temp.productName" placeholder="商品名" />
</el-form-item>
<el-form-item label="商品金额" prop="productAmount" class="is-required">
<el-input v-model="temp.productAmount" placeholder="商品金额" />
</el-form-item>
<el-form-item label="商品会员金额" prop="productMemberAmount" class="is-required">
<el-input v-model="temp.productMemberAmount" placeholder="商品会员金额" />
</el-form-item>
<el-form-item label="商品图片" prop="productImage" class="is-required">
<el-upload
class="avatar-uploader"
:action="''"
:show-file-list="false"
:before-upload="beforeAvatarUpload"
>
<img v-if="imageUrl" :src="imageUrl" class="avatar" style="width: 140px;height: 140px;">
<div style="width: 140px;height: 140px;display: flex;justify-content: center;align-items: center;border: 1px solid #eee;" v-else>
<i class="el-icon-plus avatar-uploader-icon" ></i>
</div>
</el-upload>
<x-cropper ref="iscropper"/>
</el-form-item>
<el-form-item label="库存管理" prop="stockControl" class="is-required">
<el-radio-group v-model="temp.stockControl" size="small">
<el-radio-button label="0">关闭</el-radio-button>
<el-radio-button label="1">开启</el-radio-button>
</el-radio-group>
</el-form-item>
<el-form-item v-if="temp.stockControl==1" label="初始化库存数量" prop="productCount" class="is-required">
<el-input v-model="temp.productCount" placeholder="初始化库存数量" />
</el-form-item>
<el-form-item label="提成方式" prop="pushType" class="is-required">
<el-radio-group v-model="temp.pushType" size="small">
<el-radio-button label="0">固定金额</el-radio-button>
<el-radio-button label="1">比例</el-radio-button>
</el-radio-group>
</el-form-item>
<el-form-item label="提成金额" v-if="temp.pushType==0" prop="pushAmount" class="is-required">
<el-input v-model="temp.pushAmount" placeholder="提成金额" />
</el-form-item>
<el-form-item label="提成比例" v-if="temp.pushType==1" prop="pushPercent" class="is-required">
<el-input v-model="temp.pushPercent" placeholder="提成比例" />
</el-form-item>
<el-form-item label="状态" prop="productStatus" class="is-required">
<el-radio-group v-model="temp.productStatus" size="small">
<el-radio-button label="0">正常</el-radio-button>
<el-radio-button label="1">禁用</el-radio-button>
</el-radio-group>
</el-form-item>
<!-- <el-form-item label="所属门店" prop="shopId" class="is-required">-->
<!-- <dept-select v-model="temp.shopId" @changeSelect="getDept" style="width: 100%;"/>-->
<!-- </el-form-item>-->
</el-form>
</div>
<div slot="footer" class="dialog-footer">
<el-button @click="handleCancel"> </el-button>
<el-button type="primary" @click="submit"> </el-button>
</div>
</el-dialog>
</div>
</template>
<script>
import request from '@/utils/request'
import {addProduct} from "@/api/business/product/product";
import {setRequiredFields} from "@/utils";
import CategorySelect from "@/views/common/business/categorySelect";
import XCropper from "@/views/common/XCropper";
import DeptSelect from "@/views/common/system/deptSelect";
const requiredFields = []
export default {
name: "addForm",
components: {DeptSelect, XCropper, CategorySelect},
data() {
return {
rules: setRequiredFields(requiredFields),
dialogVisible: false,
temp: {
productId:'',
categoryId:'',
categoryName:'',
productName:'',
productAmount:'',
productMemberAmount:'',
productImage:'',
productCount:'',
pushAmount:'',
pushPercent:'',
stockControl:0,
productStatus:0,
shopId:'',
shopName:'',
},
imageUrl: ''
}
},
methods: {
open(categoryId) {
this.dialogVisible = true
this.temp.categoryId = categoryId
},
beforeAvatarUpload(file){
console.log("进入了文件上传")
let _this = this
return new Promise((resolve, reject) => {
let types = ['image/jpeg', 'image/jpg', 'image/png'];
// let width = 140;
// let height = 140;
const isJPG = types.includes(file.type)
const isLt2M = file.size / 1024 / 1024 < 10
if (!isJPG) {
_this.$message.error('上传图片只能是 JPG 或 png格式!')
reject()
return
}
if (!isLt2M) {
_this.$message.error('上传图片大小不能超过 10MB!')
reject()
return
}
let _URL = window.URL || window.webkitURL;
console.log( _this.$refs.iscropper)
//上传前对图片进行裁剪
_this.$refs.iscropper.showModal({
img: _URL.createObjectURL(file) , // 裁剪图片的地址
autoCropWidth: 140, // 默认生成截图框宽度
autoCropHeight: 140, // 默认生成截图框高度
fixedBox:true,
success: res => {
//拿到裁剪后图片没有name 属性
//file的name属性为只读 不能手动设置
//创建一个新的图片对象 设置原始文件名
const cloneFile = new File([res.img], file.name);
const formData = new FormData()
// console.log(param.file)
//通过 append 函数往formdata对象里传参这里传的是后端需求的接口信息
formData.append('file', cloneFile)
formData.append('fileSavePath', "productImage")
//执行上传操作
request({
method: "post",
url: "/upload",
data: formData,
headers: { "Content-Type": "multipart/form-data" },
}).then(response => {
//请求成功
_this.handleAvatarSuccess(response,cloneFile)
})
resolve()
}
})
})
},
handleAvatarSuccess(res,file) {
if(res.code == 200){
this.imageUrl = URL.createObjectURL(file);
this.temp.productImage = res.data.fileId
}else{
this.imageUrl = '';
this.temp.productImg = ''
}
},
submit() {
this.$refs['dataForm'].validate((valid) => {
if (valid) {
addProduct(this.temp).then(response =>{
this.handleCancel()
this.$emit('ok', response.data)
})
} else {
console.log('error submit!!');
return false;
}
});
},
handleCancel() {
//初始化
this.imageUrl = '';
this.temp = this.$options.data().temp
this.dialogVisible = false
this.$refs['dataForm'].resetFields();
},
getCategory(e){
console.log(e)
this.temp.categoryName = e.categoryName
},
getDept(e){
this.temp.shopName = e.deptName
}
},
}
</script>
<style scoped>
</style>

View File

@@ -1,243 +0,0 @@
<template>
<div>
<el-dialog
:close-on-click-modal="false"
top="3vh"
height="80%"
width="40%"
:visible.sync="dialogVisible"
center
@close="handleCancel"
>
<div class="el-dialog-div">
<el-form
:rules="rules"
ref="dataForm"
:model="temp"
label-position="right"
label-width="120px"
style="height: 90%;"
>
<el-form-item label="分类" prop="categoryId" class="is-required">
<category-select v-model="temp.categoryId" @changeSelect="getCategory"/>
</el-form-item>
<el-form-item label="商品名" prop="productName" class="is-required">
<el-input v-model="temp.productName" placeholder="商品名" />
</el-form-item>
<el-form-item label="商品金额" prop="productAmount" class="is-required">
<el-input v-model="temp.productAmount" placeholder="商品金额" />
</el-form-item>
<el-form-item label="商品会员金额" prop="productMemberAmount" class="is-required">
<el-input v-model="temp.productMemberAmount" placeholder="商品会员金额" />
</el-form-item>
<el-form-item label="商品图片" prop="productImage" class="is-required">
<el-upload
class="avatar-uploader"
:action="''"
:show-file-list="false"
:before-upload="beforeAvatarUpload"
>
<img v-if="imageUrl" :src="imageUrl" class="avatar" style="width: 140px;height: 140px;">
<div style="width: 140px;height: 140px;display: flex;justify-content: center;align-items: center;border: 1px solid #eee;" v-else>
<i class="el-icon-plus avatar-uploader-icon" ></i>
</div>
</el-upload>
<x-cropper ref="iscropper"/>
</el-form-item>
<el-form-item label="库存管理" prop="stockControl" class="is-required">
<el-radio-group v-model="temp.stockControl" size="small">
<el-radio-button label="0">关闭</el-radio-button>
<el-radio-button label="1">开启</el-radio-button>
</el-radio-group>
</el-form-item>
<el-form-item v-if="temp.stockControl==1" label="库存数量" prop="productCount" class="is-required">
<el-input v-model="temp.productCount" readonly placeholder="库存数量" />
</el-form-item>
<el-form-item label="提成方式" prop="pushType" class="is-required">
<el-radio-group v-model="temp.pushType" size="small">
<el-radio-button label="0">固定金额</el-radio-button>
<el-radio-button label="1">比例</el-radio-button>
</el-radio-group>
</el-form-item>
<el-form-item label="提成金额" v-if="temp.pushType==0" prop="pushAmount" class="is-required">
<el-input v-model="temp.pushAmount" placeholder="提成金额" />
</el-form-item>
<el-form-item label="提成比例" v-if="temp.pushType==1" prop="pushPercent" class="is-required">
<el-input v-model="temp.pushPercent" placeholder="提成比例" />
</el-form-item>
<el-form-item label="状态" prop="productStatus" class="is-required">
<el-radio-group v-model="temp.productStatus" size="small">
<el-radio-button label="0">正常</el-radio-button>
<el-radio-button label="1">禁用</el-radio-button>
</el-radio-group>
</el-form-item>
<!-- <el-form-item label="所属门店" prop="shopId" class="is-required">-->
<!-- <dept-select v-model="temp.shopId" @changeSelect="getDept" style="width: 100%;"/>-->
<!-- </el-form-item>-->
</el-form>
</div>
<div slot="footer" class="dialog-footer">
<el-button @click="handleCancel"> </el-button>
<el-button type="primary" @click="submit"> </el-button>
</div>
</el-dialog>
</div>
</template>
<script>
import request from '@/utils/request'
import { editProduct } from "@/api/business/product/product";
import {setRequiredFields} from "@/utils";
import CategorySelect from "@/views/common/business/categorySelect";
import XCropper from "@/views/common/XCropper";
import DeptSelect from "@/views/common/system/deptSelect";
const requiredFields = []
export default {
name: "editForm",
components: {DeptSelect, XCropper, CategorySelect},
data() {
return {
rules: setRequiredFields(requiredFields),
dialogVisible: false,
temp: {
productId:'',
categoryId:'',
categoryName:'',
productName:'',
productAmount:'',
productMemberAmount:'',
productImage:'',
productCount:'',
pushAmount:'',
pushPercent:'',
productStatus:0,
shopId:'',
shopName:'',
pushType:0
},
imageUrl:''
}
},
methods: {
open(row) {
this.temp = this.$options.data().temp
this.temp = row
if(this.temp.productImageUrl){
this.imageUrl = this.baseUrl + this.temp.productImageUrl
}
this.dialogVisible = true
},
beforeAvatarUpload(file){
console.log("进入了文件上传")
let _this = this
return new Promise((resolve, reject) => {
let types = ['image/jpeg', 'image/jpg', 'image/png'];
// let width = 140;
// let height = 140;
const isJPG = types.includes(file.type)
const isLt2M = file.size / 1024 / 1024 < 2
if (!isJPG) {
_this.$message.error('上传图片只能是 JPG 或 png格式!')
reject()
}
if (!isLt2M) {
_this.$message.error('上传图片大小不能超过 2MB!')
reject()
}
let _URL = window.URL || window.webkitURL;
console.log( _this.$refs.iscropper)
//上传前对图片进行裁剪
_this.$refs.iscropper.showModal({
img: _URL.createObjectURL(file) , // 裁剪图片的地址
autoCropWidth: 140, // 默认生成截图框宽度
autoCropHeight: 140, // 默认生成截图框高度
fixedBox:true,
success: res => {
//拿到裁剪后图片没有name 属性
//file的name属性为只读 不能手动设置
//创建一个新的图片对象 设置原始文件名
const cloneFile = new File([res.img], file.name);
const formData = new FormData()
// console.log(param.file)
//通过 append 函数往formdata对象里传参这里传的是后端需求的接口信息
formData.append('file', cloneFile)
formData.append('fileSavePath', "productImage")
//执行上传操作
request({
method: "post",
url: "/upload",
data: formData,
headers: { "Content-Type": "multipart/form-data" },
}).then(response => {
//请求成功
_this.handleAvatarSuccess(response,cloneFile)
})
resolve()
}
})
})
},
handleAvatarSuccess(res,file) {
if(res.code == 200){
this.imageUrl = URL.createObjectURL(file);
this.temp.productImage = res.data.fileId
}else{
this.imageUrl = '';
this.temp.productImg = ''
}
},
submit() {
this.$refs['dataForm'].validate((valid) => {
if (valid) {
editProduct(this.temp).then(response => {
this.handleCancel()
this.$emit('ok', response.data)
})
} else {
console.log('error submit!!');
return false;
}
});
},
handleCancel() {
//初始化
this.temp = this.$options.data().temp
this.dialogVisible = false
this.$refs['dataForm'].resetFields()
},
getCategory(e){
console.log(e)
this.temp.categoryName = e.categoryName
},
getDept(e){
this.temp.shopName = e.deptName
}
},
}
</script>
<style scoped>
</style>

View File

@@ -1,360 +0,0 @@
<template>
<div class="app-container">
<div class="filter-container">
<el-input
v-model="listQuery.keyword"
size="small"
placeholder="请输入关键词"
clearable
class="filter-item"
style="width: 200px;margin-left: 10px;"
/>
<el-button-group style="margin-left: 10px;">
<el-button
size="small"
class="filter-item"
type="primary"
icon="el-icon-search"
@click="search"
>
搜索
</el-button>
<el-button
size="small"
class="filter-item"
type="primary"
icon="el-icon-refresh"
@click="refresh"
>
重置
</el-button>
</el-button-group>
<el-button
size="small"
class="filter-item"
type="primary"
icon="el-icon-plus"
style="margin-left: 10px;"
@click="add"
>
新增
</el-button>
</div>
<el-row :gutter="24" class="row-container">
<el-col :span="4" style="height: 100%;">
<el-tree
default-expand-all
:data="categoryList"
node-key="categoryId"
:props="defaultProps"
@node-click="handleNodeClick"
>
<span class="custom-tree-node" slot-scope="{ node, data }">
<span :class="listQuery.categoryId==data.categoryId?'info-text':''" > {{ node.label }}</span>
</span>
</el-tree>
</el-col>
<el-col :span="20" style="height: 100%;">
<el-table
v-loading="listLoading"
:data="list"
element-loading-text="Loading"
border
fit
height="100%"
class="table-container"
highlight-current-row
>
<el-table-column
label="序号"
width="150"
align="center"
>
<template slot-scope="scope">
{{ scope.$index+1 }}
</template>
</el-table-column>
<el-table-column
label="分类名"
width="160"
align="center"
>
<template slot-scope="scope">
{{ scope.row.categoryName }}
</template>
</el-table-column>
<el-table-column
label="商品名"
width="160"
align="center"
>
<template slot-scope="scope">
{{ scope.row.productName }}
</template>
</el-table-column>
<el-table-column
label="商品金额"
width="160"
align="center"
>
<template slot-scope="scope">
{{ scope.row.productAmount }}
</template>
</el-table-column>
<el-table-column
label="商品会员金额"
width="160"
align="center"
>
<template slot-scope="scope">
{{ scope.row.productMemberAmount }}
</template>
</el-table-column>
<el-table-column
label="商品图片"
width="160"
align="center"
>
<template slot-scope="scope">
<img v-if="scope.row.productImage" :src=" baseUrl + scope.row.productImageUrl" class="avatar" style="width: 40px;height: 40px;">
</template>
</el-table-column>
<el-table-column
label="库存数量"
width="160"
align="center"
>
<template slot-scope="scope">
{{ scope.row.productCount }}
</template>
</el-table-column>
<el-table-column
label="提成金额"
width="160"
align="center"
>
<template slot-scope="scope">
{{ scope.row.pushAmount }}
</template>
</el-table-column>
<el-table-column
label="提成比例"
width="160"
align="center"
>
<template slot-scope="scope">
{{ scope.row.pushPercent }}
</template>
</el-table-column>
<el-table-column
label="0正常 1下架"
width="160"
align="center"
>
<template slot-scope="scope">
{{ scope.row.productStatus }}
</template>
</el-table-column>
<el-table-column
label="门店名"
width="160"
align="center"
>
<template slot-scope="scope">
{{ scope.row.shopName }}
</template>
</el-table-column>
<el-table-column
label="创建人"
width="160"
align="center"
>
<template slot-scope="scope">
{{ scope.row.createName }}
</template>
</el-table-column>
<el-table-column
label="创建时间"
width="160"
align="center"
>
<template slot-scope="scope">
{{ scope.row.createTime }}
</template>
</el-table-column>
<el-table-column
label="修改人"
width="160"
align="center"
>
<template slot-scope="scope">
{{ scope.row.updateName }}
</template>
</el-table-column>
<el-table-column
label="修改时间"
width="160"
align="center"
>
<template slot-scope="scope">
{{ scope.row.updateTime }}
</template>
</el-table-column>
<el-table-column
fixed="right"
label="操作"
width="200"
align="center"
>
<template slot-scope="scope">
<el-button-group>
<el-button
type="primary"
icon="el-icon-edit"
size="mini"
@click="edit(scope)"
>
修改
</el-button>
<el-button
type="danger"
icon="el-icon-delete"
size="mini"
@click="del(scope)"
v-hasPerms="'product:del'"
>
删除
</el-button>
</el-button-group>
</template>
</el-table-column>
</el-table>
<pagination
:total="total"
:page.sync="listQuery.page"
:limit.sync="listQuery.limit"
@pagination="fetchData"
/>
</el-col>
</el-row>
<add-form ref="addForm" @ok="addOk" />
<edit-form ref="editForm" @ok="editOk" />
</div>
</template>
<script>
import {getCategoryList} from "@/api/business/category/category";
import {getProductPage,deleteProduct} from "@/api/business/product/product";
import {deepClone,success} from "@/utils";
import confirm from "@/utils/confirm";
import Pagination from '@/components/Pagination'
import addForm from "@/views/business/product/addProduct";
import editForm from "@/views/business/product/editProduct";
export default {
name: 'product',
components: {addForm,editForm,Pagination},
data() {
return {
total: 0,
list: [],
listLoading: true,
listQuery: {
page: 1,
limit: 50,
categoryId: '',
keyword: ''
},
defaultProps: {
id: 'categoryId',
label: 'categoryName',
},
temp: {},
categoryList: []
}
},
created() {
this.fetchData()
this.getCategoryList()
},
methods: {
getCategoryList(){
getCategoryList().then(res => {
this.categoryList = res.data
})
},
handleNodeClick(e){
this.listQuery.categoryId = e.categoryId
this.fetchData()
},
search() {
this.fetchData()
},
refresh() {
this.listQuery = this.$options.data().listQuery
this.fetchData()
},
fetchData() {
this.listLoading = true
getProductPage(this.listQuery).then(response => {
const { records, total } = response.data
this.list = records
this.total = total
this.listLoading = false
})
},
add(){
this.$refs.addForm.open(this.listQuery.categoryId)
},
addOk(){
this.fetchData()
},
edit(scope) {
const temp = deepClone(scope.row)
this.$refs.editForm.open(temp)
},
editOk(){
this.fetchData()
},
del(scope) {
confirm("确定要删除吗?").then(res=>{
if(res){
deleteProduct(scope.row.productId).then(response => {
console.log(response)
success('删除成功')
this.fetchData()
})
}
})
},
}
}
</script>
<style scoped>
</style>

View File

@@ -1,181 +0,0 @@
<template>
<div>
<el-dialog
:close-on-click-modal="false"
top="8vh"
width="40%"
:visible.sync="dialogVisible"
center
@close="handleCancel"
>
<div class="el-dialog-div">
<el-form
:rules="rules"
ref="dataForm"
:model="temp"
label-position="right"
label-width="120px"
style="height: 90%;"
>
<el-form-item label="订单id" prop="sellId" class="is-required">
<el-input v-model="temp.sellId" placeholder="订单id" />
</el-form-item>
<el-form-item label="订单号" prop="sellNo" class="is-required">
<el-input v-model="temp.sellNo" placeholder="订单号" />
</el-form-item>
<el-form-item label="流水号" prop="serialNo" class="is-required">
<el-input v-model="temp.serialNo" placeholder="流水号" />
</el-form-item>
<el-form-item label="会员ID" prop="memberId" class="is-required">
<el-input v-model="temp.memberId" placeholder="会员ID" />
</el-form-item>
<el-form-item label="会员名称" prop="memberName" class="is-required">
<el-input v-model="temp.memberName" placeholder="会员名称" />
</el-form-item>
<el-form-item label="消费金额" prop="sellAmount" class="is-required">
<el-input v-model="temp.sellAmount" placeholder="消费金额" />
</el-form-item>
<el-form-item label="实际入账" prop="realAmount" class="is-required">
<el-input v-model="temp.realAmount" placeholder="实际入账" />
</el-form-item>
<el-form-item label="1开卡 2续卡 3项目/商品" prop="sellType" class="is-required">
<el-input v-model="temp.sellType" placeholder="1开卡 2续卡 3项目/商品" />
</el-form-item>
<el-form-item label="0正常 1取消" prop="sellStatus" class="is-required">
<el-input v-model="temp.sellStatus" placeholder="0正常 1取消" />
</el-form-item>
<el-form-item label="0正常 1删除" prop="deleted" class="is-required">
<el-input v-model="temp.deleted" placeholder="0正常 1删除" />
</el-form-item>
<el-form-item label="乐观锁字段" prop="version" class="is-required">
<el-input v-model="temp.version" placeholder="乐观锁字段" />
</el-form-item>
<el-form-item label="门店id" prop="shopId" class="is-required">
<el-input v-model="temp.shopId" placeholder="门店id" />
</el-form-item>
<el-form-item label="门店名" prop="shopName" class="is-required">
<el-input v-model="temp.shopName" placeholder="门店名" />
</el-form-item>
<el-form-item label="创建人" prop="createName" class="is-required">
<el-input v-model="temp.createName" placeholder="创建人" />
</el-form-item>
<el-form-item label="创建时间" prop="createTime" class="is-required">
<el-input v-model="temp.createTime" placeholder="创建时间" />
</el-form-item>
<el-form-item label="创建人id" prop="createId" class="is-required">
<el-input v-model="temp.createId" placeholder="创建人id" />
</el-form-item>
<el-form-item label="修改时间" prop="updateTime" class="is-required">
<el-input v-model="temp.updateTime" placeholder="修改时间" />
</el-form-item>
<el-form-item label="修改人" prop="updateName" class="is-required">
<el-input v-model="temp.updateName" placeholder="修改人" />
</el-form-item>
<el-form-item label="修改人id" prop="updateId" class="is-required">
<el-input v-model="temp.updateId" placeholder="修改人id" />
</el-form-item>
<el-form-item label="消费后金额" prop="memberCardAfterAmount" class="is-required">
<el-input v-model="temp.memberCardAfterAmount" placeholder="消费后金额" />
</el-form-item>
<el-form-item label="" prop="memberCardBeforeAmount" class="is-required">
<el-input v-model="temp.memberCardBeforeAmount" placeholder="" />
</el-form-item>
</el-form>
</div>
<div slot="footer" class="dialog-footer">
<el-button @click="handleCancel"> </el-button>
<el-button type="primary" @click="submit"> </el-button>
</div>
</el-dialog>
</div>
</template>
<script>
import {addSell} from "@/api/business/sell/sell";
import {setRequiredFields} from "@/utils";
const requiredFields = []
export default {
name: "addForm",
data() {
return {
rules: setRequiredFields(requiredFields),
dialogVisible: false,
temp: {
sellId:'',
sellNo:'',
serialNo:'',
memberId:'',
memberName:'',
sellAmount:'',
realAmount:'',
sellType:'',
sellStatus:'',
deleted:'',
version:'',
shopId:'',
shopName:'',
createName:'',
createTime:'',
createId:'',
updateTime:'',
updateName:'',
updateId:'',
memberCardAfterAmount:'',
memberCardBeforeAmount:'',
},
}
},
methods: {
open() {
this.dialogVisible = true
},
submit() {
this.$refs['dataForm'].validate((valid) => {
if (valid) {
addSell(this.temp).then(response =>{
this.handleCancel()
this.$emit('ok', response.data)
})
} else {
console.log('error submit!!');
return false;
}
});
},
handleCancel() {
//初始化
this.temp = this.$options.data().temp
this.dialogVisible = false
this.$refs['dataForm'].resetFields();
}
},
}
</script>
<style scoped>
</style>

View File

@@ -1,182 +0,0 @@
<template>
<div>
<el-dialog
:close-on-click-modal="false"
top="8vh"
width="40%"
:visible.sync="dialogVisible"
center
@close="handleCancel"
>
<div class="el-dialog-div">
<el-form
:rules="rules"
ref="dataForm"
:model="temp"
label-position="right"
label-width="120px"
style="height: 90%;"
>
<el-form-item label="订单id" prop="sellId" class="is-required">
<el-input v-model="temp.sellId" placeholder="订单id" />
</el-form-item>
<el-form-item label="订单号" prop="sellNo" class="is-required">
<el-input v-model="temp.sellNo" placeholder="订单号" />
</el-form-item>
<el-form-item label="流水号" prop="serialNo" class="is-required">
<el-input v-model="temp.serialNo" placeholder="流水号" />
</el-form-item>
<el-form-item label="会员ID" prop="memberId" class="is-required">
<el-input v-model="temp.memberId" placeholder="会员ID" />
</el-form-item>
<el-form-item label="会员名称" prop="memberName" class="is-required">
<el-input v-model="temp.memberName" placeholder="会员名称" />
</el-form-item>
<el-form-item label="消费金额" prop="sellAmount" class="is-required">
<el-input v-model="temp.sellAmount" placeholder="消费金额" />
</el-form-item>
<el-form-item label="实际入账" prop="realAmount" class="is-required">
<el-input v-model="temp.realAmount" placeholder="实际入账" />
</el-form-item>
<el-form-item label="1开卡 2续卡 3项目/商品" prop="sellType" class="is-required">
<el-input v-model="temp.sellType" placeholder="1开卡 2续卡 3项目/商品" />
</el-form-item>
<el-form-item label="0正常 1取消" prop="sellStatus" class="is-required">
<el-input v-model="temp.sellStatus" placeholder="0正常 1取消" />
</el-form-item>
<el-form-item label="0正常 1删除" prop="deleted" class="is-required">
<el-input v-model="temp.deleted" placeholder="0正常 1删除" />
</el-form-item>
<el-form-item label="乐观锁字段" prop="version" class="is-required">
<el-input v-model="temp.version" placeholder="乐观锁字段" />
</el-form-item>
<el-form-item label="门店id" prop="shopId" class="is-required">
<el-input v-model="temp.shopId" placeholder="门店id" />
</el-form-item>
<el-form-item label="门店名" prop="shopName" class="is-required">
<el-input v-model="temp.shopName" placeholder="门店名" />
</el-form-item>
<el-form-item label="创建人" prop="createName" class="is-required">
<el-input v-model="temp.createName" placeholder="创建人" />
</el-form-item>
<el-form-item label="创建时间" prop="createTime" class="is-required">
<el-input v-model="temp.createTime" placeholder="创建时间" />
</el-form-item>
<el-form-item label="创建人id" prop="createId" class="is-required">
<el-input v-model="temp.createId" placeholder="创建人id" />
</el-form-item>
<el-form-item label="修改时间" prop="updateTime" class="is-required">
<el-input v-model="temp.updateTime" placeholder="修改时间" />
</el-form-item>
<el-form-item label="修改人" prop="updateName" class="is-required">
<el-input v-model="temp.updateName" placeholder="修改人" />
</el-form-item>
<el-form-item label="修改人id" prop="updateId" class="is-required">
<el-input v-model="temp.updateId" placeholder="修改人id" />
</el-form-item>
<el-form-item label="消费后金额" prop="memberCardAfterAmount" class="is-required">
<el-input v-model="temp.memberCardAfterAmount" placeholder="消费后金额" />
</el-form-item>
<el-form-item label="" prop="memberCardBeforeAmount" class="is-required">
<el-input v-model="temp.memberCardBeforeAmount" placeholder="" />
</el-form-item>
</el-form>
</div>
<div slot="footer" class="dialog-footer">
<el-button @click="handleCancel"> </el-button>
<el-button type="primary" @click="submit"> </el-button>
</div>
</el-dialog>
</div>
</template>
<script>
import { editSell } from "@/api/business/sell/sell";
import {setRequiredFields} from "@/utils";
const requiredFields = []
export default {
name: "editForm",
data() {
return {
rules: setRequiredFields(requiredFields),
dialogVisible: false,
temp: {
sellId:'',
sellNo:'',
serialNo:'',
memberId:'',
memberName:'',
sellAmount:'',
realAmount:'',
sellType:'',
sellStatus:'',
deleted:'',
version:'',
shopId:'',
shopName:'',
createName:'',
createTime:'',
createId:'',
updateTime:'',
updateName:'',
updateId:'',
memberCardAfterAmount:'',
memberCardBeforeAmount:'',
},
}
},
methods: {
open(row) {
this.temp = this.$options.data().temp
this.temp = row
this.dialogVisible = true
},
submit() {
this.$refs['dataForm'].validate((valid) => {
if (valid) {
editSell(this.temp).then(response => {
this.handleCancel()
this.$emit('ok', response.data)
})
} else {
console.log('error submit!!');
return false;
}
});
},
handleCancel() {
//初始化
this.temp = this.$options.data().temp
this.dialogVisible = false
this.$refs['dataForm'].resetFields()
}
},
}
</script>
<style scoped>
</style>

View File

@@ -1,473 +0,0 @@
<template>
<div class="app-container">
<div class="filter-container">
<el-input
v-model="listQuery.keyword"
size="small"
placeholder="请输入关键词"
clearable
class="filter-item"
style="width: 200px;margin-left: 10px;"
/>
<el-button-group style="margin-left: 10px;">
<el-button
size="small"
class="filter-item"
type="primary"
icon="el-icon-search"
@click="search"
>
搜索
</el-button>
<el-button
size="small"
class="filter-item"
type="primary"
icon="el-icon-refresh"
@click="refresh"
>
重置
</el-button>
</el-button-group>
</div>
<el-table
v-loading="listLoading"
:data="list"
element-loading-text="Loading"
fit
height="100%"
class="table-container"
highlight-current-row
stripe
@row-click="handleRowClick"
row-key="sellId"
ref="multipleTableRef"
:expand-row-keys="expandedKeys"
>
<el-table-column type="expand">
<template slot-scope="scope">
<el-row :gutter="20">
<el-col :span="13">
<el-table :data="scope.row.sellDetailList" stripe >
<template v-if="scope.row.sellType == 1">
<el-table-column>
<template slot="header">
<div class="info-text" style="text-align: center;">销售详情</div>
</template>
<el-table-column prop="productName" label="商品名称" align="center">
<template slot-scope="scope">
<div style="text-align: center;">{{ scope.row.productName }}</div>
</template>
</el-table-column>
<el-table-column prop="count" label="数量" align="center">
<template slot-scope="scope">
<div style="text-align: center;">{{ scope.row.count }}</div>
</template>
</el-table-column>
<el-table-column prop="discount" label="折扣" align="center">
<template slot-scope="scope">
<div style="text-align: center;">{{ scope.row.discount?scope.row.discount:'-' }}</div>
</template>
</el-table-column>
<el-table-column prop="amount" label="金额" align="center">
<template slot-scope="scope">
<div style="text-align: center;">{{ scope.row.amount }}</div>
</template>
</el-table-column>
<el-table-column prop="realAmount" label="实际金额" align="center">
<template slot-scope="scope">
<div style="text-align: center;">{{ scope.row.realAmount }}</div>
</template>
</el-table-column>
<el-table-column prop="serverList" width="380" label="服务人员信息" align="center">
<template slot-scope="scope">
<span v-show="scope.row.detailServerList.length == 0">-</span>
<el-descriptions :column="3" class="server">
<template v-for="item in scope.row.detailServerList">
<el-descriptions-item label="服务人员">{{item.serverName}}</el-descriptions-item>
<el-descriptions-item label="业绩">{{item.serverGrade}}</el-descriptions-item>
<el-descriptions-item label="提成">{{item.serverPushMoney}}</el-descriptions-item>
</template>
</el-descriptions>
</template>
</el-table-column>
</el-table-column>
</template>
<template v-if="scope.row.sellType == 2 || scope.row.sellType == 3">
<el-table-column>
<template slot="header">
<div class="info-text" style="text-align: center;">充卡详情</div>
</template>
<el-table-column prop="productName" label="卡名" align="center">
<template slot-scope="scope">
<div style="text-align: center;">{{ scope.row.cardName }}</div>
</template>
</el-table-column>
<el-table-column prop="amount" label="金额" align="center">
<template slot-scope="scope">
<div style="text-align: center;">{{ scope.row.amount }}</div>
</template>
</el-table-column>
<el-table-column prop="realAmount" label="赠送金额" align="center">
<template slot-scope="scope">
<div style="text-align: center;">{{ scope.row.giveAmount }}</div>
</template>
</el-table-column>
<el-table-column prop="serverList" width="380" label="服务人员信息" align="center">
<template slot-scope="scope">
<span v-show="scope.row.detailServerList.length == 0">-</span>
<el-descriptions :column="3" class="server">
<template v-for="item in scope.row.detailServerList">
<el-descriptions-item label="服务人员">{{item.serverName}}</el-descriptions-item>
<el-descriptions-item label="业绩">{{item.serverGrade}}</el-descriptions-item>
<el-descriptions-item label="提成">{{item.serverPushMoney}}</el-descriptions-item>
</template>
</el-descriptions>
</template>
</el-table-column>
</el-table-column>
</template>
</el-table>
</el-col>
<el-col :span="6">
<el-table :data="scope.row.sellPayList">
<el-table-column>
<template slot="header">
<div class="info-text" style="text-align: center;">支付方式</div>
</template>
<el-table-column prop="payName" label="支付名称" align="center">
<template slot-scope="scope">
<div style="text-align: center;">{{ scope.row.payName }}</div>
</template>
</el-table-column>
<el-table-column prop="amount" label="支付金额" align="center">
<template slot-scope="scope">
<div style="text-align: center;">{{ scope.row.amount }}</div>
</template>
</el-table-column>
</el-table-column>
</el-table>
</el-col>
</el-row>
</template>
</el-table-column>
<el-table-column
label="订单号"
width="160"
align="center"
>
<template slot-scope="scope">
{{ scope.row.sellNo }}
</template>
</el-table-column>
<el-table-column
label="类型"
align="center"
>
<template slot-scope="scope">
<span v-if="scope.row.sellType == 1">
商品
</span>
<span v-if="scope.row.sellType == 2">
开卡
</span>
<span v-if="scope.row.sellType == 3">
续卡
</span>
</template>
</el-table-column>
<el-table-column
label="会员信息"
width="200"
align="center"
>
<template slot-scope="scope">
<div class="info-text">
<span>{{ scope.row.memberName?scope.row.memberName:'散客' }}</span><br/>
<span v-if="app.isNotEmpty(scope.row.memberCardId)"> {{ scope.row.memberCardName }} ({{scope.row.memberCardNo}})</span>
</div>
</template>
</el-table-column>
<el-table-column
label="消费金额"
align="center"
>
<template slot-scope="scope">
<span class="price-text"> {{ scope.row.sellAmount }}</span>
</template>
</el-table-column>
<el-table-column
label="实际入账"
align="center"
>
<template slot-scope="scope">
<span class="price-text">{{ scope.row.realAmount }}</span>
</template>
</el-table-column>
<el-table-column
label="门店名"
align="center"
>
<template slot-scope="scope">
{{ scope.row.shopName }}
</template>
</el-table-column>
<el-table-column
label="创建人"
align="center"
>
<template slot-scope="scope">
{{ scope.row.createName }}
</template>
</el-table-column>
<el-table-column
label="创建时间"
width="160"
align="center"
>
<template slot-scope="scope">
{{ scope.row.createTime }}
</template>
</el-table-column>
<el-table-column
label="修改时间"
width="160"
align="center"
>
<template slot-scope="scope">
{{ scope.row.updateTime }}
</template>
</el-table-column>
<el-table-column
label="修改人"
align="center"
>
<template slot-scope="scope">
{{ scope.row.updateName }}
</template>
</el-table-column>
<el-table-column
label="状态"
align="center"
>
<template slot-scope="scope">
<span v-show="scope.row.sellStatus==0" class="info-text">正常</span>
<span v-show="scope.row.sellStatus==1" class="price-text">销单</span>
</template>
</el-table-column>
<el-table-column
label="消费前金额"
align="center"
>
<template slot-scope="scope">
{{ scope.row.memberCardBeforeAmount }}
</template>
</el-table-column>
<el-table-column
label="消费前赠送金额"
align="center"
>
<template slot-scope="scope">
{{ scope.row.memberCardBeforeGiveAmount }}
</template>
</el-table-column>
<el-table-column
label="消费后金额"
align="center"
>
<template slot-scope="scope">
{{ scope.row.memberCardAfterAmount }}
</template>
</el-table-column>
<el-table-column
label="消费后赠送金额"
align="center"
>
<template slot-scope="scope">
{{ scope.row.memberCardAfterGiveAmount }}
</template>
</el-table-column>
<el-table-column
fixed="right"
label="操作"
width="160"
align="center"
>
<template slot-scope="scope">
<el-button-group>
<el-button
type="danger"
size="mini"
@click="del(scope)"
>
销单
</el-button>
</el-button-group>
</template>
</el-table-column>
</el-table>
<pagination
:total="total"
:page.sync="listQuery.page"
:limit.sync="listQuery.limit"
@pagination="fetchData"
/>
<add-form ref="addForm" @ok="addOk" />
<edit-form ref="editForm" @ok="editOk" />
</div>
</template>
<script>
import {getSellPage,deleteSell,cancelSell} from "@/api/business/sell/sell";
import {deepClone,success} from "@/utils";
import confirm from "@/utils/confirm";
import prompt from "@/utils/prompt";
import Pagination from '@/components/Pagination'
import addForm from "@/views/business/sell/addSell";
import editForm from "@/views/business/sell/editSell";
export default {
name: 'sell',
components: {addForm,editForm,Pagination},
data() {
return {
total: 0,
list: [],
listLoading: true,
listQuery: {
page: 1,
limit: 50,
keyword: ''
},
temp: {},
expandedKeys: []
}
},
created() {
this.fetchData()
},
methods: {
handleRowClick(row, event, column) {
console.log(this.expandedKeys)
if (this.expandedKeys.length > 0 && this.expandedKeys[0] == row.sellId) {
console.log('我被关闭了')
// 关闭之前展开的项
this.expandedKeys = []
// this.$refs.multipleTableRef.toggleRowExpansion(row, false);
}else{
this.expandedKeys = [row.sellId];
this.$refs.multipleTableRef.toggleRowExpansion(row);
}
},
search() {
this.fetchData()
},
refresh() {
this.listQuery = this.$options.data().listQuery
this.fetchData()
},
fetchData() {
this.listLoading = true
getSellPage(this.listQuery).then(response => {
const { records, total } = response.data
this.list = records
this.total = total
this.listLoading = false
})
},
add(){
this.$refs.addForm.open()
},
addOk(){
this.fetchData()
},
edit(scope) {
const temp = deepClone(scope.row)
this.$refs.editForm.open(temp)
},
editOk(){
this.fetchData()
},
del(scope) {
confirm("确定要销单吗?销单后余额和库存会发生改变!").then(res=>{
if(res){
prompt("请输入销单原因").then(res =>{
if(res){
cancelSell({
sellId:scope.row.sellId,
remark:res
}).then(res => {
console.log("销单成功")
this.fetchData()
})
}
})
}
})
},
}
}
</script>
<style scoped>
.demo-table-expand {
font-size: 0;
}
.demo-table-expand label {
width: 90px;
color: #99a9bf;
}
.demo-table-expand .el-form-item {
margin-right: 0;
margin-bottom: 0;
}
.el-form-item__label {
text-align: center;
}
/deep/ .el-descriptions__body{
background: transparent;
}
/deep/ .el-table tr{
background: transparent;
}
</style>

View File

@@ -1,191 +0,0 @@
<template>
<div>
<el-dialog
:close-on-click-modal="false"
top="8vh"
width="40%"
:visible.sync="dialogVisible"
center
@close="handleCancel"
>
<div class="el-dialog-div">
<el-form
:rules="rules"
ref="dataForm"
:model="temp"
label-position="right"
label-width="120px"
style="height: 90%;"
>
<el-form-item label="销售细单id" prop="sellDetailId" class="is-required">
<el-input v-model="temp.sellDetailId" placeholder="销售细单id" />
</el-form-item>
<el-form-item label="会员id" prop="memberId" class="is-required">
<el-input v-model="temp.memberId" placeholder="会员id" />
</el-form-item>
<el-form-item label="订单id" prop="sellId" class="is-required">
<el-input v-model="temp.sellId" placeholder="订单id" />
</el-form-item>
<el-form-item label="1开卡 2续卡 3项目 4商品" prop="sellType" class="is-required">
<el-input v-model="temp.sellType" placeholder="1开卡 2续卡 3项目 4商品" />
</el-form-item>
<el-form-item label="会员卡id" prop="memberCardId" class="is-required">
<el-input v-model="temp.memberCardId" placeholder="会员卡id" />
</el-form-item>
<el-form-item label="商品ID" prop="productId" class="is-required">
<el-input v-model="temp.productId" placeholder="商品ID" />
</el-form-item>
<el-form-item label="商品名" prop="productName" class="is-required">
<el-input v-model="temp.productName" placeholder="商品名" />
</el-form-item>
<el-form-item label="商品数量" prop="count" class="is-required">
<el-input v-model="temp.count" placeholder="商品数量" />
</el-form-item>
<el-form-item label="折扣" prop="discount" class="is-required">
<el-input v-model="temp.discount" placeholder="折扣" />
</el-form-item>
<el-form-item label="金额" prop="amount" class="is-required">
<el-input v-model="temp.amount" placeholder="金额" />
</el-form-item>
<el-form-item label="实际金额" prop="realAmount" class="is-required">
<el-input v-model="temp.realAmount" placeholder="实际金额" />
</el-form-item>
<el-form-item label="卡项ID" prop="cardId" class="is-required">
<el-input v-model="temp.cardId" placeholder="卡项ID" />
</el-form-item>
<el-form-item label="卡名" prop="cardName" class="is-required">
<el-input v-model="temp.cardName" placeholder="卡名" />
</el-form-item>
<el-form-item label="赠送金额" prop="giveAmount" class="is-required">
<el-input v-model="temp.giveAmount" placeholder="赠送金额" />
</el-form-item>
<el-form-item label="门店id" prop="shopId" class="is-required">
<el-input v-model="temp.shopId" placeholder="门店id" />
</el-form-item>
<el-form-item label="门店名" prop="shopName" class="is-required">
<el-input v-model="temp.shopName" placeholder="门店名" />
</el-form-item>
<el-form-item label="创建人" prop="createName" class="is-required">
<el-input v-model="temp.createName" placeholder="创建人" />
</el-form-item>
<el-form-item label="创建时间" prop="createTime" class="is-required">
<el-input v-model="temp.createTime" placeholder="创建时间" />
</el-form-item>
<el-form-item label="创建人id" prop="createId" class="is-required">
<el-input v-model="temp.createId" placeholder="创建人id" />
</el-form-item>
<el-form-item label="修改时间" prop="updateTime" class="is-required">
<el-input v-model="temp.updateTime" placeholder="修改时间" />
</el-form-item>
<el-form-item label="修改人" prop="updateName" class="is-required">
<el-input v-model="temp.updateName" placeholder="修改人" />
</el-form-item>
<el-form-item label="修改人id" prop="updateId" class="is-required">
<el-input v-model="temp.updateId" placeholder="修改人id" />
</el-form-item>
<el-form-item label="0正常 1取消" prop="sellStatus" class="is-required">
<el-input v-model="temp.sellStatus" placeholder="0正常 1取消" />
</el-form-item>
</el-form>
</div>
<div slot="footer" class="dialog-footer">
<el-button @click="handleCancel"> </el-button>
<el-button type="primary" @click="submit"> </el-button>
</div>
</el-dialog>
</div>
</template>
<script>
import {addSellDetail} from "@/api/business/sellDetail/sellDetail";
import {setRequiredFields} from "@/utils";
const requiredFields = []
export default {
name: "addForm",
data() {
return {
rules: setRequiredFields(requiredFields),
dialogVisible: false,
temp: {
sellDetailId:'',
memberId:'',
sellId:'',
sellType:'',
memberCardId:'',
productId:'',
productName:'',
count:'',
discount:'',
amount:'',
realAmount:'',
cardId:'',
cardName:'',
giveAmount:'',
shopId:'',
shopName:'',
createName:'',
createTime:'',
createId:'',
updateTime:'',
updateName:'',
updateId:'',
sellStatus:'',
},
}
},
methods: {
open() {
this.dialogVisible = true
},
submit() {
this.$refs['dataForm'].validate((valid) => {
if (valid) {
addSellDetail(this.temp).then(response =>{
this.handleCancel()
this.$emit('ok', response.data)
})
} else {
console.log('error submit!!');
return false;
}
});
},
handleCancel() {
//初始化
this.temp = this.$options.data().temp
this.dialogVisible = false
this.$refs['dataForm'].resetFields();
}
},
}
</script>
<style scoped>
</style>

View File

@@ -1,192 +0,0 @@
<template>
<div>
<el-dialog
:close-on-click-modal="false"
top="8vh"
width="40%"
:visible.sync="dialogVisible"
center
@close="handleCancel"
>
<div class="el-dialog-div">
<el-form
:rules="rules"
ref="dataForm"
:model="temp"
label-position="right"
label-width="120px"
style="height: 90%;"
>
<el-form-item label="销售细单id" prop="sellDetailId" class="is-required">
<el-input v-model="temp.sellDetailId" placeholder="销售细单id" />
</el-form-item>
<el-form-item label="会员id" prop="memberId" class="is-required">
<el-input v-model="temp.memberId" placeholder="会员id" />
</el-form-item>
<el-form-item label="订单id" prop="sellId" class="is-required">
<el-input v-model="temp.sellId" placeholder="订单id" />
</el-form-item>
<el-form-item label="1开卡 2续卡 3项目 4商品" prop="sellType" class="is-required">
<el-input v-model="temp.sellType" placeholder="1开卡 2续卡 3项目 4商品" />
</el-form-item>
<el-form-item label="会员卡id" prop="memberCardId" class="is-required">
<el-input v-model="temp.memberCardId" placeholder="会员卡id" />
</el-form-item>
<el-form-item label="商品ID" prop="productId" class="is-required">
<el-input v-model="temp.productId" placeholder="商品ID" />
</el-form-item>
<el-form-item label="商品名" prop="productName" class="is-required">
<el-input v-model="temp.productName" placeholder="商品名" />
</el-form-item>
<el-form-item label="商品数量" prop="count" class="is-required">
<el-input v-model="temp.count" placeholder="商品数量" />
</el-form-item>
<el-form-item label="折扣" prop="discount" class="is-required">
<el-input v-model="temp.discount" placeholder="折扣" />
</el-form-item>
<el-form-item label="金额" prop="amount" class="is-required">
<el-input v-model="temp.amount" placeholder="金额" />
</el-form-item>
<el-form-item label="实际金额" prop="realAmount" class="is-required">
<el-input v-model="temp.realAmount" placeholder="实际金额" />
</el-form-item>
<el-form-item label="卡项ID" prop="cardId" class="is-required">
<el-input v-model="temp.cardId" placeholder="卡项ID" />
</el-form-item>
<el-form-item label="卡名" prop="cardName" class="is-required">
<el-input v-model="temp.cardName" placeholder="卡名" />
</el-form-item>
<el-form-item label="赠送金额" prop="giveAmount" class="is-required">
<el-input v-model="temp.giveAmount" placeholder="赠送金额" />
</el-form-item>
<el-form-item label="门店id" prop="shopId" class="is-required">
<el-input v-model="temp.shopId" placeholder="门店id" />
</el-form-item>
<el-form-item label="门店名" prop="shopName" class="is-required">
<el-input v-model="temp.shopName" placeholder="门店名" />
</el-form-item>
<el-form-item label="创建人" prop="createName" class="is-required">
<el-input v-model="temp.createName" placeholder="创建人" />
</el-form-item>
<el-form-item label="创建时间" prop="createTime" class="is-required">
<el-input v-model="temp.createTime" placeholder="创建时间" />
</el-form-item>
<el-form-item label="创建人id" prop="createId" class="is-required">
<el-input v-model="temp.createId" placeholder="创建人id" />
</el-form-item>
<el-form-item label="修改时间" prop="updateTime" class="is-required">
<el-input v-model="temp.updateTime" placeholder="修改时间" />
</el-form-item>
<el-form-item label="修改人" prop="updateName" class="is-required">
<el-input v-model="temp.updateName" placeholder="修改人" />
</el-form-item>
<el-form-item label="修改人id" prop="updateId" class="is-required">
<el-input v-model="temp.updateId" placeholder="修改人id" />
</el-form-item>
<el-form-item label="0正常 1取消" prop="sellStatus" class="is-required">
<el-input v-model="temp.sellStatus" placeholder="0正常 1取消" />
</el-form-item>
</el-form>
</div>
<div slot="footer" class="dialog-footer">
<el-button @click="handleCancel"> </el-button>
<el-button type="primary" @click="submit"> </el-button>
</div>
</el-dialog>
</div>
</template>
<script>
import { editSellDetail } from "@/api/business/sellDetail/sellDetail";
import {setRequiredFields} from "@/utils";
const requiredFields = []
export default {
name: "editForm",
data() {
return {
rules: setRequiredFields(requiredFields),
dialogVisible: false,
temp: {
sellDetailId:'',
memberId:'',
sellId:'',
sellType:'',
memberCardId:'',
productId:'',
productName:'',
count:'',
discount:'',
amount:'',
realAmount:'',
cardId:'',
cardName:'',
giveAmount:'',
shopId:'',
shopName:'',
createName:'',
createTime:'',
createId:'',
updateTime:'',
updateName:'',
updateId:'',
sellStatus:'',
},
}
},
methods: {
open(row) {
this.temp = this.$options.data().temp
this.temp = row
this.dialogVisible = true
},
submit() {
this.$refs['dataForm'].validate((valid) => {
if (valid) {
editSellDetail(this.temp).then(response => {
this.handleCancel()
this.$emit('ok', response.data)
})
} else {
console.log('error submit!!');
return false;
}
});
},
handleCancel() {
//初始化
this.temp = this.$options.data().temp
this.dialogVisible = false
this.$refs['dataForm'].resetFields()
}
},
}
</script>
<style scoped>
</style>

View File

@@ -1,413 +0,0 @@
<template>
<div class="app-container">
<div class="filter-container">
<el-input
v-model="listQuery.keyword"
size="small"
placeholder="请输入关键词"
clearable
class="filter-item"
style="width: 200px;margin-left: 10px;"
/>
<el-button-group style="margin-left: 10px;">
<el-button
size="small"
class="filter-item"
type="primary"
icon="el-icon-search"
@click="search"
>
搜索
</el-button>
<el-button
size="small"
class="filter-item"
type="primary"
icon="el-icon-refresh"
@click="refresh"
>
重置
</el-button>
</el-button-group>
<el-button
size="small"
class="filter-item"
type="primary"
icon="el-icon-plus"
style="margin-left: 10px;"
@click="add"
>
新增
</el-button>
</div>
<el-table
v-loading="listLoading"
:data="list"
element-loading-text="Loading"
border
fit
height="100%"
class="table-container"
highlight-current-row
>
<el-table-column
label="序号"
width="150"
align="center"
>
<template slot-scope="scope">
{{ scope.$index+1 }}
</template>
</el-table-column>
<el-table-column
label="销售细单id"
width="160"
align="center"
>
<template slot-scope="scope">
{{ scope.row.sellDetailId }}
</template>
</el-table-column>
<el-table-column
label="会员id"
width="160"
align="center"
>
<template slot-scope="scope">
{{ scope.row.memberId }}
</template>
</el-table-column>
<el-table-column
label="订单id"
width="160"
align="center"
>
<template slot-scope="scope">
{{ scope.row.sellId }}
</template>
</el-table-column>
<el-table-column
label="1开卡 2续卡 3项目 4商品"
width="160"
align="center"
>
<template slot-scope="scope">
{{ scope.row.sellType }}
</template>
</el-table-column>
<el-table-column
label="会员卡id"
width="160"
align="center"
>
<template slot-scope="scope">
{{ scope.row.memberCardId }}
</template>
</el-table-column>
<el-table-column
label="商品ID"
width="160"
align="center"
>
<template slot-scope="scope">
{{ scope.row.productId }}
</template>
</el-table-column>
<el-table-column
label="商品名"
width="160"
align="center"
>
<template slot-scope="scope">
{{ scope.row.productName }}
</template>
</el-table-column>
<el-table-column
label="商品数量"
width="160"
align="center"
>
<template slot-scope="scope">
{{ scope.row.count }}
</template>
</el-table-column>
<el-table-column
label="折扣"
width="160"
align="center"
>
<template slot-scope="scope">
{{ scope.row.discount }}
</template>
</el-table-column>
<el-table-column
label="金额"
width="160"
align="center"
>
<template slot-scope="scope">
{{ scope.row.amount }}
</template>
</el-table-column>
<el-table-column
label="实际金额"
width="160"
align="center"
>
<template slot-scope="scope">
{{ scope.row.realAmount }}
</template>
</el-table-column>
<el-table-column
label="卡项ID"
width="160"
align="center"
>
<template slot-scope="scope">
{{ scope.row.cardId }}
</template>
</el-table-column>
<el-table-column
label="卡名"
width="160"
align="center"
>
<template slot-scope="scope">
{{ scope.row.cardName }}
</template>
</el-table-column>
<el-table-column
label="赠送金额"
width="160"
align="center"
>
<template slot-scope="scope">
{{ scope.row.giveAmount }}
</template>
</el-table-column>
<el-table-column
label="门店id"
width="160"
align="center"
>
<template slot-scope="scope">
{{ scope.row.shopId }}
</template>
</el-table-column>
<el-table-column
label="门店名"
width="160"
align="center"
>
<template slot-scope="scope">
{{ scope.row.shopName }}
</template>
</el-table-column>
<el-table-column
label="创建人"
width="160"
align="center"
>
<template slot-scope="scope">
{{ scope.row.createName }}
</template>
</el-table-column>
<el-table-column
label="创建时间"
width="160"
align="center"
>
<template slot-scope="scope">
{{ scope.row.createTime }}
</template>
</el-table-column>
<el-table-column
label="创建人id"
width="160"
align="center"
>
<template slot-scope="scope">
{{ scope.row.createId }}
</template>
</el-table-column>
<el-table-column
label="修改时间"
width="160"
align="center"
>
<template slot-scope="scope">
{{ scope.row.updateTime }}
</template>
</el-table-column>
<el-table-column
label="修改人"
width="160"
align="center"
>
<template slot-scope="scope">
{{ scope.row.updateName }}
</template>
</el-table-column>
<el-table-column
label="修改人id"
width="160"
align="center"
>
<template slot-scope="scope">
{{ scope.row.updateId }}
</template>
</el-table-column>
<el-table-column
label="0正常 1取消"
width="160"
align="center"
>
<template slot-scope="scope">
{{ scope.row.sellStatus }}
</template>
</el-table-column>
<el-table-column
fixed="right"
label="操作"
width="200"
align="center"
>
<template slot-scope="scope">
<el-button-group>
<el-button
type="primary"
icon="el-icon-edit"
size="mini"
@click="edit(scope)"
>
修改
</el-button>
<el-button
type="danger"
icon="el-icon-delete"
size="mini"
@click="del(scope)"
>
删除
</el-button>
</el-button-group>
</template>
</el-table-column>
</el-table>
<pagination
:total="total"
:page.sync="listQuery.page"
:limit.sync="listQuery.limit"
@pagination="fetchData"
/>
<add-form ref="addForm" @ok="addOk" />
<edit-form ref="editForm" @ok="editOk" />
</div>
</template>
<script>
import {getSellDetailPage,deleteSellDetail} from "@/api/business/sellDetail/sellDetail";
import {deepClone,success} from "@/utils";
import confirm from "@/utils/confirm";
import Pagination from '@/components/Pagination'
import addForm from "@/views/business/sellDetail/addSellDetail";
import editForm from "@/views/business/sellDetail/editSellDetail";
export default {
name: 'sellDetail',
components: {addForm,editForm,Pagination},
data() {
return {
total: 0,
list: [],
listLoading: true,
listQuery: {
page: 1,
limit: 50,
keyword: ''
},
temp: {},
}
},
created() {
this.fetchData()
},
methods: {
search() {
this.fetchData()
},
refresh() {
this.listQuery = this.$options.data().listQuery
this.fetchData()
},
fetchData() {
this.listLoading = true
getSellDetailPage(this.listQuery).then(response => {
const { records, total } = response.data
this.list = records
this.total = total
this.listLoading = false
})
},
add(){
this.$refs.addForm.open()
},
addOk(){
this.fetchData()
},
edit(scope) {
const temp = deepClone(scope.row)
this.$refs.editForm.open(temp)
},
editOk(){
this.fetchData()
},
del(scope) {
confirm("确定要删除吗?").then(res=>{
if(res){
deleteSellDetail(scope.row.sellDetailId).then(response => {
console.log(response)
success('删除成功')
this.fetchData()
})
}
})
},
}
}
</script>
<style scoped>
</style>

View File

@@ -1,91 +0,0 @@
<template>
<div>
<el-dialog
:close-on-click-modal="false"
top="8vh"
width="40%"
:visible.sync="dialogVisible"
center
@close="handleCancel"
>
<div class="el-dialog-div">
<el-form
:rules="rules"
ref="dataForm"
:model="temp"
label-position="right"
label-width="120px"
style="height: 90%;"
>
<el-form-item label="" prop="jsonId" class="is-required">
<el-input v-model="temp.jsonId" placeholder="" />
</el-form-item>
<el-form-item label="订单id" prop="sellId" class="is-required">
<el-input v-model="temp.sellId" placeholder="订单id" />
</el-form-item>
<el-form-item label="获得下订单时的JSON" prop="sellJson" class="is-required">
<el-input v-model="temp.sellJson" placeholder="获得下订单时的JSON" />
</el-form-item>
</el-form>
</div>
<div slot="footer" class="dialog-footer">
<el-button @click="handleCancel"> </el-button>
<el-button type="primary" @click="submit"> </el-button>
</div>
</el-dialog>
</div>
</template>
<script>
import {addSelljson} from "@/api/business/sellJson/sellJson";
import {setRequiredFields} from "@/utils";
const requiredFields = []
export default {
name: "addForm",
data() {
return {
rules: setRequiredFields(requiredFields),
dialogVisible: false,
temp: {
jsonId:'',
sellId:'',
sellJson:'',
},
}
},
methods: {
open() {
this.dialogVisible = true
},
submit() {
this.$refs['dataForm'].validate((valid) => {
if (valid) {
addSelljson(this.temp).then(response =>{
this.handleCancel()
this.$emit('ok', response.data)
})
} else {
console.log('error submit!!');
return false;
}
});
},
handleCancel() {
//初始化
this.temp = this.$options.data().temp
this.dialogVisible = false
this.$refs['dataForm'].resetFields();
}
},
}
</script>
<style scoped>
</style>

View File

@@ -1,92 +0,0 @@
<template>
<div>
<el-dialog
:close-on-click-modal="false"
top="8vh"
width="40%"
:visible.sync="dialogVisible"
center
@close="handleCancel"
>
<div class="el-dialog-div">
<el-form
:rules="rules"
ref="dataForm"
:model="temp"
label-position="right"
label-width="120px"
style="height: 90%;"
>
<el-form-item label="" prop="jsonId" class="is-required">
<el-input v-model="temp.jsonId" placeholder="" />
</el-form-item>
<el-form-item label="订单id" prop="sellId" class="is-required">
<el-input v-model="temp.sellId" placeholder="订单id" />
</el-form-item>
<el-form-item label="获得下订单时的JSON" prop="sellJson" class="is-required">
<el-input v-model="temp.sellJson" placeholder="获得下订单时的JSON" />
</el-form-item>
</el-form>
</div>
<div slot="footer" class="dialog-footer">
<el-button @click="handleCancel"> </el-button>
<el-button type="primary" @click="submit"> </el-button>
</div>
</el-dialog>
</div>
</template>
<script>
import { editSelljson } from "@/api/business/sellJson/sellJson";
import {setRequiredFields} from "@/utils";
const requiredFields = []
export default {
name: "editForm",
data() {
return {
rules: setRequiredFields(requiredFields),
dialogVisible: false,
temp: {
jsonId:'',
sellId:'',
sellJson:'',
},
}
},
methods: {
open(row) {
this.temp = this.$options.data().temp
this.temp = row
this.dialogVisible = true
},
submit() {
this.$refs['dataForm'].validate((valid) => {
if (valid) {
editSelljson(this.temp).then(response => {
this.handleCancel()
this.$emit('ok', response.data)
})
} else {
console.log('error submit!!');
return false;
}
});
},
handleCancel() {
//初始化
this.temp = this.$options.data().temp
this.dialogVisible = false
this.$refs['dataForm'].resetFields()
}
},
}
</script>
<style scoped>
</style>

View File

@@ -1,213 +0,0 @@
<template>
<div class="app-container">
<div class="filter-container">
<el-input
v-model="listQuery.keyword"
size="small"
placeholder="请输入关键词"
clearable
class="filter-item"
style="width: 200px;margin-left: 10px;"
/>
<el-button-group style="margin-left: 10px;">
<el-button
size="small"
class="filter-item"
type="primary"
icon="el-icon-search"
@click="search"
>
搜索
</el-button>
<el-button
size="small"
class="filter-item"
type="primary"
icon="el-icon-refresh"
@click="refresh"
>
重置
</el-button>
</el-button-group>
<el-button
size="small"
class="filter-item"
type="primary"
icon="el-icon-plus"
style="margin-left: 10px;"
@click="add"
>
新增
</el-button>
</div>
<el-table
v-loading="listLoading"
:data="list"
element-loading-text="Loading"
border
fit
height="100%"
class="table-container"
highlight-current-row
>
<el-table-column
label="序号"
width="150"
align="center"
>
<template slot-scope="scope">
{{ scope.$index+1 }}
</template>
</el-table-column>
<el-table-column
label=""
width="160"
align="center"
>
<template slot-scope="scope">
{{ scope.row.jsonId }}
</template>
</el-table-column>
<el-table-column
label="订单id"
width="160"
align="center"
>
<template slot-scope="scope">
{{ scope.row.sellId }}
</template>
</el-table-column>
<el-table-column
label="获得下订单时的JSON"
width="160"
align="center"
>
<template slot-scope="scope">
{{ scope.row.sellJson }}
</template>
</el-table-column>
<el-table-column
fixed="right"
label="操作"
width="200"
align="center"
>
<template slot-scope="scope">
<el-button-group>
<el-button
type="primary"
icon="el-icon-edit"
size="mini"
@click="edit(scope)"
>
修改
</el-button>
<el-button
type="danger"
icon="el-icon-delete"
size="mini"
@click="del(scope)"
>
删除
</el-button>
</el-button-group>
</template>
</el-table-column>
</el-table>
<pagination
:total="total"
:page.sync="listQuery.page"
:limit.sync="listQuery.limit"
@pagination="fetchData"
/>
<add-form ref="addForm" @ok="addOk" />
<edit-form ref="editForm" @ok="editOk" />
</div>
</template>
<script>
import {getSelljsonPage,deleteSelljson} from "@/api/business/sellJson/sellJson";
import {deepClone,success} from "@/utils";
import confirm from "@/utils/confirm";
import Pagination from '@/components/Pagination'
import addForm from "@/views/business/sellJson/addSelljson";
import editForm from "@/views/business/sellJson/editSelljson";
export default {
name: 'sellJson',
components: {addForm,editForm,Pagination},
data() {
return {
total: 0,
list: [],
listLoading: true,
listQuery: {
page: 1,
limit: 50,
keyword: ''
},
temp: {},
}
},
created() {
this.fetchData()
},
methods: {
search() {
this.fetchData()
},
refresh() {
this.listQuery = this.$options.data().listQuery
this.fetchData()
},
fetchData() {
this.listLoading = true
getSelljsonPage(this.listQuery).then(response => {
const { records, total } = response.data
this.list = records
this.total = total
this.listLoading = false
})
},
add(){
this.$refs.addForm.open()
},
addOk(){
this.fetchData()
},
edit(scope) {
const temp = deepClone(scope.row)
this.$refs.editForm.open(temp)
},
editOk(){
this.fetchData()
},
del(scope) {
confirm("确定要删除吗?").then(res=>{
if(res){
deleteSelljson(scope.row.sellJsonId).then(response => {
console.log(response)
success('删除成功')
this.fetchData()
})
}
})
},
}
}
</script>
<style scoped>
</style>

View File

@@ -1,101 +0,0 @@
<template>
<div>
<el-dialog
:close-on-click-modal="false"
top="8vh"
width="40%"
:visible.sync="dialogVisible"
center
@close="handleCancel"
>
<div class="el-dialog-div">
<el-form
:rules="rules"
ref="dataForm"
:model="temp"
label-position="right"
label-width="120px"
style="height: 90%;"
>
<el-form-item label="支付id" prop="sellPayId" class="is-required">
<el-input v-model="temp.sellPayId" placeholder="支付id" />
</el-form-item>
<el-form-item label="销售单id" prop="sellId" class="is-required">
<el-input v-model="temp.sellId" placeholder="销售单id" />
</el-form-item>
<el-form-item label="支付方式名称" prop="payName" class="is-required">
<el-input v-model="temp.payName" placeholder="支付方式名称" />
</el-form-item>
<el-form-item label="1.卡金 2.扫码 3.现金 888.优惠 " prop="payType" class="is-required">
<el-input v-model="temp.payType" placeholder="1.卡金 2.扫码 3.现金 888.优惠 " />
</el-form-item>
<el-form-item label="金额" prop="amount" class="is-required">
<el-input v-model="temp.amount" placeholder="金额" />
</el-form-item>
</el-form>
</div>
<div slot="footer" class="dialog-footer">
<el-button @click="handleCancel"> </el-button>
<el-button type="primary" @click="submit"> </el-button>
</div>
</el-dialog>
</div>
</template>
<script>
import {addSellpay} from "@/api/business/sellPay/sellPay";
import {setRequiredFields} from "@/utils";
const requiredFields = []
export default {
name: "addForm",
data() {
return {
rules: setRequiredFields(requiredFields),
dialogVisible: false,
temp: {
sellPayId:'',
sellId:'',
payName:'',
payType:'',
amount:'',
},
}
},
methods: {
open() {
this.dialogVisible = true
},
submit() {
this.$refs['dataForm'].validate((valid) => {
if (valid) {
addSellpay(this.temp).then(response =>{
this.handleCancel()
this.$emit('ok', response.data)
})
} else {
console.log('error submit!!');
return false;
}
});
},
handleCancel() {
//初始化
this.temp = this.$options.data().temp
this.dialogVisible = false
this.$refs['dataForm'].resetFields();
}
},
}
</script>
<style scoped>
</style>

View File

@@ -1,102 +0,0 @@
<template>
<div>
<el-dialog
:close-on-click-modal="false"
top="8vh"
width="40%"
:visible.sync="dialogVisible"
center
@close="handleCancel"
>
<div class="el-dialog-div">
<el-form
:rules="rules"
ref="dataForm"
:model="temp"
label-position="right"
label-width="120px"
style="height: 90%;"
>
<el-form-item label="支付id" prop="sellPayId" class="is-required">
<el-input v-model="temp.sellPayId" placeholder="支付id" />
</el-form-item>
<el-form-item label="销售单id" prop="sellId" class="is-required">
<el-input v-model="temp.sellId" placeholder="销售单id" />
</el-form-item>
<el-form-item label="支付方式名称" prop="payName" class="is-required">
<el-input v-model="temp.payName" placeholder="支付方式名称" />
</el-form-item>
<el-form-item label="1.卡金 2.扫码 3.现金 888.优惠 " prop="payType" class="is-required">
<el-input v-model="temp.payType" placeholder="1.卡金 2.扫码 3.现金 888.优惠 " />
</el-form-item>
<el-form-item label="金额" prop="amount" class="is-required">
<el-input v-model="temp.amount" placeholder="金额" />
</el-form-item>
</el-form>
</div>
<div slot="footer" class="dialog-footer">
<el-button @click="handleCancel"> </el-button>
<el-button type="primary" @click="submit"> </el-button>
</div>
</el-dialog>
</div>
</template>
<script>
import { editSellpay } from "@/api/business/sellPay/sellPay";
import {setRequiredFields} from "@/utils";
const requiredFields = []
export default {
name: "editForm",
data() {
return {
rules: setRequiredFields(requiredFields),
dialogVisible: false,
temp: {
sellPayId:'',
sellId:'',
payName:'',
payType:'',
amount:'',
},
}
},
methods: {
open(row) {
this.temp = this.$options.data().temp
this.temp = row
this.dialogVisible = true
},
submit() {
this.$refs['dataForm'].validate((valid) => {
if (valid) {
editSellpay(this.temp).then(response => {
this.handleCancel()
this.$emit('ok', response.data)
})
} else {
console.log('error submit!!');
return false;
}
});
},
handleCancel() {
//初始化
this.temp = this.$options.data().temp
this.dialogVisible = false
this.$refs['dataForm'].resetFields()
}
},
}
</script>
<style scoped>
</style>

View File

@@ -1,233 +0,0 @@
<template>
<div class="app-container">
<div class="filter-container">
<el-input
v-model="listQuery.keyword"
size="small"
placeholder="请输入关键词"
clearable
class="filter-item"
style="width: 200px;margin-left: 10px;"
/>
<el-button-group style="margin-left: 10px;">
<el-button
size="small"
class="filter-item"
type="primary"
icon="el-icon-search"
@click="search"
>
搜索
</el-button>
<el-button
size="small"
class="filter-item"
type="primary"
icon="el-icon-refresh"
@click="refresh"
>
重置
</el-button>
</el-button-group>
<el-button
size="small"
class="filter-item"
type="primary"
icon="el-icon-plus"
style="margin-left: 10px;"
@click="add"
>
新增
</el-button>
</div>
<el-table
v-loading="listLoading"
:data="list"
element-loading-text="Loading"
border
fit
height="100%"
class="table-container"
highlight-current-row
>
<el-table-column
label="序号"
width="150"
align="center"
>
<template slot-scope="scope">
{{ scope.$index+1 }}
</template>
</el-table-column>
<el-table-column
label="支付id"
width="160"
align="center"
>
<template slot-scope="scope">
{{ scope.row.sellPayId }}
</template>
</el-table-column>
<el-table-column
label="销售单id"
width="160"
align="center"
>
<template slot-scope="scope">
{{ scope.row.sellId }}
</template>
</el-table-column>
<el-table-column
label="支付方式名称"
width="160"
align="center"
>
<template slot-scope="scope">
{{ scope.row.payName }}
</template>
</el-table-column>
<el-table-column
label="1.卡金 2.扫码 3.现金 888.优惠 "
width="160"
align="center"
>
<template slot-scope="scope">
{{ scope.row.payType }}
</template>
</el-table-column>
<el-table-column
label="金额"
width="160"
align="center"
>
<template slot-scope="scope">
{{ scope.row.amount }}
</template>
</el-table-column>
<el-table-column
fixed="right"
label="操作"
width="200"
align="center"
>
<template slot-scope="scope">
<el-button-group>
<el-button
type="primary"
icon="el-icon-edit"
size="mini"
@click="edit(scope)"
>
修改
</el-button>
<el-button
type="danger"
icon="el-icon-delete"
size="mini"
@click="del(scope)"
>
删除
</el-button>
</el-button-group>
</template>
</el-table-column>
</el-table>
<pagination
:total="total"
:page.sync="listQuery.page"
:limit.sync="listQuery.limit"
@pagination="fetchData"
/>
<add-form ref="addForm" @ok="addOk" />
<edit-form ref="editForm" @ok="editOk" />
</div>
</template>
<script>
import {getSellpayPage,deleteSellpay} from "@/api/business/sellPay/sellPay";
import {deepClone,success} from "@/utils";
import confirm from "@/utils/confirm";
import Pagination from '@/components/Pagination'
import addForm from "@/views/business/sellPay/addSellpay";
import editForm from "@/views/business/sellPay/editSellpay";
export default {
name: 'sellPay',
components: {addForm,editForm,Pagination},
data() {
return {
total: 0,
list: [],
listLoading: true,
listQuery: {
page: 1,
limit: 50,
keyword: ''
},
temp: {},
}
},
created() {
this.fetchData()
},
methods: {
search() {
this.fetchData()
},
refresh() {
this.listQuery = this.$options.data().listQuery
this.fetchData()
},
fetchData() {
this.listLoading = true
getSellpayPage(this.listQuery).then(response => {
const { records, total } = response.data
this.list = records
this.total = total
this.listLoading = false
})
},
add(){
this.$refs.addForm.open()
},
addOk(){
this.fetchData()
},
edit(scope) {
const temp = deepClone(scope.row)
this.$refs.editForm.open(temp)
},
editOk(){
this.fetchData()
},
del(scope) {
confirm("确定要删除吗?").then(res=>{
if(res){
deleteSellpay(scope.row.sellPayId).then(response => {
console.log(response)
success('删除成功')
this.fetchData()
})
}
})
},
}
}
</script>
<style scoped>
</style>

View File

@@ -1,115 +0,0 @@
<template>
<div>
<el-dialog
:close-on-click-modal="false"
top="8vh"
width="40%"
:visible.sync="dialogVisible"
center
@close="handleCancel"
>
<div class="el-dialog-div">
<el-form
:rules="rules"
ref="dataForm"
:model="temp"
label-position="right"
label-width="120px"
style="height: 90%;"
>
<el-form-item label="工号" prop="serverNo" class="is-required">
<el-input v-model="temp.serverNo" placeholder="工号" />
</el-form-item>
<el-form-item label="服务人员名称" prop="serverName" class="is-required">
<el-input v-model="temp.serverName" placeholder="服务人员名称" />
</el-form-item>
<el-form-item label="服务人员手机号" prop="serverPhone" class="is-required">
<el-input v-model="temp.serverPhone" placeholder="服务人员手机号" />
</el-form-item>
<el-form-item label="入职时间" prop="joinTime" class="is-required">
<el-date-picker
v-model="temp.joinTime"
type="date"
placeholder="选择日期"
value-format="yyyy-MM-dd HH:mm:ss"
>
</el-date-picker>
</el-form-item>
<el-form-item label="小程序密码" prop="miniappPassword" class="is-required">
<el-input v-model="temp.miniappPassword" placeholder="小程序密码-" />
</el-form-item>
</el-form>
</div>
<div slot="footer" class="dialog-footer">
<el-button @click="handleCancel"> </el-button>
<el-button type="primary" @click="submit"> </el-button>
</div>
</el-dialog>
</div>
</template>
<script>
import {addServer} from "@/api/business/server/server";
import {setRequiredFields} from "@/utils";
const requiredFields = []
export default {
name: "addForm",
data() {
return {
rules: setRequiredFields(requiredFields),
dialogVisible: false,
temp: {
serverId:'',
serverNo:'',
serverName:'',
serverPhone:'',
joinTime:'',
miniappPassword:'',
deleted:'',
shopId:'',
shopName:'',
createName:'',
createTime:'',
createId:'',
updateTime:'',
updateName:'',
updateId:'',
},
}
},
methods: {
open() {
this.dialogVisible = true
},
submit() {
this.$refs['dataForm'].validate((valid) => {
if (valid) {
addServer(this.temp).then(response =>{
this.handleCancel()
this.$emit('ok', response.data)
})
} else {
console.log('error submit!!');
return false;
}
});
},
handleCancel() {
//初始化
this.temp = this.$options.data().temp
this.dialogVisible = false
this.$refs['dataForm'].resetFields();
}
},
}
</script>
<style scoped>
</style>

View File

@@ -1,117 +0,0 @@
<template>
<div>
<el-dialog
:close-on-click-modal="false"
top="8vh"
width="40%"
:visible.sync="dialogVisible"
center
@close="handleCancel"
>
<div class="el-dialog-div">
<el-form
:rules="rules"
ref="dataForm"
:model="temp"
label-position="right"
label-width="120px"
style="height: 90%;"
>
<el-form-item label="工号" prop="serverNo" class="is-required">
<el-input v-model="temp.serverNo" placeholder="工号" />
</el-form-item>
<el-form-item label="服务人员名称" prop="serverName" class="is-required">
<el-input v-model="temp.serverName" placeholder="服务人员名称" />
</el-form-item>
<el-form-item label="服务人员手机号" prop="serverPhone" class="is-required">
<el-input v-model="temp.serverPhone" placeholder="服务人员手机号" />
</el-form-item>
<el-form-item label="入职时间" prop="joinTime" class="is-required">
<el-input v-model="temp.joinTime" placeholder="入职时间" />
</el-form-item>
<el-form-item label="小程序密码-" prop="miniappPassword" class="is-required">
<el-input v-model="temp.miniappPassword" placeholder="小程序密码-" />
</el-form-item>
<el-form-item label="0正常 1删除" prop="deleted" class="is-required">
<el-input v-model="temp.deleted" placeholder="0正常 1删除" />
</el-form-item>
</el-form>
</div>
<div slot="footer" class="dialog-footer">
<el-button @click="handleCancel"> </el-button>
<el-button type="primary" @click="submit"> </el-button>
</div>
</el-dialog>
</div>
</template>
<script>
import { editServer } from "@/api/business/server/server";
import {setRequiredFields} from "@/utils";
const requiredFields = []
export default {
name: "editForm",
data() {
return {
rules: setRequiredFields(requiredFields),
dialogVisible: false,
temp: {
serverId:'',
serverNo:'',
serverName:'',
serverPhone:'',
joinTime:'',
miniappPassword:'',
deleted:'',
shopId:'',
shopName:'',
createName:'',
createTime:'',
createId:'',
updateTime:'',
updateName:'',
updateId:'',
},
}
},
methods: {
open(row) {
this.temp = this.$options.data().temp
this.temp = row
this.dialogVisible = true
},
submit() {
this.$refs['dataForm'].validate((valid) => {
if (valid) {
editServer(this.temp).then(response => {
this.handleCancel()
this.$emit('ok', response.data)
})
} else {
console.log('error submit!!');
return false;
}
});
},
handleCancel() {
//初始化
this.temp = this.$options.data().temp
this.dialogVisible = false
this.$refs['dataForm'].resetFields()
}
},
}
</script>
<style scoped>
</style>

View File

@@ -1,254 +0,0 @@
<template>
<div class="app-container">
<div class="filter-container">
<el-input
v-model="listQuery.keyword"
size="small"
placeholder="请输入关键词"
clearable
class="filter-item"
style="width: 200px;margin-left: 10px;"
/>
<el-button-group style="margin-left: 10px;">
<el-button
size="small"
class="filter-item"
type="primary"
icon="el-icon-search"
@click="search"
>
搜索
</el-button>
<el-button
size="small"
class="filter-item"
type="primary"
icon="el-icon-refresh"
@click="refresh"
>
重置
</el-button>
</el-button-group>
<el-button
size="small"
class="filter-item"
type="primary"
icon="el-icon-plus"
style="margin-left: 10px;"
@click="add"
>
新增
</el-button>
</div>
<el-table
v-loading="listLoading"
:data="list"
element-loading-text="Loading"
border
fit
height="100%"
class="table-container"
highlight-current-row
>
<el-table-column
label="序号"
width="150"
align="center"
>
<template slot-scope="scope">
{{ scope.$index+1 }}
</template>
</el-table-column>
<el-table-column
label="工号"
width="160"
align="center"
>
<template slot-scope="scope">
{{ scope.row.serverNo }}
</template>
</el-table-column>
<el-table-column
label="服务人员名称"
width="160"
align="center"
>
<template slot-scope="scope">
{{ scope.row.serverName }}
</template>
</el-table-column>
<el-table-column
label="服务人员手机号"
width="160"
align="center"
>
<template slot-scope="scope">
{{ scope.row.serverPhone }}
</template>
</el-table-column>
<el-table-column
label="入职时间"
width="160"
align="center"
>
<template slot-scope="scope">
{{ scope.row.joinTime }}
</template>
</el-table-column>
<el-table-column
label="门店名"
width="160"
align="center"
>
<template slot-scope="scope">
{{ scope.row.shopName }}
</template>
</el-table-column>
<el-table-column
label="创建人"
width="160"
align="center"
>
<template slot-scope="scope">
{{ scope.row.createName }}
</template>
</el-table-column>
<el-table-column
label="创建时间"
width="160"
align="center"
>
<template slot-scope="scope">
{{ scope.row.createTime }}
</template>
</el-table-column>
<el-table-column
fixed="right"
label="操作"
width="200"
align="center"
>
<template slot-scope="scope">
<el-button-group>
<el-button
type="primary"
icon="el-icon-edit"
size="mini"
@click="edit(scope)"
>
修改
</el-button>
<el-button
type="danger"
icon="el-icon-delete"
size="mini"
@click="del(scope)"
>
删除
</el-button>
</el-button-group>
</template>
</el-table-column>
</el-table>
<pagination
:total="total"
:page.sync="listQuery.page"
:limit.sync="listQuery.limit"
@pagination="fetchData"
/>
<add-form ref="addForm" @ok="addOk" />
<edit-form ref="editForm" @ok="editOk" />
</div>
</template>
<script>
import {getServerPage,deleteServer} from "@/api/business/server/server";
import {deepClone,success} from "@/utils";
import confirm from "@/utils/confirm";
import Pagination from '@/components/Pagination'
import addForm from "@/views/business/server/addServer";
import editForm from "@/views/business/server/editServer";
export default {
name: 'serverList',
components: {addForm,editForm,Pagination},
data() {
return {
total: 0,
list: [],
listLoading: true,
listQuery: {
page: 1,
limit: 50,
keyword: ''
},
temp: {},
}
},
created() {
this.fetchData()
},
methods: {
search() {
this.fetchData()
},
refresh() {
this.listQuery = this.$options.data().listQuery
this.fetchData()
},
fetchData() {
this.listLoading = true
getServerPage(this.listQuery).then(response => {
const { records, total } = response.data
this.list = records
this.total = total
this.listLoading = false
})
},
add(){
this.$refs.addForm.open()
},
addOk(){
this.fetchData()
},
edit(scope) {
const temp = deepClone(scope.row)
this.$refs.editForm.open(temp)
},
editOk(){
this.fetchData()
},
del(scope) {
confirm("确定要删除吗?").then(res=>{
if(res){
deleteServer(scope.row.serverId).then(response => {
console.log(response)
success('删除成功')
this.fetchData()
})
}
})
},
}
}
</script>
<style scoped>
</style>

View File

@@ -1,228 +0,0 @@
<template>
<div>
<el-dialog :close-on-click-modal="false"
top="8vh"
width="30%"
:visible.sync="dialogVisible"
center
@close="handleCancel"
>
<div class="el-dialog-div">
<el-alert
title="基本信息"
type="info"
:closable="false">
</el-alert>
<div style="padding-top: 10px;">
<el-form
:rules="rules"
ref="dataForm"
:model="temp"
label-position="right"
label-width="120px"
style="height: 90%;"
>
<el-form-item label="入库门店" style="wdith:100%;" prop="deptName" class="is-required">
{{temp.deptName}}
</el-form-item>
<el-form-item label="入库方式" prop="stockInType" class="is-required">
<el-select style="wdith:100%;" v-model="temp.stockInType" placeholder="请选择">
<el-option
v-for="item in options"
:key="item.value"
:label="item.label"
:value="item.value">
</el-option>
</el-select>
</el-form-item>
<el-form-item label="备注" prop="remark" >
<el-input type="textarea" v-model="temp.remark" placeholder="备注" />
</el-form-item>
</el-form>
</div>
<el-alert
title="入库商品"
type="info"
:closable="false">
</el-alert>
<div style="width: 100%;padding-top: 10px">
<el-table
:data="tableData"
border
style="width: 100%">
<el-table-column
label="操作"
width="120">
<template slot-scope="scope">
<i class="el-icon-circle-plus-outline el-icon-size" @click="chooseProduct(scope.$index)" ></i>
<i class="el-icon-delete el-icon-size" @click="deleteCon(scope.$index)" ></i>
</template>
</el-table-column>
<el-table-column
prop="productName"
label="商品名"
width="180">
</el-table-column>
<el-table-column
prop="count"
label="数量">
<template slot-scope="scope">
<el-input
:key="scope.row.id"
class="product-count"
v-model="scope.row.count"
@keyup.native="app.clearNoNum"
placeholder="请输入数量"></el-input>
</template>
</el-table-column>
</el-table>
</div>
</div>
<div slot="footer" class="dialog-footer">
<el-button @click="handleCancel"> </el-button>
<el-button type="primary" @click="submit"> </el-button>
</div>
</el-dialog>
<choose-product ref="chooseProductRef" @ok="getCheckedProducts"/>
</div>
</template>
<script>
import {addStock} from "@/api/business/stock/stock";
import {setRequiredFields,isEmpty,accAdd,error,clearNoNum,getLoginUser} from "@/utils";
import ChooseProduct from "@/views/business/stock/chooseProduct";
const requiredFields = ['inStockType']
export default {
name: "addForm",
components: {ChooseProduct},
data() {
return {
rules: setRequiredFields(requiredFields),
options: [{
value: 1,
label: '采购入库'
}, {
value: 2,
label: '其他入库'
}],
dialogVisible: false,
temp: {
remark:'',
deptName:'',
StockType: 1,
},
tableData: [{
productNo:'',
productId:'',
productName:'',
count:0,
categoryName:'',
amount:'',
}],
}
},
methods: {
deleteCon(index){
if(this.tableData.length==1){
this.tableData = this.$options.data().tableData
}else{
this.tableData.splice(index,1)
}
},
open() {
this.dialogVisible = true
const loginUser = getLoginUser()
this.temp.deptName = loginUser.deptName
},
getCheckedProducts(list){
console.log('getCheckedProducts' + list)
if(this.tableData.length==1&&isEmpty(this.tableData[0].name)){
let obj = list[0];
this.tableData[0] = {
productId:obj.productId,
productName:obj.productName,
categoryName:obj.categoryName,
amount:obj.amount,
count:0,
}
list.splice(0,1);
}
test:for(let i=list.length-1;i>=0;i--){
let obj = list[i];
for(let item of this.tableData){
if(item.productId==obj.productId){
item.count = accAdd(item.count,1);
list.splice(i,1); //执行后aa.length会减一
break;
}
}
}
let tableData = list.map(obj=>{
return {
productNo:obj.productNo,
productId:obj.productId,
productName:obj.productName,
categoryName:obj.categoryName,
amount:obj.amount,
count:0,
}
})
this.tableData = this.tableData.concat(tableData);
},
chooseProduct(){
this.$refs.chooseProductRef.open()
},
submit() {
if(this.tableData.length==0|isEmpty(this.tableData[0].productId)){
error('请完善商品信息!');
return false;
}
for(let item of this.tableData){
if(item.count==0){
error('请输入正确的数量!');
return false;
}
}
this.$refs['dataForm'].validate((valid) => {
if (valid) {
this.temp.productList = this.tableData
addStock(this.temp).then(response =>{
this.handleCancel()
this.$emit('ok', response.data)
})
} else {
console.log('error submit!!');
return false;
}
});
},
handleCancel() {
//初始化
this.temp = this.$options.data().temp
this.tableData = this.$options.data().tableData
this.dialogVisible = false
this.$refs['dataForm'].resetFields();
},
onInput(){
this.$forceUpdate();
}
},
}
</script>
<style scoped>
.el-icon-size{
font-size: 24px;
margin-left: 12px;
cursor: pointer;
}
.product-count /deep/ input{
color: red;
}
</style>

View File

@@ -1,228 +0,0 @@
<template>
<div>
<el-dialog :close-on-click-modal="false"
top="8vh"
width="30%"
:visible.sync="dialogVisible"
center
@close="handleCancel"
>
<div class="el-dialog-div">
<el-alert
title="基本信息"
type="info"
:closable="false">
</el-alert>
<div style="padding-top: 10px;">
<el-form
:rules="rules"
ref="dataForm"
:model="temp"
label-position="right"
label-width="120px"
style="height: 90%;"
>
<el-form-item label="出库门店" style="wdith:100%;" prop="deptName" class="is-required">
{{temp.deptName}}
</el-form-item>
<el-form-item label="出库方式" prop="stockInType" class="is-required">
<el-select style="wdith:100%;" v-model="temp.stockInType" placeholder="请选择">
<el-option
v-for="item in options"
:key="item.value"
:label="item.label"
:value="item.value">
</el-option>
</el-select>
</el-form-item>
<el-form-item label="备注" prop="remark" >
<el-input type="textarea" v-model="temp.remark" placeholder="备注" />
</el-form-item>
</el-form>
</div>
<el-alert
title="出库商品"
type="info"
:closable="false">
</el-alert>
<div style="width: 100%;padding-top: 10px">
<el-table
:data="tableData"
border
style="width: 100%">
<el-table-column
label="操作"
width="120">
<template slot-scope="scope">
<i class="el-icon-circle-plus-outline el-icon-size" @click="chooseProduct(scope.$index)" ></i>
<i class="el-icon-delete el-icon-size" @click="deleteCon(scope.$index)" ></i>
</template>
</el-table-column>
<el-table-column
prop="productName"
label="商品名"
width="180">
</el-table-column>
<el-table-column
prop="count"
label="数量">
<template slot-scope="scope">
<el-input
:key="scope.row.id"
class="product-count"
v-model="scope.row.count"
@keyup.native="app.clearNoNum"
placeholder="请输入数量"></el-input>
</template>
</el-table-column>
</el-table>
</div>
</div>
<div slot="footer" class="dialog-footer">
<el-button @click="handleCancel"> </el-button>
<el-button type="primary" @click="submit"> </el-button>
</div>
</el-dialog>
<choose-product ref="chooseProductRef" @ok="getCheckedProducts"/>
</div>
</template>
<script>
import {addStock} from "@/api/business/stock/stock";
import {setRequiredFields,isEmpty,accAdd,error,clearNoNum,getLoginUser} from "@/utils";
import ChooseProduct from "@/views/business/stock/chooseProduct";
const requiredFields = ['inStockType']
export default {
name: "addForm",
components: {ChooseProduct},
data() {
return {
rules: setRequiredFields(requiredFields),
options: [{
value: 1,
label: '损耗出库'
}, {
value: 2,
label: '其他出库'
}],
dialogVisible: false,
temp: {
remark:'',
deptName:'',
StockType: 1,
},
tableData: [{
productNo:'',
productId:'',
productName:'',
count:0,
categoryName:'',
amount:'',
}],
}
},
methods: {
deleteCon(index){
if(this.tableData.length==1){
this.tableData = this.$options.data().tableData
}else{
this.tableData.splice(index,1)
}
},
open() {
this.dialogVisible = true
const loginUser = getLoginUser()
this.temp.deptName = loginUser.deptName
},
getCheckedProducts(list){
console.log('getCheckedProducts' + list)
if(this.tableData.length==1&&isEmpty(this.tableData[0].name)){
let obj = list[0];
this.tableData[0] = {
productId:obj.productId,
productName:obj.productName,
categoryName:obj.categoryName,
amount:obj.amount,
count:0,
}
list.splice(0,1);
}
test:for(let i=list.length-1;i>=0;i--){
let obj = list[i];
for(let item of this.tableData){
if(item.productId==obj.productId){
item.count = accAdd(item.count,1);
list.splice(i,1); //执行后aa.length会减一
break;
}
}
}
let tableData = list.map(obj=>{
return {
productNo:obj.productNo,
productId:obj.productId,
productName:obj.productName,
categoryName:obj.categoryName,
amount:obj.amount,
count:0,
}
})
this.tableData = this.tableData.concat(tableData);
},
chooseProduct(){
this.$refs.chooseProductRef.open()
},
submit() {
if(this.tableData.length==0|isEmpty(this.tableData[0].productId)){
error('请完善商品信息!');
return false;
}
for(let item of this.tableData){
if(item.count==0){
error('请输入正确的数量!');
return false;
}
}
this.$refs['dataForm'].validate((valid) => {
if (valid) {
this.temp.productList = this.tableData
addStockOut(this.temp).then(response =>{
this.handleCancel()
this.$emit('ok', response.data)
})
} else {
console.log('error submit!!');
return false;
}
});
},
handleCancel() {
//初始化
this.temp = this.$options.data().temp
this.tableData = this.$options.data().tableData
this.dialogVisible = false
this.$refs['dataForm'].resetFields();
},
onInput(){
this.$forceUpdate();
}
},
}
</script>
<style scoped>
.el-icon-size{
font-size: 24px;
margin-left: 12px;
cursor: pointer;
}
.product-count /deep/ input{
color: red;
}
</style>

View File

@@ -1,53 +0,0 @@
<template>
<div>
<el-dialog
append-to-body
top="2vh"
width="80%"
:visible.sync="dialogVisible"
center
@close="handleCancel"
>
<div class="el-dialog-div" style="height:80vh">
<product-list @ok="getCheckedProducts"/>
</div>
</el-dialog>
</div>
</template>
<script>
import Product from "@/views/business/product/productList";
import ProductList from "@/views/business/stock/productList";
export default {
name: "chooseProduct",
components: {ProductList, Product},
props: {
sellList: Array,
},
data() {
return {
dialogVisible: false,
temp:{}
}
},
methods: {
open() {
this.dialogVisible = true
},
getCheckedProducts(productList){
console.log(productList)
this.$emit('ok', productList)
this.handleCancel()
},
handleCancel(){
this.dialogVisible = false
},
submit(){
}
},
}
</script>
<style scoped>
</style>

View File

@@ -1,182 +0,0 @@
<template>
<div>
<el-dialog
:close-on-click-modal="false"
top="8vh"
width="40%"
:visible.sync="dialogVisible"
center
@close="handleCancel"
>
<div class="el-dialog-div">
<el-form
:rules="rules"
ref="dataForm"
:model="temp"
label-position="right"
label-width="120px"
style="height: 90%;"
>
<el-form-item label="库存单id" prop="stockId" class="is-required">
<el-input v-model="temp.stockId" placeholder="库存单id" />
</el-form-item>
<el-form-item label="库存单表头" prop="stockTitle" class="is-required">
<el-input v-model="temp.stockTitle" placeholder="库存单表头" />
</el-form-item>
<el-form-item label="库存单编号" prop="stockNo" class="is-required">
<el-input v-model="temp.stockNo" placeholder="库存单编号" />
</el-form-item>
<el-form-item label="0正常 1审核完毕 2取消" prop="stockStatus" class="is-required">
<el-input v-model="temp.stockStatus" placeholder="0正常 1审核完毕 2取消" />
</el-form-item>
<el-form-item label="门店id" prop="shopId" class="is-required">
<el-input v-model="temp.shopId" placeholder="门店id" />
</el-form-item>
<el-form-item label="门店名" prop="shopName" class="is-required">
<el-input v-model="temp.shopName" placeholder="门店名" />
</el-form-item>
<el-form-item label="创建人" prop="createName" class="is-required">
<el-input v-model="temp.createName" placeholder="创建人" />
</el-form-item>
<el-form-item label="创建时间" prop="createTime" class="is-required">
<el-input v-model="temp.createTime" placeholder="创建时间" />
</el-form-item>
<el-form-item label="创建人id" prop="createId" class="is-required">
<el-input v-model="temp.createId" placeholder="创建人id" />
</el-form-item>
<el-form-item label="修改时间" prop="updateTime" class="is-required">
<el-input v-model="temp.updateTime" placeholder="修改时间" />
</el-form-item>
<el-form-item label="修改人" prop="updateName" class="is-required">
<el-input v-model="temp.updateName" placeholder="修改人" />
</el-form-item>
<el-form-item label="修改人id" prop="updateId" class="is-required">
<el-input v-model="temp.updateId" placeholder="修改人id" />
</el-form-item>
<el-form-item label="审核人ID" prop="checkId" class="is-required">
<el-input v-model="temp.checkId" placeholder="审核人ID" />
</el-form-item>
<el-form-item label="审核人姓名" prop="checkName" class="is-required">
<el-input v-model="temp.checkName" placeholder="审核人姓名" />
</el-form-item>
<el-form-item label="审核时间" prop="checkTime" class="is-required">
<el-input v-model="temp.checkTime" placeholder="审核时间" />
</el-form-item>
<el-form-item label="类型 1入库 2出库" prop="stockType" class="is-required">
<el-input v-model="temp.stockType" placeholder="类型 1入库 2出库" />
</el-form-item>
<el-form-item label="金额" prop="stockMoney" class="is-required">
<el-input v-model="temp.stockMoney" placeholder="金额" />
</el-form-item>
<el-form-item label="入库类型" prop="stockInType" class="is-required">
<el-input v-model="temp.stockInType" placeholder="入库类型" />
</el-form-item>
<el-form-item label="出库类型" prop="stockOutType" class="is-required">
<el-input v-model="temp.stockOutType" placeholder="出库类型" />
</el-form-item>
<el-form-item label="乐观锁字段" prop="version" class="is-required">
<el-input v-model="temp.version" placeholder="乐观锁字段" />
</el-form-item>
<el-form-item label="0正常 1删除" prop="deleted" class="is-required">
<el-input v-model="temp.deleted" placeholder="0正常 1删除" />
</el-form-item>
</el-form>
</div>
<div slot="footer" class="dialog-footer">
<el-button @click="handleCancel"> </el-button>
<el-button type="primary" @click="submit"> </el-button>
</div>
</el-dialog>
</div>
</template>
<script>
import { editStock } from "@/api/business/stock/stock";
import {setRequiredFields} from "@/utils";
const requiredFields = []
export default {
name: "editForm",
data() {
return {
rules: setRequiredFields(requiredFields),
dialogVisible: false,
temp: {
stockId:'',
stockTitle:'',
stockNo:'',
stockStatus:'',
shopId:'',
shopName:'',
createName:'',
createTime:'',
createId:'',
updateTime:'',
updateName:'',
updateId:'',
checkId:'',
checkName:'',
checkTime:'',
stockType:'',
stockMoney:'',
stockInType:'',
stockOutType:'',
version:'',
deleted:'',
},
}
},
methods: {
open(row) {
this.temp = this.$options.data().temp
this.temp = row
this.dialogVisible = true
},
submit() {
this.$refs['dataForm'].validate((valid) => {
if (valid) {
editStock(this.temp).then(response => {
this.handleCancel()
this.$emit('ok', response.data)
})
} else {
console.log('error submit!!');
return false;
}
});
},
handleCancel() {
//初始化
this.temp = this.$options.data().temp
this.dialogVisible = false
this.$refs['dataForm'].resetFields()
}
},
}
</script>
<style scoped>
</style>

View File

@@ -1,426 +0,0 @@
<template>
<div class="app-container">
<div class="filter-container" style="margin-bottom: 10px;">
<el-input
v-model="listQuery.keyword"
size="small"
placeholder="请输入关键词"
clearable
class="filter-item"
style="width: 200px;margin-left: 10px;"
/>
<el-button-group style="margin-left: 10px;">
<el-button
size="small"
class="filter-item"
type="primary"
icon="el-icon-search"
@click="search"
>
搜索
</el-button>
<el-button
size="small"
class="filter-item"
type="primary"
icon="el-icon-refresh"
@click="refresh"
>
重置
</el-button>
</el-button-group>
<el-button
size="small"
class="filter-item"
type="primary"
icon="el-icon-plus"
style="margin-left: 10px;"
@click="add"
>
新增
</el-button>
</div>
<el-row :gutter="24" class="row-container">
<el-col :span="4" style="height: 100%;">
<el-tree
default-expand-all
:data="categoryList"
node-key="categoryId"
:props="defaultProps"
@node-click="handleNodeClick"
>
<span class="custom-tree-node" slot-scope="{ node, data }">
<span :class="listQuery.categoryId==data.categoryId?'info-text':''" > {{ node.label }}</span>
</span>
</el-tree>
</el-col>
<el-col :span="20" style="height: 100%;">
<el-table
ref="productTable"
v-loading="listLoading"
:data="list"
element-loading-text="Loading"
border
fit
height="80%"
class="table-container"
highlight-current-row
@row-click="handleRowClick"
@selection-change="getSelection"
>
<el-table-column
align="center"
type="selection"
width="55">
</el-table-column>
<el-table-column
label="序号"
width="150"
align="center"
>
<template slot-scope="scope">
{{ scope.$index+1 }}
</template>
</el-table-column>
<el-table-column
label="分类名"
width="160"
align="center"
>
<template slot-scope="scope">
{{ scope.row.categoryName }}
</template>
</el-table-column>
<el-table-column
label="商品名"
width="160"
align="center"
>
<template slot-scope="scope">
{{ scope.row.productName }}
</template>
</el-table-column>
<el-table-column
label="商品金额"
width="160"
align="center"
>
<template slot-scope="scope">
{{ scope.row.productAmount }}
</template>
</el-table-column>
<el-table-column
label="商品会员金额"
width="160"
align="center"
>
<template slot-scope="scope">
{{ scope.row.productMemberAmount }}
</template>
</el-table-column>
<el-table-column
label="商品图片"
width="160"
align="center"
>
<template slot-scope="scope">
<img v-if="scope.row.productImage" :src=" baseUrl + scope.row.productImageUrl" class="avatar" style="width: 40px;height: 40px;">
</template>
</el-table-column>
<el-table-column
label="库存数量"
width="160"
align="center"
>
<template slot-scope="scope">
{{ scope.row.productCount }}
</template>
</el-table-column>
<el-table-column
label="提成金额"
width="160"
align="center"
>
<template slot-scope="scope">
{{ scope.row.pushAmount }}
</template>
</el-table-column>
<el-table-column
label="提成比例"
width="160"
align="center"
>
<template slot-scope="scope">
{{ scope.row.pushPercent }}
</template>
</el-table-column>
<el-table-column
label="0正常 1下架"
width="160"
align="center"
>
<template slot-scope="scope">
{{ scope.row.productStatus }}
</template>
</el-table-column>
<el-table-column
label="门店名"
width="160"
align="center"
>
<template slot-scope="scope">
{{ scope.row.shopName }}
</template>
</el-table-column>
<el-table-column
label="创建人"
width="160"
align="center"
>
<template slot-scope="scope">
{{ scope.row.createName }}
</template>
</el-table-column>
<el-table-column
label="创建时间"
width="160"
align="center"
>
<template slot-scope="scope">
{{ scope.row.createTime }}
</template>
</el-table-column>
<el-table-column
label="修改人"
width="160"
align="center"
>
<template slot-scope="scope">
{{ scope.row.updateName }}
</template>
</el-table-column>
<el-table-column
label="修改时间"
width="160"
align="center"
>
<template slot-scope="scope">
{{ scope.row.updateTime }}
</template>
</el-table-column>
<el-table-column
fixed="right"
label="操作"
width="200"
align="center"
>
<template slot-scope="scope">
<el-button-group>
<el-button
type="primary"
icon="el-icon-edit"
size="mini"
@click="edit(scope)"
>
修改
</el-button>
<el-button
type="danger"
icon="el-icon-delete"
size="mini"
@click="del(scope)"
v-hasPerms="'product:del'"
>
删除
</el-button>
</el-button-group>
</template>
</el-table-column>
</el-table>
<pagination
:total="total"
:page.sync="listQuery.page"
:limit.sync="listQuery.limit"
@pagination="fetchData"
/>
<div class="div-border" style="height: 29%;margin-top:15px;">
<el-alert
type="warning"
:closable="false">
<template slot="title">
已选择的条目{{productList.length}}
<el-button style="margin-left: 15px;"
@click="chooseDone"
icon="el-icon-check"
type="danger">选好了</el-button>
</template>
</el-alert>
<div class="tag-view">
<el-tag
v-for="(tag,index) in productList"
:key="tag.productId"
closable
effect="dark"
@close="handleClose(tag,index)"
>
{{tag.productName}}
</el-tag>
</div>
</div>
</el-col>
</el-row>
<add-form ref="addForm" @ok="addOk" />
<edit-form ref="editForm" @ok="editOk" />
</div>
</template>
<script>
import {getCategoryList} from "@/api/business/category/category";
import {getProductPage,deleteProduct} from "@/api/business/product/product";
import {deepClone,success} from "@/utils";
import confirm from "@/utils/confirm";
import Pagination from '@/components/Pagination'
import addForm from "@/views/business/product/addProduct";
import editForm from "@/views/business/product/editProduct";
export default {
name: 'productList',
components: {addForm,editForm,Pagination},
data() {
return {
total: 0,
list: [],
listLoading: true,
listQuery: {
page: 1,
limit: 50,
categoryId: '',
keyword: '',
stockControl:1
},
defaultProps: {
id: 'categoryId',
label: 'categoryName',
},
temp: {},
categoryList: [],
productList: []
}
},
created() {
this.fetchData()
this.getCategoryList()
},
methods: {
handleClose(tag,index){
this.productList.splice(index,1);
//取消选中状态
this.$refs.productTable.toggleRowSelection(tag, false);
},
getCategoryList(){
getCategoryList().then(res => {
this.categoryList = res.data
})
},
chooseDone(){
if(this.productList.length==0){
error('还没有选择商品')
return false
}
this.$emit('ok', this.productList)
const table = this.$refs.productTable;
const rows = table.store.states.data; // 获取表格所有行的数据(不同组件获取方式可能不同)
rows.forEach(row => {
table.toggleRowSelection(row, false); // 调用toggleRowSelection方法第二个参数传false表示取消选中
});
},
handleRowClick(row) {
let obj = row
this.$refs.productTable.toggleRowSelection(row)
},
getSelection(e){
this.productList = e
},
handleNodeClick(e){
this.listQuery.categoryId = e.categoryId
this.fetchData()
},
search() {
this.fetchData()
},
refresh() {
this.listQuery = this.$options.data().listQuery
this.fetchData()
},
fetchData() {
this.listLoading = true
getProductPage(this.listQuery).then(response => {
const { records, total } = response.data
this.list = records
this.total = total
this.listLoading = false
})
},
add(){
this.$refs.addForm.open(this.listQuery.categoryId)
},
addOk(){
this.fetchData()
},
edit(scope) {
const temp = deepClone(scope.row)
this.$refs.editForm.open(temp)
},
editOk(){
this.fetchData()
},
del(scope) {
confirm("确定要删除吗?").then(res=>{
if(res){
deleteProduct(scope.row.productId).then(response => {
console.log(response)
success('删除成功')
this.fetchData()
})
}
})
},
}
}
</script>
<style scoped>
.tag-view /deep/ .el-tag {
margin: 10px;
}
</style>

View File

@@ -1,281 +0,0 @@
<template>
<div class="app-container">
<div class="filter-container">
<el-input
v-model="listQuery.keyword"
size="small"
placeholder="请输入关键词"
clearable
class="filter-item"
style="width: 200px;margin-left: 10px;"
/>
<el-button-group style="margin-left: 10px;">
<el-button
size="small"
class="filter-item"
type="primary"
icon="el-icon-search"
@click="search"
>
搜索
</el-button>
<el-button
size="small"
class="filter-item"
type="primary"
icon="el-icon-refresh"
@click="refresh"
>
重置
</el-button>
</el-button-group>
<el-button
size="small"
class="filter-item"
type="primary"
icon="el-icon-plus"
style="margin-left: 10px;"
@click="add"
>
新增
</el-button>
</div>
<el-table
v-loading="listLoading"
:data="list"
element-loading-text="Loading"
border
fit
height="100%"
class="table-container"
highlight-current-row
@row-click="handleRowClick"
row-key="stockId"
ref="stockTableRef"
:expand-row-keys="expandedKeys"
>
<el-table-column type="expand">
<template slot-scope="scope">
<el-table :data="scope.row.stockDetailVos" border>
<el-table-column
label="商品名称"
prop="detailField1"
align="center"
>
<template slot-scope="detailScope">
{{ detailScope.row.productName }}
</template>
</el-table-column>
<el-table-column
label="入库数量"
prop="detailField2"
align="center"
>
<template slot-scope="detailScope">
{{ detailScope.row.count }}
</template>
</el-table-column>
<!-- 可以根据实际的 stockDetailVos 中的属性继续添加更多列 -->
</el-table>
</template>
</el-table-column>
<el-table-column
label="序号"
width="150"
align="center"
>
<template slot-scope="scope">
{{ scope.$index+1 }}
</template>
</el-table-column>
<el-table-column
label="库存单编号"
width="160"
align="center"
>
<template slot-scope="scope">
{{ scope.row.stockNo }}
</template>
</el-table-column>
<el-table-column
label="库存单标题"
width="300"
align="center"
>
<template slot-scope="scope">
{{ scope.row.stockTitle }}
</template>
</el-table-column>
<el-table-column
label="门店"
align="center"
>
<template slot-scope="scope">
{{ scope.row.shopName }}
</template>
</el-table-column>
<el-table-column
label="创建人"
align="center"
>
<template slot-scope="scope">
{{ scope.row.createName }}
</template>
</el-table-column>
<el-table-column
label="创建时间"
align="center"
>
<template slot-scope="scope">
{{ scope.row.createTime }}
</template>
</el-table-column>
<el-table-column
label="入库类型"
align="center"
>
<template slot-scope="scope">
<span v-if="scope.row.stockInType==1">采购入库</span>
<span v-if="scope.row.stockInType==2">其他入库</span>
<span v-if="scope.row.stockInType==3">销单返回入库</span>
</template>
</el-table-column>
<!-- <el-table-column-->
<!-- fixed="right"-->
<!-- label="操作"-->
<!-- width="200"-->
<!-- align="center"-->
<!-- >-->
<!-- <template slot-scope="scope">-->
<!-- <el-button-group>-->
<!-- <el-button-->
<!-- type="primary"-->
<!-- icon="el-icon-edit"-->
<!-- size="mini"-->
<!-- @click="edit(scope)"-->
<!-- >-->
<!-- 修改-->
<!-- </el-button>-->
<!-- <el-button-->
<!-- type="danger"-->
<!-- icon="el-icon-delete"-->
<!-- size="mini"-->
<!-- @click="del(scope)"-->
<!-- >-->
<!-- 删除-->
<!-- </el-button>-->
<!-- </el-button-group>-->
<!-- </template>-->
<!-- </el-table-column>-->
</el-table>
<pagination
:total="total"
:page.sync="listQuery.page"
:limit.sync="listQuery.limit"
@pagination="fetchData"
/>
<add-form ref="addForm" @ok="addOk" />
<edit-form ref="editForm" @ok="editOk" />
</div>
</template>
<script>
import {getStockPage,deleteStock} from "@/api/business/stock/stock";
import {deepClone,success} from "@/utils";
import confirm from "@/utils/confirm";
import Pagination from '@/components/Pagination'
import addForm from "@/views/business/stock/addStock";
import editForm from "@/views/business/stock/editStock";
export default {
name: 'stock',
components: {addForm,editForm,Pagination},
data() {
return {
total: 0,
list: [],
listLoading: true,
listQuery: {
page: 1,
limit: 50,
keyword: '',
stockType: 1
},
temp: {},
expandedKeys: []
}
},
created() {
this.fetchData()
},
methods: {
handleRowClick(row, event, column) {
if (this.expandedKeys.length > 0 && this.expandedKeys[0] === row.stockId) {
this.expandedKeys = [];
} else {
this.expandedKeys = [row.stockId];
}
this.$refs.stockTableRef.toggleRowExpansion(row);
},
search() {
this.fetchData()
},
refresh() {
this.listQuery = this.$options.data().listQuery
this.fetchData()
},
fetchData() {
this.listLoading = true
getStockPage(this.listQuery).then(response => {
const { records, total } = response.data
this.list = records
this.total = total
this.listLoading = false
})
},
add(){
this.$refs.addForm.open()
},
addOk(){
this.fetchData()
},
edit(scope) {
const temp = deepClone(scope.row)
this.$refs.editForm.open(temp)
},
editOk(){
this.fetchData()
},
del(scope) {
confirm("确定要删除吗?").then(res=>{
if(res){
deleteStock(scope.row.stockId).then(response => {
console.log(response)
success('删除成功')
this.fetchData()
})
}
})
},
}
}
</script>
<style scoped>
</style>

View File

@@ -1,281 +0,0 @@
<template>
<div class="app-container">
<div class="filter-container">
<el-input
v-model="listQuery.keyword"
size="small"
placeholder="请输入关键词"
clearable
class="filter-item"
style="width: 200px;margin-left: 10px;"
/>
<el-button-group style="margin-left: 10px;">
<el-button
size="small"
class="filter-item"
type="primary"
icon="el-icon-search"
@click="search"
>
搜索
</el-button>
<el-button
size="small"
class="filter-item"
type="primary"
icon="el-icon-refresh"
@click="refresh"
>
重置
</el-button>
</el-button-group>
<el-button
size="small"
class="filter-item"
type="primary"
icon="el-icon-plus"
style="margin-left: 10px;"
@click="add"
>
新增
</el-button>
</div>
<el-table
v-loading="listLoading"
:data="list"
element-loading-text="Loading"
border
fit
height="100%"
class="table-container"
highlight-current-row
@row-click="handleRowClick"
row-key="stockId"
ref="stockTableRef"
:expand-row-keys="expandedKeys"
>
<el-table-column type="expand">
<template slot-scope="scope">
<el-table :data="scope.row.stockDetailVos" border>
<el-table-column
label="商品名称"
prop="detailField1"
align="center"
>
<template slot-scope="detailScope">
{{ detailScope.row.productName }}
</template>
</el-table-column>
<el-table-column
label="出库数量"
prop="detailField2"
align="center"
>
<template slot-scope="detailScope">
{{ detailScope.row.count }}
</template>
</el-table-column>
<!-- 可以根据实际的 stockDetailVos 中的属性继续添加更多列 -->
</el-table>
</template>
</el-table-column>
<el-table-column
label="序号"
width="150"
align="center"
>
<template slot-scope="scope">
{{ scope.$index+1 }}
</template>
</el-table-column>
<el-table-column
label="库存单编号"
width="160"
align="center"
>
<template slot-scope="scope">
{{ scope.row.stockNo }}
</template>
</el-table-column>
<el-table-column
label="库存单标题"
width="300"
align="center"
>
<template slot-scope="scope">
{{ scope.row.stockTitle }}
</template>
</el-table-column>
<el-table-column
label="门店"
align="center"
>
<template slot-scope="scope">
{{ scope.row.shopName }}
</template>
</el-table-column>
<el-table-column
label="创建人"
align="center"
>
<template slot-scope="scope">
{{ scope.row.createName }}
</template>
</el-table-column>
<el-table-column
label="创建时间"
align="center"
>
<template slot-scope="scope">
{{ scope.row.createTime }}
</template>
</el-table-column>
<el-table-column
label="出库类型"
align="center"
>
<template slot-scope="scope">
<span v-if="scope.row.stockOutType==1">损耗出库</span>
<span v-if="scope.row.stockOutType==2">其他出库</span>
<span v-if="scope.row.stockOutType==3">使用出库</span>
</template>
</el-table-column>
<!-- <el-table-column-->
<!-- fixed="right"-->
<!-- label="操作"-->
<!-- width="200"-->
<!-- align="center"-->
<!-- >-->
<!-- <template slot-scope="scope">-->
<!-- <el-button-group>-->
<!-- <el-button-->
<!-- type="primary"-->
<!-- icon="el-icon-edit"-->
<!-- size="mini"-->
<!-- @click="edit(scope)"-->
<!-- >-->
<!-- 修改-->
<!-- </el-button>-->
<!-- <el-button-->
<!-- type="danger"-->
<!-- icon="el-icon-delete"-->
<!-- size="mini"-->
<!-- @click="del(scope)"-->
<!-- >-->
<!-- 删除-->
<!-- </el-button>-->
<!-- </el-button-group>-->
<!-- </template>-->
<!-- </el-table-column>-->
</el-table>
<pagination
:total="total"
:page.sync="listQuery.page"
:limit.sync="listQuery.limit"
@pagination="fetchData"
/>
<add-form ref="addForm" @ok="addOk" />
<edit-form ref="editForm" @ok="editOk" />
</div>
</template>
<script>
import {getStockPage,deleteStock} from "@/api/business/stock/stock";
import {deepClone,success} from "@/utils";
import confirm from "@/utils/confirm";
import Pagination from '@/components/Pagination'
import addForm from "@/views/business/stock/addStockOut";
import editForm from "@/views/business/stock/editStock";
export default {
name: 'stock',
components: {addForm,editForm,Pagination},
data() {
return {
total: 0,
list: [],
listLoading: true,
listQuery: {
page: 1,
limit: 50,
keyword: '',
stockType: 2
},
temp: {},
expandedKeys: []
}
},
created() {
this.fetchData()
},
methods: {
handleRowClick(row, event, column) {
if (this.expandedKeys.length > 0 && this.expandedKeys[0] === row.stockId) {
this.expandedKeys = [];
} else {
this.expandedKeys = [row.stockId];
}
this.$refs.stockTableRef.toggleRowExpansion(row);
},
search() {
this.fetchData()
},
refresh() {
this.listQuery = this.$options.data().listQuery
this.fetchData()
},
fetchData() {
this.listLoading = true
getStockPage(this.listQuery).then(response => {
const { records, total } = response.data
this.list = records
this.total = total
this.listLoading = false
})
},
add(){
this.$refs.addForm.open()
},
addOk(){
this.fetchData()
},
edit(scope) {
const temp = deepClone(scope.row)
this.$refs.editForm.open(temp)
},
editOk(){
this.fetchData()
},
del(scope) {
confirm("确定要删除吗?").then(res=>{
if(res){
deleteStock(scope.row.stockId).then(response => {
console.log(response)
success('删除成功')
this.fetchData()
})
}
})
},
}
}
</script>
<style scoped>
</style>

View File

@@ -1,121 +0,0 @@
<template>
<div>
<el-dialog
:close-on-click-modal="false"
top="8vh"
width="40%"
:visible.sync="dialogVisible"
center
@close="handleCancel"
>
<div class="el-dialog-div">
<el-form
:rules="rules"
ref="dataForm"
:model="temp"
label-position="right"
label-width="120px"
style="height: 90%;"
>
<el-form-item label="库存详情id" prop="stockDetailId" class="is-required">
<el-input v-model="temp.stockDetailId" placeholder="库存详情id" />
</el-form-item>
<el-form-item label="库存单id" prop="stockId" class="is-required">
<el-input v-model="temp.stockId" placeholder="库存单id" />
</el-form-item>
<el-form-item label="商品" prop="productId" class="is-required">
<el-input v-model="temp.productId" placeholder="商品" />
</el-form-item>
<el-form-item label="商品名 " prop="productName" class="is-required">
<el-input v-model="temp.productName" placeholder="商品名 " />
</el-form-item>
<el-form-item label="库存数量" prop="count" class="is-required">
<el-input v-model="temp.count" placeholder="库存数量" />
</el-form-item>
<el-form-item label="0正常 1审核完毕 2取消" prop="stockStatus" class="is-required">
<el-input v-model="temp.stockStatus" placeholder="0正常 1审核完毕 2取消" />
</el-form-item>
<el-form-item label="类型 1入库 2出库" prop="stockType" class="is-required">
<el-input v-model="temp.stockType" placeholder="类型 1入库 2出库" />
</el-form-item>
<el-form-item label="金额" prop="amount" class="is-required">
<el-input v-model="temp.amount" placeholder="金额" />
</el-form-item>
<el-form-item label="创建时间" prop="createTime" class="is-required">
<el-input v-model="temp.createTime" placeholder="创建时间" />
</el-form-item>
</el-form>
</div>
<div slot="footer" class="dialog-footer">
<el-button @click="handleCancel"> </el-button>
<el-button type="primary" @click="submit"> </el-button>
</div>
</el-dialog>
</div>
</template>
<script>
import {addStockDetail} from "@/api/business/stockDetail/stockDetail";
import {setRequiredFields} from "@/utils";
const requiredFields = []
export default {
name: "addForm",
data() {
return {
rules: setRequiredFields(requiredFields),
dialogVisible: false,
temp: {
stockDetailId:'',
stockId:'',
productId:'',
productName:'',
count:'',
stockStatus:'',
stockType:'',
amount:'',
createTime:'',
},
}
},
methods: {
open() {
this.dialogVisible = true
},
submit() {
this.$refs['dataForm'].validate((valid) => {
if (valid) {
addStockDetail(this.temp).then(response =>{
this.handleCancel()
this.$emit('ok', response.data)
})
} else {
console.log('error submit!!');
return false;
}
});
},
handleCancel() {
//初始化
this.temp = this.$options.data().temp
this.dialogVisible = false
this.$refs['dataForm'].resetFields();
}
},
}
</script>
<style scoped>
</style>

View File

@@ -1,122 +0,0 @@
<template>
<div>
<el-dialog
:close-on-click-modal="false"
top="8vh"
width="40%"
:visible.sync="dialogVisible"
center
@close="handleCancel"
>
<div class="el-dialog-div">
<el-form
:rules="rules"
ref="dataForm"
:model="temp"
label-position="right"
label-width="120px"
style="height: 90%;"
>
<el-form-item label="库存详情id" prop="stockDetailId" class="is-required">
<el-input v-model="temp.stockDetailId" placeholder="库存详情id" />
</el-form-item>
<el-form-item label="库存单id" prop="stockId" class="is-required">
<el-input v-model="temp.stockId" placeholder="库存单id" />
</el-form-item>
<el-form-item label="商品" prop="productId" class="is-required">
<el-input v-model="temp.productId" placeholder="商品" />
</el-form-item>
<el-form-item label="商品名 " prop="productName" class="is-required">
<el-input v-model="temp.productName" placeholder="商品名 " />
</el-form-item>
<el-form-item label="库存数量" prop="count" class="is-required">
<el-input v-model="temp.count" placeholder="库存数量" />
</el-form-item>
<el-form-item label="0正常 1审核完毕 2取消" prop="stockStatus" class="is-required">
<el-input v-model="temp.stockStatus" placeholder="0正常 1审核完毕 2取消" />
</el-form-item>
<el-form-item label="类型 1入库 2出库" prop="stockType" class="is-required">
<el-input v-model="temp.stockType" placeholder="类型 1入库 2出库" />
</el-form-item>
<el-form-item label="金额" prop="amount" class="is-required">
<el-input v-model="temp.amount" placeholder="金额" />
</el-form-item>
<el-form-item label="创建时间" prop="createTime" class="is-required">
<el-input v-model="temp.createTime" placeholder="创建时间" />
</el-form-item>
</el-form>
</div>
<div slot="footer" class="dialog-footer">
<el-button @click="handleCancel"> </el-button>
<el-button type="primary" @click="submit"> </el-button>
</div>
</el-dialog>
</div>
</template>
<script>
import { editStockDetail } from "@/api/business/stockDetail/stockDetail";
import {setRequiredFields} from "@/utils";
const requiredFields = []
export default {
name: "editForm",
data() {
return {
rules: setRequiredFields(requiredFields),
dialogVisible: false,
temp: {
stockDetailId:'',
stockId:'',
productId:'',
productName:'',
count:'',
stockStatus:'',
stockType:'',
amount:'',
createTime:'',
},
}
},
methods: {
open(row) {
this.temp = this.$options.data().temp
this.temp = row
this.dialogVisible = true
},
submit() {
this.$refs['dataForm'].validate((valid) => {
if (valid) {
editStockDetail(this.temp).then(response => {
this.handleCancel()
this.$emit('ok', response.data)
})
} else {
console.log('error submit!!');
return false;
}
});
},
handleCancel() {
//初始化
this.temp = this.$options.data().temp
this.dialogVisible = false
this.$refs['dataForm'].resetFields()
}
},
}
</script>
<style scoped>
</style>

View File

@@ -1,273 +0,0 @@
<template>
<div class="app-container">
<div class="filter-container">
<el-input
v-model="listQuery.keyword"
size="small"
placeholder="请输入关键词"
clearable
class="filter-item"
style="width: 200px;margin-left: 10px;"
/>
<el-button-group style="margin-left: 10px;">
<el-button
size="small"
class="filter-item"
type="primary"
icon="el-icon-search"
@click="search"
>
搜索
</el-button>
<el-button
size="small"
class="filter-item"
type="primary"
icon="el-icon-refresh"
@click="refresh"
>
重置
</el-button>
</el-button-group>
<el-button
size="small"
class="filter-item"
type="primary"
icon="el-icon-plus"
style="margin-left: 10px;"
@click="add"
>
新增
</el-button>
</div>
<el-table
v-loading="listLoading"
:data="list"
element-loading-text="Loading"
border
fit
height="100%"
class="table-container"
highlight-current-row
>
<el-table-column
label="序号"
width="150"
align="center"
>
<template slot-scope="scope">
{{ scope.$index+1 }}
</template>
</el-table-column>
<el-table-column
label="库存详情id"
width="160"
align="center"
>
<template slot-scope="scope">
{{ scope.row.stockDetailId }}
</template>
</el-table-column>
<el-table-column
label="库存单id"
width="160"
align="center"
>
<template slot-scope="scope">
{{ scope.row.stockId }}
</template>
</el-table-column>
<el-table-column
label="商品"
width="160"
align="center"
>
<template slot-scope="scope">
{{ scope.row.productId }}
</template>
</el-table-column>
<el-table-column
label="商品名 "
width="160"
align="center"
>
<template slot-scope="scope">
{{ scope.row.productName }}
</template>
</el-table-column>
<el-table-column
label="库存数量"
width="160"
align="center"
>
<template slot-scope="scope">
{{ scope.row.count }}
</template>
</el-table-column>
<el-table-column
label="0正常 1审核完毕 2取消"
width="160"
align="center"
>
<template slot-scope="scope">
{{ scope.row.stockStatus }}
</template>
</el-table-column>
<el-table-column
label="类型 1入库 2出库"
width="160"
align="center"
>
<template slot-scope="scope">
{{ scope.row.stockType }}
</template>
</el-table-column>
<el-table-column
label="金额"
width="160"
align="center"
>
<template slot-scope="scope">
{{ scope.row.amount }}
</template>
</el-table-column>
<el-table-column
label="创建时间"
width="160"
align="center"
>
<template slot-scope="scope">
{{ scope.row.createTime }}
</template>
</el-table-column>
<el-table-column
fixed="right"
label="操作"
width="200"
align="center"
>
<template slot-scope="scope">
<el-button-group>
<el-button
type="primary"
icon="el-icon-edit"
size="mini"
@click="edit(scope)"
>
修改
</el-button>
<el-button
type="danger"
icon="el-icon-delete"
size="mini"
@click="del(scope)"
>
删除
</el-button>
</el-button-group>
</template>
</el-table-column>
</el-table>
<pagination
:total="total"
:page.sync="listQuery.page"
:limit.sync="listQuery.limit"
@pagination="fetchData"
/>
<add-form ref="addForm" @ok="addOk" />
<edit-form ref="editForm" @ok="editOk" />
</div>
</template>
<script>
import {getStockDetailPage,deleteStockDetail} from "@/api/business/stockDetail/stockDetail";
import {deepClone,success} from "@/utils";
import confirm from "@/utils/confirm";
import Pagination from '@/components/Pagination'
import addForm from "@/views/business/stockDetail/addStockDetail";
import editForm from "@/views/business/stockDetail/editStockDetail";
export default {
name: 'stockDetail',
components: {addForm,editForm,Pagination},
data() {
return {
total: 0,
list: [],
listLoading: true,
listQuery: {
page: 1,
limit: 50,
keyword: ''
},
temp: {},
}
},
created() {
this.fetchData()
},
methods: {
search() {
this.fetchData()
},
refresh() {
this.listQuery = this.$options.data().listQuery
this.fetchData()
},
fetchData() {
this.listLoading = true
getStockDetailPage(this.listQuery).then(response => {
const { records, total } = response.data
this.list = records
this.total = total
this.listLoading = false
})
},
add(){
this.$refs.addForm.open()
},
addOk(){
this.fetchData()
},
edit(scope) {
const temp = deepClone(scope.row)
this.$refs.editForm.open(temp)
},
editOk(){
this.fetchData()
},
del(scope) {
confirm("确定要删除吗?").then(res=>{
if(res){
deleteStockDetail(scope.row.stockDetailId).then(response => {
console.log(response)
success('删除成功')
this.fetchData()
})
}
})
},
}
}
</script>
<style scoped>
</style>

View File

@@ -1,207 +0,0 @@
<template>
<div class="app-container">
<div class="filter-container" style="margin-bottom: 10px;">
<el-input
v-model="listQuery.keyword"
size="small"
placeholder="请输入关键词"
clearable
class="filter-item"
style="width: 200px;margin-left: 10px;"
/>
<el-button-group style="margin-left: 10px;">
<el-button
size="small"
class="filter-item"
type="primary"
icon="el-icon-search"
@click="search"
>
搜索
</el-button>
<el-button
size="small"
class="filter-item"
type="primary"
icon="el-icon-refresh"
@click="refresh"
>
重置
</el-button>
</el-button-group>
</div>
<el-row :gutter="24" class="row-container">
<el-table
ref="chooseTable"
v-loading="listLoading"
:data="list"
element-loading-text="Loading"
border
fit
height="80%"
class="table-container"
highlight-current-row
@row-click="handleRowClick"
@selection-change="getSelection"
>
<el-table-column
align="center"
type="selection"
width="55">
</el-table-column>
<el-table-column
label="序号"
width="150"
align="center"
>
<template slot-scope="scope">
{{ scope.$index+1 }}
</template>
</el-table-column>
</el-table>
<pagination
:total="total"
:page.sync="listQuery.page"
:limit.sync="listQuery.limit"
@pagination="fetchData"
/>
<div class="div-border" style="height: 29%;margin-top:15px;">
<el-alert
type="warning"
:closable="false">
<template slot="title">
已选择的条目{{chooseList.length}}
<el-button style="margin-left: 15px;"
@click="chooseDone"
icon="el-icon-check"
type="danger">选好了</el-button>
</template>
</el-alert>
<div class="tag-view">
<el-tag
v-for="(tag,index) in chooseList"
:key="tag.serverId"
closable
effect="dark"
@close="handleClose(tag,index)"
>
{{tag.serverName}}
</el-tag>
</div>
</div>
</el-row>
</div>
</template>
<script>
import {getServerPage,deleteServer} from "@/api/business/server/server";
import {deepClone, error, success} from "@/utils";
import confirm from "@/utils/confirm";
import Pagination from '@/components/Pagination'
import addForm from "@/views/business/server/addServer";
import editForm from "@/views/business/server/editServer";
export default {
name: 'serverList',
components: {addForm,editForm,Pagination},
data() {
return {
total: 0,
list: [],
listLoading: true,
listQuery: {
page: 1,
limit: 50,
keyword: ''
},
temp: {},
chooseList:[]
}
},
created() {
this.fetchData()
},
methods: {
getSelection(e){
this.chooseList = e
},
chooseDone(){
if(this.chooseList.length==0){
error('还没有选择订单')
return false
}
this.$emit('ok', this.chooseList[0])
const table = this.$refs.chooseTable;
const rows = table.store.states.data; // 获取表格所有行的数据(不同组件获取方式可能不同)
rows.forEach(row => {
table.toggleRowSelection(row, false); // 调用toggleRowSelection方法第二个参数传false表示取消选中
});
},
handleRowClick(row) {
//先删除所选中的 只选当前行
const table = this.$refs.chooseTable;
const rows = table.store.states.data; // 获取表格所有行的数据(不同组件获取方式可能不同)
rows.forEach(row => {
table.toggleRowSelection(row, false); // 调用toggleRowSelection方法第二个参数传false表示取消选中
});
this.$refs.chooseTable.toggleRowSelection(row)
},
search() {
this.fetchData()
},
refresh() {
this.listQuery = this.$options.data().listQuery
this.fetchData()
},
fetchData() {
this.listLoading = true
getServerPage(this.listQuery).then(response => {
const { records, total } = response.data
this.list = records
this.total = total
this.listLoading = false
})
},
add(){
this.$refs.addForm.open()
},
addOk(){
this.fetchData()
},
edit(scope) {
const temp = deepClone(scope.row)
this.$refs.editForm.open(temp)
},
editOk(){
this.fetchData()
},
del(scope) {
confirm("确定要删除吗?").then(res=>{
if(res){
deleteServer(scope.row.serverId).then(response => {
console.log(response)
success('删除成功')
this.fetchData()
})
}
})
},
}
}
</script>
<style scoped>
</style>

View File

@@ -1,59 +0,0 @@
<template>
<el-select v-model="categoryId" :placeholder="placeholder" @change="changeCategory">
<el-option
v-for="item in categoryList"
:key="item.categoryId"
:label="item.categoryName"
:value="item.categoryId">
<span >{{ item.categoryName }}</span>
<!-- <span style="float: right; color: #8492a6; font-size: 13px">{{ item.deptNo }} {{deptId}}</span>-->
</el-option>
</el-select>
</template>
<script>
import { getCategoryList} from "@/api/business/category/category";
import { getSelectObj } from '@/utils'
export default {
name: 'categorySelect',
model: {
prop: 'defaultId', //指定自己的v-model属性接受数值
event: 'changeDefaultId'//指定自己的event1事件回送数据给父组件
},
props: {
defaultId: String,
placeholder: String,
},
data() {
return {
categoryId: this.defaultId,
categoryList: []
}
},
mounted() {
this.fetchCategoryList()
},
watch:{
defaultId(newVal,oldVal){
this.categoryId = newVal
}
},
methods:{
fetchCategoryList(){
getCategoryList().then(response=>{
this.categoryList = response.data
})
},
changeCategory(e){
const category = getSelectObj(e,this.categoryList,'categoryId')
this.$emit('changeDefaultId',e)
this.$emit('changeSelect',category)
}
}
}
</script>
<style scoped>
</style>

View File

@@ -1,30 +1,30 @@
<template>
<div class="dashboard-container">
<div class="dashboard-editor-container">
<!-- <div>-->
<!-- <a href="https://github.com/iimeepo/vue-admin-template" target="_blank" class="github-corner" aria-label="View source on Github">-->
<!-- <svg-->
<!-- width="80"-->
<!-- height="80"-->
<!-- viewBox="0 0 250 250"-->
<!-- style="fill:#40c9c6; color:#fff;"-->
<!-- aria-hidden="true"-->
<!-- >-->
<!-- <path d="M0,0 L115,115 L130,115 L142,142 L250,250 L250,0 Z" />-->
<!-- <path-->
<!-- d="M128.3,109.0 C113.8,99.7 119.0,89.6 119.0,89.6 C122.0,82.7 120.5,78.6 120.5,78.6 C119.2,72.0 123.4,76.3 123.4,76.3 C127.3,80.9 125.5,87.3 125.5,87.3 C122.9,97.6 130.6,101.9 134.4,103.2"-->
<!-- fill="currentColor"-->
<!-- style="transform-origin: 130px 106px;"-->
<!-- class="octo-arm"-->
<!-- />-->
<!-- <path-->
<!-- d="M115.0,115.0 C114.9,115.1 118.7,116.5 119.8,115.4 L133.7,101.6 C136.9,99.2 139.9,98.4 142.2,98.6 C133.8,88.0 127.5,74.4 143.8,58.0 C148.5,53.4 154.0,51.2 159.7,51.0 C160.3,49.4 163.2,43.6 171.4,40.1 C171.4,40.1 176.1,42.5 178.8,56.2 C183.1,58.6 187.2,61.8 190.9,65.4 C194.5,69.0 197.7,73.2 200.1,77.6 C213.8,80.2 216.3,84.9 216.3,84.9 C212.7,93.1 206.9,96.0 205.4,96.6 C205.1,102.4 203.0,107.8 198.3,112.5 C181.9,128.9 168.3,122.5 157.7,114.1 C157.9,116.9 156.7,120.9 152.7,124.9 L141.0,136.5 C139.8,137.7 141.6,141.9 141.8,141.8 Z"-->
<!-- fill="currentColor"-->
<!-- class="octo-body"-->
<!-- />-->
<!-- </svg>-->
<!-- </a>-->
<!-- </div>-->
<div>
<a href="https://github.com/iimeepo/vue-admin-template" target="_blank" class="github-corner" aria-label="View source on Github">
<svg
width="80"
height="80"
viewBox="0 0 250 250"
style="fill:#40c9c6; color:#fff;"
aria-hidden="true"
>
<path d="M0,0 L115,115 L130,115 L142,142 L250,250 L250,0 Z" />
<path
d="M128.3,109.0 C113.8,99.7 119.0,89.6 119.0,89.6 C122.0,82.7 120.5,78.6 120.5,78.6 C119.2,72.0 123.4,76.3 123.4,76.3 C127.3,80.9 125.5,87.3 125.5,87.3 C122.9,97.6 130.6,101.9 134.4,103.2"
fill="currentColor"
style="transform-origin: 130px 106px;"
class="octo-arm"
/>
<path
d="M115.0,115.0 C114.9,115.1 118.7,116.5 119.8,115.4 L133.7,101.6 C136.9,99.2 139.9,98.4 142.2,98.6 C133.8,88.0 127.5,74.4 143.8,58.0 C148.5,53.4 154.0,51.2 159.7,51.0 C160.3,49.4 163.2,43.6 171.4,40.1 C171.4,40.1 176.1,42.5 178.8,56.2 C183.1,58.6 187.2,61.8 190.9,65.4 C194.5,69.0 197.7,73.2 200.1,77.6 C213.8,80.2 216.3,84.9 216.3,84.9 C212.7,93.1 206.9,96.0 205.4,96.6 C205.1,102.4 203.0,107.8 198.3,112.5 C181.9,128.9 168.3,122.5 157.7,114.1 C157.9,116.9 156.7,120.9 152.7,124.9 L141.0,136.5 C139.8,137.7 141.6,141.9 141.8,141.8 Z"
fill="currentColor"
class="octo-body"
/>
</svg>
</a>
</div>
<el-row :gutter="40" class="panel-group">
<el-col :xs="12" :sm="12" :lg="6" class="card-panel-col">
@@ -34,95 +34,92 @@
</div>
<div class="card-panel-description">
<div class="card-panel-text">
会员总数
用户总数
</div>
<span class="card-panel-num">{{dashboardInfo.memberCount}}</span>
<span class="card-panel-num">102400</span>
</div>
</div>
</el-col>
<el-col :xs="12" :sm="12" :lg="6" class="card-panel-col">
<div class="card-panel">
<div class="card-panel-icon-wrapper icon-message">
<i class="el-icon-bank-card" />
<i class="el-icon-document" />
</div>
<div class="card-panel-description">
<div class="card-panel-text">
会员卡总数
文章总数
</div>
<span class="card-panel-num">{{dashboardInfo.memberCardCount}}</span>
<span class="card-panel-num">81212</span>
</div>
</div>
</el-col>
<el-col :xs="12" :sm="12" :lg="6" class="card-panel-col">
<div class="card-panel">
<div class="card-panel-icon-wrapper icon-money">
<i class="el-icon-shopping-cart-full" />
<i class="el-icon-chat-dot-square" />
</div>
<div class="card-panel-description">
<div class="card-panel-text">
商品总数
评论总数
</div>
<span class="card-panel-num">{{dashboardInfo.productCount}}</span>
<span class="card-panel-num">9280</span>
</div>
</div>
</el-col>
<el-col :xs="12" :sm="12" :lg="6" class="card-panel-col">
<div class="card-panel">
<div class="card-panel-icon-wrapper icon-shopping">
<i class="el-icon-document" />
<i class="el-icon-view" />
</div>
<div class="card-panel-description">
<div class="card-panel-text">
订单总数
阅读总数
</div>
<span class="card-panel-num">{{dashboardInfo.sellCount}}</span>
<span class="card-panel-num">13600</span>
</div>
</div>
</el-col>
</el-row>
<el-row :gutter="60" style="margin-top: 50px;margin-bottom: 80px;">
<el-col :xs="6" :sm="6" :lg="6" class="card-panel-col" style="text-align: center;">
<el-button style="width: 240px;height: 70px;font-size: 20px;" type="danger" @click="$router.push('/cashier/cashierDesk')">收银台</el-button>
<el-row :gutter="32">
<el-col :xs="24" :sm="24" :lg="8">
<div class="chart-wrapper">
<raddar-chart />
</div>
</el-col>
<el-col :xs="6" :sm="6" :lg="6" class="card-panel-col" style="text-align: center;">
<el-button style="width: 240px;height: 70px;font-size: 20px;" type="success" @click="$router.push('/sellList')">订单管理</el-button>
<el-col :xs="24" :sm="24" :lg="8">
<div class="chart-wrapper">
<pie-chart />
</div>
</el-col>
<el-col :xs="6" :sm="6" :lg="6" class="card-panel-col" style="text-align: center;">
<el-button style="width: 240px;height: 70px;font-size: 20px;" type="primary" @click="$router.push('/product/productList')">商品管理</el-button>
</el-col>
<el-col :xs="6" :sm="6" :lg="6" class="card-panel-col" style="text-align: center;">
<el-button style="width: 240px;height: 70px;font-size: 20px;" type="warning" @click="$router.push('/stockIn')">库存管理</el-button>
<el-col :xs="24" :sm="24" :lg="8">
<div class="chart-wrapper">
<bar-chart />
</div>
</el-col>
</el-row>
<el-row :gutter="16" class="dashboard-bottom">
<el-row :gutter="16">
<el-col :xs="24" :sm="24" :lg="8">
<el-card class="box-card">
<div slot="header" class="clearfix">
<span>商品库存量排行</span>
<span>阅读量排行</span>
</div>
<el-table
:data="dashboardInfo.productStockRank"
:data="tableData"
style="width: 100%"
>
<el-table-column
prop="sort"
label="排名"
>
<template slot-scope="scope">
{{ scope.$index+1 }}
</template>
</el-table-column>
<el-table-column
prop="productName"
label="商品名"
/>
<el-table-column
prop="productCount"
label="库存数"
prop="address"
label="地区"
/>
<el-table-column
prop="number"
label="人数"
/>
</el-table>
</el-card>
@@ -130,21 +127,40 @@
<el-col :xs="24" :sm="24" :lg="8">
<el-card class="box-card">
<div slot="header" class="clearfix">
<span>商品收益排行</span>
<span>收益排行</span>
</div>
<div class="block">
<div class="progress-item" style="margin-bottom: 20px;" v-for="item in dashboardInfo.productSellProportion">
<span>{{item.productName}}</span>
<el-progress :percentage="item.percentage" />
<div style="padding-top:35px;" class="progress-item">
<span>Vue</span>
<el-progress :percentage="70" />
</div>
<div class="progress-item">
<span>JavaScript</span>
<el-progress :percentage="18" />
</div>
<div class="progress-item">
<span>CSS</span>
<el-progress :percentage="12" />
</div>
<div class="progress-item">
<span>PHP</span>
<el-progress :percentage="22" />
</div>
<div class="progress-item">
<span>Hyperf</span>
<el-progress :percentage="38" />
</div>
<div class="progress-item">
<span>ESLint</span>
<el-progress :percentage="100" status="success" />
</div>
</div>
</el-card>
</el-col>
<el-col :xs="24" :sm="24" :lg="8">
<el-card class="box-card">
<div slot="header" class="clearfix">
<span>更新日志</span>
<span>待办事项</span>
</div>
<div class="block">
<el-timeline>
@@ -169,243 +185,232 @@
</template>
<script>
import { mapGetters } from 'vuex'
import {getDashboardInfo} from "@/api/business/stats/stats";
import BarChart from './components/BarChart'
import PieChart from './components/PieChart'
import RaddarChart from './components/RaddarChart'
import { mapGetters } from 'vuex'
import BarChart from './components/BarChart'
import PieChart from './components/PieChart'
import RaddarChart from './components/RaddarChart'
export default {
name: 'Dashboard',
components: {
BarChart,
PieChart,
RaddarChart
},
data() {
return {
dashboardInfo:{},
activities: [{
content: '第一个测试版本开发完成',
timestamp: '2024-12-4 09:05:37',
size: 'large',
type: 'primary',
icon: 'el-icon-more'
export default {
name: 'Dashboard',
components: {
BarChart,
PieChart,
RaddarChart
},
data() {
return {
tableData: [{
sort: '1',
address: '北京',
number: 23423
}, {
sort: '2',
address: '上海',
number: 2312
}, {
sort: '3',
address: '广州',
number: 2231
}, {
sort: '4',
address: '深圳',
number: 1234
}, {
sort: '5',
address: '杭州',
number: 123
}],
activities: [{
content: '支持使用图标',
timestamp: '2018-04-12 20:46',
size: 'large',
type: 'primary',
icon: 'el-icon-more'
}, {
content: '支持自定义颜色',
timestamp: '2018-04-03 20:46',
color: '#0bbd87'
}, {
content: '支持自定义尺寸',
timestamp: '2018-04-03 20:46',
size: 'large'
}, {
content: '默认样式的节点',
timestamp: '2018-04-03 20:46'
}]
}
, {
content: '订单模块开发完成',
timestamp: '2024-12-1 12:22:14',
color: '#0bbd87'
}, {
content: '收银台模块开发完成',
timestamp: '2024-11-28 14:35:28',
size: 'large'
}, {
content: '库存模块开发完成',
timestamp: '2024-11-20 19:16:42'
}
]
}
},
computed: {
...mapGetters([
'name'
])
},
mounted() {
this.getDashboardInfo()
},
methods:{
getDashboardInfo(){
getDashboardInfo().then(res => {
this.dashboardInfo = res.data
})
},
computed: {
...mapGetters([
'name'
])
}
}
}
</script>
<style lang="scss" scoped>
::v-deep .el-progress__text{
margin-left: 0px;
}
::v-deep .el-progress-bar{
width: 90%;
margin-right:-25px;
}
.dashboard-bottom{
.box-card{
min-height: 350px;
}
}
.dashboard-editor-container {
height: calc(100vh - 60px);
padding: 32px;
background-color: rgb(240, 242, 245);
position: relative;
.github-corner {
position: absolute;
top: 0px;
border: 0;
right: 0;
}
.chart-wrapper {
background: #fff;
padding: 16px 16px 0;
margin-bottom: 32px;
}
}
.panel-group {
margin-top: 18px;
.card-panel-col {
margin-bottom: 32px;
}
.card-panel {
height: 108px;
cursor: pointer;
font-size: 12px;
.dashboard-editor-container {
padding: 32px;
background-color: rgb(240, 242, 245);
position: relative;
overflow: hidden;
color: #666;
background: #fff;
box-shadow: 4px 4px 40px rgba(0, 0, 0, .05);
border-color: rgba(0, 0, 0, .05);
&:hover {
.card-panel-icon-wrapper {
color: #fff;
.github-corner {
position: absolute;
top: 0px;
border: 0;
right: 0;
}
.chart-wrapper {
background: #fff;
padding: 16px 16px 0;
margin-bottom: 32px;
}
}
.panel-group {
margin-top: 18px;
.card-panel-col {
margin-bottom: 32px;
}
.card-panel {
height: 108px;
cursor: pointer;
font-size: 12px;
position: relative;
overflow: hidden;
color: #666;
background: #fff;
box-shadow: 4px 4px 40px rgba(0, 0, 0, .05);
border-color: rgba(0, 0, 0, .05);
&:hover {
.card-panel-icon-wrapper {
color: #fff;
}
.icon-people {
background: #40c9c6;
}
.icon-message {
background: #36a3f7;
}
.icon-money {
background: #f4516c;
}
.icon-shopping {
background: #34bfa3
}
}
.icon-people {
background: #40c9c6;
font-size: 48px;
color: #40c9c6;
}
.icon-message {
background: #36a3f7;
font-size: 48px;
color: #36a3f7;
}
.icon-money {
background: #f4516c;
font-size: 48px;
color: #f4516c;
}
.icon-shopping {
background: #34bfa3
font-size: 48px;
color: #34bfa3
}
.card-panel-icon-wrapper {
float: left;
margin: 14px 0 0 14px;
padding: 16px;
transition: all 0.38s ease-out;
border-radius: 6px;
}
.card-panel-icon {
float: left;
font-size: 48px;
}
.card-panel-description {
float: right;
font-weight: bold;
margin: 26px;
margin-left: 0px;
.card-panel-text {
line-height: 18px;
color: rgba(0, 0, 0, 0.45);
font-size: 16px;
margin-bottom: 12px;
}
.card-panel-num {
font-size: 20px;
}
}
}
}
.icon-people {
font-size: 48px;
color: #40c9c6;
.github-corner:hover .octo-arm {
animation: octocat-wave 560ms ease-in-out
}
@keyframes octocat-wave {
0%,
100% {
transform: rotate(0)
}
.icon-message {
font-size: 48px;
color: #36a3f7;
20%,
60% {
transform: rotate(-25deg)
}
.icon-money {
font-size: 48px;
color: #f4516c;
40%,
80% {
transform: rotate(10deg)
}
}
.icon-shopping {
font-size: 48px;
color: #34bfa3
@media (max-width:500px) {
.github-corner:hover .octo-arm {
animation: none
}
.github-corner .octo-arm {
animation: octocat-wave 560ms ease-in-out
}
}
@media (max-width:550px) {
.card-panel-description {
display: none;
}
.card-panel-icon-wrapper {
float: left;
margin: 14px 0 0 14px;
padding: 16px;
transition: all 0.38s ease-out;
border-radius: 6px;
}
.card-panel-icon {
float: left;
font-size: 48px;
}
.card-panel-description {
float: right;
font-weight: bold;
margin: 26px;
margin-left: 0px;
.card-panel-text {
line-height: 18px;
color: rgba(0, 0, 0, 0.45);
font-size: 16px;
margin-bottom: 12px;
}
.card-panel-num {
font-size: 20px;
}
}
}
}
.github-corner:hover .octo-arm {
animation: octocat-wave 560ms ease-in-out
}
@keyframes octocat-wave {
0%,
100% {
transform: rotate(0)
}
20%,
60% {
transform: rotate(-25deg)
}
40%,
80% {
transform: rotate(10deg)
}
}
@media (max-width:500px) {
.github-corner:hover .octo-arm {
animation: none
}
.github-corner .octo-arm {
animation: octocat-wave 560ms ease-in-out
}
}
@media (max-width:550px) {
.card-panel-description {
display: none;
}
.card-panel-icon-wrapper {
float: none !important;
width: 100%;
height: 100%;
margin: 0 !important;
.svg-icon {
display: block;
margin: 14px auto !important;
float: none !important;
width: 100%;
height: 100%;
margin: 0 !important;
.svg-icon {
display: block;
margin: 14px auto !important;
float: none !important;
}
}
}
}
@media (max-width:1024px) {
.chart-wrapper {
padding: 8px;
@media (max-width:1024px) {
.chart-wrapper {
padding: 8px;
}
}
}
</style>

View File

@@ -1,237 +0,0 @@
<template>
<div class="login-container">
<el-form ref="loginForm" :model="loginForm" :rules="loginRules" class="login-form" auto-complete="on" label-position="left">
<div class="title-container">
<h3 class="title">Login Form</h3>
</div>
<el-form-item prop="username">
<span class="svg-container">
<svg-icon icon-class="user" />
</span>
<el-input
ref="username"
v-model="loginForm.username"
placeholder="Username"
name="username"
type="text"
tabindex="1"
auto-complete="on"
/>
</el-form-item>
<el-form-item prop="password">
<span class="svg-container">
<svg-icon icon-class="password" />
</span>
<el-input
:key="passwordType"
ref="password"
v-model="loginForm.password"
:type="passwordType"
placeholder="Password"
name="password"
tabindex="2"
auto-complete="on"
@keyup.enter.native="handleLogin"
/>
<span class="show-pwd" @click="showPwd">
<svg-icon :icon-class="passwordType === 'password' ? 'eye' : 'eye-open'" />
</span>
</el-form-item>
<el-button :loading="loading" type="primary" style="width:100%;margin-bottom:30px;" @click.native.prevent="handleLogin">Login</el-button>
<div class="tips">
<span style="margin-right:20px;">username: admin</span>
<span> password: any</span>
</div>
</el-form>
</div>
</template>
<script>
import { validUsername } from '@/utils/validate'
export default {
name: 'Login',
data() {
const validateUsername = (rule, value, callback) => {
if (!validUsername(value)) {
callback(new Error('Please enter the correct user name'))
} else {
callback()
}
}
const validatePassword = (rule, value, callback) => {
if (value.length < 6) {
callback(new Error('The password can not be less than 6 digits'))
} else {
callback()
}
}
return {
loginForm: {
username: 'admin',
password: '111111'
},
loginRules: {
username: [{ required: true, trigger: 'blur', validator: validateUsername }],
password: [{ required: true, trigger: 'blur', validator: validatePassword }]
},
loading: false,
passwordType: 'password',
redirect: undefined
}
},
watch: {
$route: {
handler: function(route) {
this.redirect = route.query && route.query.redirect
},
immediate: true
}
},
methods: {
showPwd() {
if (this.passwordType === 'password') {
this.passwordType = ''
} else {
this.passwordType = 'password'
}
this.$nextTick(() => {
this.$refs.password.focus()
})
},
handleLogin() {
this.$refs.loginForm.validate(valid => {
if (valid) {
this.loading = true
this.$store.dispatch('user/login', this.loginForm).then(() => {
this.$router.push({ path: this.redirect || '/' })
this.loading = false
}).catch(() => {
this.loading = false
})
} else {
console.log('error submit!!')
return false
}
})
}
}
}
</script>
<style lang="scss">
/* 修复input 背景不协调 和光标变色 */
/* Detail see https://github.com/PanJiaChen/vue-element-admin/pull/927 */
$bg:#283443;
$light_gray:#fff;
$cursor: #fff;
@supports (-webkit-mask: none) and (not (cater-color: $cursor)) {
.login-container .el-input input {
color: $cursor;
}
}
/* reset element-ui css */
.login-container {
.el-input {
display: inline-block;
height: 47px;
width: 85%;
input {
background: transparent;
border: 0px;
-webkit-appearance: none;
border-radius: 0px;
padding: 12px 5px 12px 15px;
color: $light_gray;
height: 47px;
caret-color: $cursor;
&:-webkit-autofill {
box-shadow: 0 0 0px 1000px $bg inset !important;
-webkit-text-fill-color: $cursor !important;
}
}
}
.el-form-item {
border: 1px solid rgba(255, 255, 255, 0.1);
background: rgba(0, 0, 0, 0.1);
border-radius: 5px;
color: #454545;
}
}
</style>
<style lang="scss" scoped>
$bg:#2d3a4b;
$dark_gray:#889aa4;
$light_gray:#eee;
.login-container {
min-height: 100%;
width: 100%;
background-color: $bg;
overflow: hidden;
.login-form {
position: relative;
width: 520px;
max-width: 100%;
padding: 160px 35px 0;
margin: 0 auto;
overflow: hidden;
}
.tips {
font-size: 14px;
color: #fff;
margin-bottom: 10px;
span {
&:first-of-type {
margin-right: 16px;
}
}
}
.svg-container {
padding: 6px 5px 6px 15px;
color: $dark_gray;
vertical-align: middle;
width: 30px;
display: inline-block;
}
.title-container {
position: relative;
.title {
font-size: 26px;
color: $light_gray;
margin: 0px auto 40px auto;
text-align: center;
font-weight: bold;
}
}
.show-pwd {
position: absolute;
right: 10px;
top: 7px;
font-size: 16px;
color: $dark_gray;
cursor: pointer;
user-select: none;
}
}
</style>

View File

@@ -1,331 +0,0 @@
<template>
<div>
<div class="relative min-h-screen flex">
<div class="
flex flex-col
sm:flex-row
items-center
md:items-start
sm:justify-center
md:justify-start
flex-auto
min-w-0
bg-white
">
<div class="
sm:w-1/2
xl:w-3/5
h-full
hidden
md:flex
flex-auto
items-center
justify-center
p-10
overflow-hidden
bg-purple-900
text-white
bg-no-repeat bg-cover
relative
" style="background-image: url(img/img.jpg)">
<div class="
absolute
bg-gradient-to-b
from-indigo-600
to-blue-500
opacity-75
inset-0
z-0
"></div>
<div class="w-full max-w-md z-10">
<div class="sm:text-4xl xl:text-4xl font-bold leading-tight mb-6">门店会员收银系统(开源版)</div>
<div class="sm:text-sm xl:text-md text-gray-200 font-normal">你的门店小助手</div>
</div>
<ul class="circles">
<li></li>
<li></li>
<li></li>
<li></li>
<li></li>
<li></li>
<li></li>
<li></li>
<li></li>
<li></li>
</ul>
</div>
<div class="
md:flex md:items-center md:justify-center
w-full
sm:w-auto
md:h-full
w-2/5
xl:w-2/5
p-8
md:p-10
lg:p-14
sm:rounded-lg
md:rounded-none
bg-white
">
<div class="max-w-md w-full mx-auto space-y-8">
<div class="text-center">
<h2 class="mt-6 text-3xl font-bold text-gray-900">欢迎回来</h2>
<!-- <p class="mt-2 text-sm text-gray-500">第三方登录</p>-->
</div>
<!-- <div class="flex flex-row justify-center items-center space-x-3">-->
<!-- <a href="javascript:" class="-->
<!-- w-11-->
<!-- h-11-->
<!-- items-center-->
<!-- justify-center-->
<!-- inline-flex-->
<!-- rounded-2xl-->
<!-- font-bold-->
<!-- text-lg-->
<!-- bg-blue-900-->
<!-- hover:shadow-lg-->
<!-- cursor-pointer-->
<!-- transition-->
<!-- ease-in-->
<!-- duration-300-->
<!-- "><img class="w-4 h-4" src="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZlcnNpb249IjEuMSIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIHhtbG5zOnN2Z2pzPSJodHRwOi8vc3ZnanMuY29tL3N2Z2pzIiB3aWR0aD0iNTEyIiBoZWlnaHQ9IjUxMiIgeD0iMCIgeT0iMCIgdmlld0JveD0iMCAwIDI0IDI0IiBzdHlsZT0iZW5hYmxlLWJhY2tncm91bmQ6bmV3IDAgMCA1MTIgNTEyIiB4bWw6c3BhY2U9InByZXNlcnZlIiBjbGFzcz0iIj48Zz48cGF0aCB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIGQ9Im0xNS45OTcgMy45ODVoMi4xOTF2LTMuODE2Yy0uMzc4LS4wNTItMS42NzgtLjE2OS0zLjE5Mi0uMTY5LTMuMTU5IDAtNS4zMjMgMS45ODctNS4zMjMgNS42Mzl2My4zNjFoLTMuNDg2djQuMjY2aDMuNDg2djEwLjczNGg0LjI3NHYtMTAuNzMzaDMuMzQ1bC41MzEtNC4yNjZoLTMuODc3di0yLjkzOWMuMDAxLTEuMjMzLjMzMy0yLjA3NyAyLjA1MS0yLjA3N3oiIGZpbGw9IiNmZmZmZmYiIGRhdGEtb3JpZ2luYWw9IiMwMDAwMDAiIHN0eWxlPSIiIGNsYXNzPSIiPjwvcGF0aD48L2c+PC9zdmc+"></a>-->
<!-- <a href="javascript:" class="-->
<!-- w-11-->
<!-- h-11-->
<!-- items-center-->
<!-- justify-center-->
<!-- inline-flex-->
<!-- rounded-2xl-->
<!-- font-bold-->
<!-- text-lg text-white-->
<!-- bg-blue-400-->
<!-- hover:shadow-lg-->
<!-- cursor-pointer-->
<!-- transition-->
<!-- ease-in-->
<!-- duration-300-->
<!-- "><img class="w-4 h-4" src="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZlcnNpb249IjEuMSIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIHhtbG5zOnN2Z2pzPSJodHRwOi8vc3ZnanMuY29tL3N2Z2pzIiB3aWR0aD0iNTEyIiBoZWlnaHQ9IjUxMiIgeD0iMCIgeT0iMCIgdmlld0JveD0iMCAwIDY4MS4zMzQ2NCA2ODEiIHN0eWxlPSJlbmFibGUtYmFja2dyb3VuZDpuZXcgMCAwIDUxMiA1MTIiIHhtbDpzcGFjZT0icHJlc2VydmUiPjxnPjxwYXRoIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgZD0ibTIwMC45NjQ4NDQgNTE1LjI5Mjk2OWMyNDEuMDUwNzgxIDAgMzcyLjg3MTA5NC0xOTkuNzAzMTI1IDM3Mi44NzEwOTQtMzcyLjg3MTA5NCAwLTUuNjcxODc1LS4xMTcxODgtMTEuMzIwMzEzLS4zNzEwOTQtMTYuOTM3NSAyNS41ODU5MzctMTguNSA0Ny44MjQyMTgtNDEuNTg1OTM3IDY1LjM3MTA5NC02Ny44NjMyODEtMjMuNDgwNDY5IDEwLjQ0MTQwNi00OC43NTM5MDcgMTcuNDYwOTM3LTc1LjI1NzgxMyAyMC42MzY3MTggMjcuMDU0Njg3LTE2LjIzMDQ2OCA0Ny44MjgxMjUtNDEuODk0NTMxIDU3LjYyNS03Mi40ODgyODEtMjUuMzIwMzEzIDE1LjAxMTcxOS01My4zNjMyODEgMjUuOTE3OTY5LTgzLjIxNDg0NCAzMS44MDg1OTQtMjMuOTE0MDYyLTI1LjQ3MjY1Ni01Ny45NjQ4NDMtNDEuNDAyMzQ0LTk1LjY2NDA2Mi00MS40MDIzNDQtNzIuMzY3MTg4IDAtMTMxLjA1ODU5NCA1OC42ODc1LTEzMS4wNTg1OTQgMTMxLjAzMTI1IDAgMTAuMjg5MDYzIDEuMTUyMzQ0IDIwLjI4OTA2MyAzLjM5ODQzNyAyOS44ODI4MTMtMTA4LjkxNzk2OC01LjQ4MDQ2OS0yMDUuNTAzOTA2LTU3LjYyNS0yNzAuMTMyODEyLTEzNi45MjE4NzUtMTEuMjUgMTkuMzYzMjgxLTE3Ljc0MjE4OCA0MS44NjMyODEtMTcuNzQyMTg4IDY1Ljg3MTA5MyAwIDQ1LjQ2MDkzOCAyMy4xMzY3MTkgODUuNjA1NDY5IDU4LjMxNjQwNyAxMDkuMDgyMDMyLTIxLjUtLjY2MDE1Ni00MS42OTUzMTMtNi41NjI1LTU5LjM1MTU2My0xNi4zODY3MTktLjAxOTUzMS41NTA3ODEtLjAxOTUzMSAxLjA4NTkzNy0uMDE5NTMxIDEuNjcxODc1IDAgNjMuNDY4NzUgNDUuMTcxODc1IDExNi40NjA5MzggMTA1LjE0NDUzMSAxMjguNDY4NzUtMTEuMDE1NjI1IDIuOTk2MDk0LTIyLjYwNTQ2OCA0LjYwOTM3NS0zNC41NTg1OTQgNC42MDkzNzUtOC40Mjk2ODcgMC0xNi42NDg0MzctLjgyODEyNS0yNC42MzI4MTItMi4zNjMyODEgMTYuNjgzNTk0IDUyLjA3MDMxMiA2NS4wNjY0MDYgODkuOTYwOTM3IDEyMi40MjU3ODEgOTEuMDIzNDM3LTQ0Ljg1NTQ2OSAzNS4xNTYyNS0xMDEuMzU5Mzc1IDU2LjA5NzY1Ny0xNjIuNzY5NTMxIDU2LjA5NzY1Ny0xMC41NjI1IDAtMjEuMDAzOTA2LS42MDU0NjktMzEuMjYxNzE4OC0xLjgxNjQwNyA1Ny45OTk5OTk4IDM3LjE3NTc4MSAxMjYuODcxMDkzOCA1OC44NzEwOTQgMjAwLjg4NjcxODggNTguODcxMDk0IiBmaWxsPSIjZmZmZmZmIiBkYXRhLW9yaWdpbmFsPSIjMDAwMDAwIiBzdHlsZT0iIj48L3BhdGg+PC9nPjwvc3ZnPg=="></a>-->
<!-- <a href="javascript:" class="-->
<!-- w-11-->
<!-- h-11-->
<!-- items-center-->
<!-- justify-center-->
<!-- inline-flex-->
<!-- rounded-2xl-->
<!-- font-bold-->
<!-- text-lg text-white-->
<!-- bg-blue-500-->
<!-- hover:shadow-lg-->
<!-- cursor-pointer-->
<!-- transition-->
<!-- ease-in-->
<!-- duration-300-->
<!-- "><img src="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZlcnNpb249IjEuMSIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIHhtbG5zOnN2Z2pzPSJodHRwOi8vc3ZnanMuY29tL3N2Z2pzIiB3aWR0aD0iNTEyIiBoZWlnaHQ9IjUxMiIgeD0iMCIgeT0iMCIgdmlld0JveD0iMCAwIDI0IDI0IiBzdHlsZT0iZW5hYmxlLWJhY2tncm91bmQ6bmV3IDAgMCA1MTIgNTEyIiB4bWw6c3BhY2U9InByZXNlcnZlIj48Zz48cGF0aCB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIGQ9Im0yMy45OTQgMjR2LS4wMDFoLjAwNnYtOC44MDJjMC00LjMwNi0uOTI3LTcuNjIzLTUuOTYxLTcuNjIzLTIuNDIgMC00LjA0NCAxLjMyOC00LjcwNyAyLjU4N2gtLjA3di0yLjE4NWgtNC43NzN2MTYuMDIzaDQuOTd2LTcuOTM0YzAtMi4wODkuMzk2LTQuMTA5IDIuOTgzLTQuMTA5IDIuNTQ5IDAgMi41ODcgMi4zODQgMi41ODcgNC4yNDN2Ny44MDF6IiBmaWxsPSIjZmZmZmZmIiBkYXRhLW9yaWdpbmFsPSIjMDAwMDAwIiBzdHlsZT0iIj48L3BhdGg+PHBhdGggeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiBkPSJtLjM5NiA3Ljk3N2g0Ljk3NnYxNi4wMjNoLTQuOTc2eiIgZmlsbD0iI2ZmZmZmZiIgZGF0YS1vcmlnaW5hbD0iIzAwMDAwMCIgc3R5bGU9IiI+PC9wYXRoPjxwYXRoIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgZD0ibTIuODgyIDBjLTEuNTkxIDAtMi44ODIgMS4yOTEtMi44ODIgMi44ODJzMS4yOTEgMi45MDkgMi44ODIgMi45MDkgMi44ODItMS4zMTggMi44ODItMi45MDljLS4wMDEtMS41OTEtMS4yOTItMi44ODItMi44ODItMi44ODJ6IiBmaWxsPSIjZmZmZmZmIiBkYXRhLW9yaWdpbmFsPSIjMDAwMDAwIiBzdHlsZT0iIj48L3BhdGg+PC9nPjwvc3ZnPg==" class="w-4 h-4"></a>-->
<!-- </div>-->
<!-- <div class="flex items-center justify-center space-x-2">-->
<!-- <span class="h-px w-16 bg-gray-200"></span>-->
<!-- <span class="text-gray-300 font-normal">使用账号密码登录</span>-->
<!-- <span class="h-px w-16 bg-gray-200"></span>-->
<!-- </div>-->
<div class="mt-8 space-y-6" >
<input type="hidden" name="remember" value="true">
<div class="relative">
<label class="ml-3 text-sm font-bold text-gray-700 tracking-wide">门店账号</label>
<input
v-model="loginForm.username"
class="
w-full
text-base
px-4
py-2
border-b border-gray-300
focus:outline-none
rounded-2xl
focus:border-indigo-500
" type="" placeholder="请输入账号">
</div>
<div class="mt-8 content-center">
<label class="ml-3 text-sm font-bold text-gray-700 tracking-wide">密码</label>
<input
v-model="loginForm.password"
class="
w-full
content-center
text-base
px-4
py-2
border-b
rounded-2xl
border-gray-300
focus:outline-none focus:border-indigo-500
" type="password" placeholder="请输入密码">
</div>
<div class="flex items-center justify-between">
<div class="flex items-center">
<input id="remember_me" name="remember_me" type="checkbox" class="
h-4
w-4
bg-blue-500
focus:ring-blue-400
border-gray-300
rounded
">
<label for="remember_me" class="ml-2 block text-sm text-gray-900">记住我</label>
</div>
<!-- <div class="text-sm">-->
<!-- <a href="https://v.bootstrapmb.com/2021/8/admh611027/#" class="text-indigo-400 hover:text-blue-500">忘记密码</a>-->
<!-- </div>-->
</div>
<div>
<button
@click="handleLogin"
type="button" class="
w-full
flex
justify-center
bg-gradient-to-r
from-indigo-500
to-blue-600
hover:bg-gradient-to-l
hover:from-blue-500
hover:to-indigo-600
text-gray-100
p-4
rounded-full
tracking-wide
font-semibold
shadow-lg
cursor-pointer
transition
ease-in
duration-500
"> </button>
</div>
<div style="font-weight: 500;font-size: 13px;letter-spacing: 1px;">
<span>门店账号用户名:demo 密码111111</span><br/><br/>
<span>管理端账号用户名:admin 密码111111</span><br/><br/>
<span>商业合作qq: 7827869402 vx: MAMBA_4EVER24</span><br/><br/>
<span> <a target="_blank" style="text-decoration: underline;" href="http://8.146.211.120:8086/"> 完整版演示 http://8.146.211.120:8086/</a></span><br/><br/>
<span> <a target="_blank" style="text-decoration: underline;" href="http://8.146.211.120:8087/"> 移动端登陆 http://8.146.211.120:8087/</a></span>
</div>
<!-- <p class="-->
<!-- items-center-->
<!-- justify-center-->
<!-- mt-10-->
<!-- text-center text-md text-gray-500-->
<!-- ">-->
<!-- <span>还没有账号</span>-->
<!-- <a href="http://www.bootstrapmb.com/" target="_blank" class="-->
<!-- text-indigo-400-->
<!-- hover:text-blue-500-->
<!-- no-underline-->
<!-- hover:underline-->
<!-- cursor-pointer-->
<!-- transition-->
<!-- ease-in-->
<!-- duration-300-->
<!-- ">立即注册</a>-->
<!-- </p>-->
</div>
</div>
</div>
</div>
</div>
</div>
</template>
<script>
import { validUsername } from '@/utils/validate'
import {error, isEmpty, isNotEmpty} from "@/utils/index"
let timer;
export default {
name: 'Login',
data() {
const validatePassword = (rule, value, callback) => {
if (value.length < 6) {
callback(new Error('The password can not be less than 6 digits'))
} else {
callback()
}
}
return {
loginLogo: '',
loginForm: {
username: 'demo',
password: '111111'
},
input4:'',
loginRules: {
username: [{ required: true, trigger: 'blur' , message: '请输入必填项'}],
password: [{ required: true, trigger: 'blur', validator: validatePassword, message: '请输入必填项' }]
},
loading: false,
passwordType: 'password',
redirect: undefined,
logoShow:false
}
},
watch: {
$route: {
handler: function(route) {
this.redirect = route.query && route.query.redirect
},
immediate: true
}
},
mounted() {
this.loginLogo = require('@/assets/' + process.env.VUE_APP_SYSTEM_LOGO)
},
methods: {
showPwd() {
if (this.passwordType === 'password') {
this.passwordType = ''
} else {
this.passwordType = 'password'
}
this.$nextTick(() => {
this.$refs.password.focus()
})
},
handleLogin() {
console.log('提交')
if(isNotEmpty(this.loginForm.username)&&isNotEmpty(this.loginForm.password)){
// this.loading = true
this.$store.dispatch('user/login', this.loginForm).then(() => {
// this.logoShow = true
// timer = setTimeout(()=>{
this.$router.push({ path: this.redirect || '/' })
// this.loading = false
// clearTimeout(timer);
// timer = setTimeout(()=>{
// this.logoShow = false
// clearTimeout(timer);
// },500)
// },3000)
}).catch(() => {
this.loading = false
})
} else {
error('请完善登陆信息!')
return false
}
}
}
}
</script>
<style scoped src="@/styles/login/tailwind.min.css"/>
<style scoped src="@/styles/login/style.css"/>

View File

@@ -1,109 +1,331 @@
<template>
<div class="login">
<div class="container-login100">
<div class="wrap-login100">
<div class="login100-pic js-tilt" data-tilt>
<img src="@/styles/login/img/img-01.png" alt="IMG">
<div style="text-align: center;font-weight: bold;margin-top: 30px;font-family: Poppins-Bold;font-size: 20px;">DD 会员管理系统</div>
<div>
<div class="relative min-h-screen flex">
<div class="
flex flex-col
sm:flex-row
items-center
md:items-start
sm:justify-center
md:justify-start
flex-auto
min-w-0
bg-white
">
<div class="
sm:w-1/2
xl:w-3/5
h-full
hidden
md:flex
flex-auto
items-center
justify-center
p-10
overflow-hidden
bg-purple-900
text-white
bg-no-repeat bg-cover
relative
" style="background-image: url(img/img.jpg)">
<div class="
absolute
bg-gradient-to-b
from-indigo-600
to-blue-500
opacity-75
inset-0
z-0
"></div>
<div class="w-full max-w-md z-10">
<div class="sm:text-4xl xl:text-4xl font-bold leading-tight mb-6">门店会员收银系统(开源版)</div>
<div class="sm:text-sm xl:text-md text-gray-200 font-normal">你的门店小助手</div>
</div>
<form class="login100-form validate-form">
<span class="login100-form-title" style="margin-top: 30px;">
用户登陆
</span>
<div class="wrap-input100 validate-input">
<input class="input100" type="text" name="username" v-model="loginForm.username" placeholder="用户名">
<span class="focus-input100"></span>
<span class="symbol-input100">
<i class="fa fa-user" aria-hidden="true"></i>
</span>
<ul class="circles">
<li></li>
<li></li>
<li></li>
<li></li>
<li></li>
<li></li>
<li></li>
<li></li>
<li></li>
<li></li>
</ul>
</div>
<div class="
md:flex md:items-center md:justify-center
w-full
sm:w-auto
md:h-full
w-2/5
xl:w-2/5
p-8
md:p-10
lg:p-14
sm:rounded-lg
md:rounded-none
bg-white
">
<div class="max-w-md w-full mx-auto space-y-8">
<div class="text-center">
<h2 class="mt-6 text-3xl font-bold text-gray-900">欢迎回来</h2>
<!-- <p class="mt-2 text-sm text-gray-500">第三方登录</p>-->
</div>
<!-- <div class="flex flex-row justify-center items-center space-x-3">-->
<!-- <a href="javascript:" class="-->
<!-- w-11-->
<!-- h-11-->
<!-- items-center-->
<!-- justify-center-->
<!-- inline-flex-->
<!-- rounded-2xl-->
<!-- font-bold-->
<!-- text-lg-->
<!-- bg-blue-900-->
<!-- hover:shadow-lg-->
<!-- cursor-pointer-->
<!-- transition-->
<!-- ease-in-->
<!-- duration-300-->
<!-- "><img class="w-4 h-4" src="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZlcnNpb249IjEuMSIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIHhtbG5zOnN2Z2pzPSJodHRwOi8vc3ZnanMuY29tL3N2Z2pzIiB3aWR0aD0iNTEyIiBoZWlnaHQ9IjUxMiIgeD0iMCIgeT0iMCIgdmlld0JveD0iMCAwIDI0IDI0IiBzdHlsZT0iZW5hYmxlLWJhY2tncm91bmQ6bmV3IDAgMCA1MTIgNTEyIiB4bWw6c3BhY2U9InByZXNlcnZlIiBjbGFzcz0iIj48Zz48cGF0aCB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIGQ9Im0xNS45OTcgMy45ODVoMi4xOTF2LTMuODE2Yy0uMzc4LS4wNTItMS42NzgtLjE2OS0zLjE5Mi0uMTY5LTMuMTU5IDAtNS4zMjMgMS45ODctNS4zMjMgNS42Mzl2My4zNjFoLTMuNDg2djQuMjY2aDMuNDg2djEwLjczNGg0LjI3NHYtMTAuNzMzaDMuMzQ1bC41MzEtNC4yNjZoLTMuODc3di0yLjkzOWMuMDAxLTEuMjMzLjMzMy0yLjA3NyAyLjA1MS0yLjA3N3oiIGZpbGw9IiNmZmZmZmYiIGRhdGEtb3JpZ2luYWw9IiMwMDAwMDAiIHN0eWxlPSIiIGNsYXNzPSIiPjwvcGF0aD48L2c+PC9zdmc+"></a>-->
<!-- <a href="javascript:" class="-->
<!-- w-11-->
<!-- h-11-->
<!-- items-center-->
<!-- justify-center-->
<!-- inline-flex-->
<!-- rounded-2xl-->
<!-- font-bold-->
<!-- text-lg text-white-->
<!-- bg-blue-400-->
<!-- hover:shadow-lg-->
<!-- cursor-pointer-->
<!-- transition-->
<!-- ease-in-->
<!-- duration-300-->
<!-- "><img class="w-4 h-4" src="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZlcnNpb249IjEuMSIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIHhtbG5zOnN2Z2pzPSJodHRwOi8vc3ZnanMuY29tL3N2Z2pzIiB3aWR0aD0iNTEyIiBoZWlnaHQ9IjUxMiIgeD0iMCIgeT0iMCIgdmlld0JveD0iMCAwIDY4MS4zMzQ2NCA2ODEiIHN0eWxlPSJlbmFibGUtYmFja2dyb3VuZDpuZXcgMCAwIDUxMiA1MTIiIHhtbDpzcGFjZT0icHJlc2VydmUiPjxnPjxwYXRoIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgZD0ibTIwMC45NjQ4NDQgNTE1LjI5Mjk2OWMyNDEuMDUwNzgxIDAgMzcyLjg3MTA5NC0xOTkuNzAzMTI1IDM3Mi44NzEwOTQtMzcyLjg3MTA5NCAwLTUuNjcxODc1LS4xMTcxODgtMTEuMzIwMzEzLS4zNzEwOTQtMTYuOTM3NSAyNS41ODU5MzctMTguNSA0Ny44MjQyMTgtNDEuNTg1OTM3IDY1LjM3MTA5NC02Ny44NjMyODEtMjMuNDgwNDY5IDEwLjQ0MTQwNi00OC43NTM5MDcgMTcuNDYwOTM3LTc1LjI1NzgxMyAyMC42MzY3MTggMjcuMDU0Njg3LTE2LjIzMDQ2OCA0Ny44MjgxMjUtNDEuODk0NTMxIDU3LjYyNS03Mi40ODgyODEtMjUuMzIwMzEzIDE1LjAxMTcxOS01My4zNjMyODEgMjUuOTE3OTY5LTgzLjIxNDg0NCAzMS44MDg1OTQtMjMuOTE0MDYyLTI1LjQ3MjY1Ni01Ny45NjQ4NDMtNDEuNDAyMzQ0LTk1LjY2NDA2Mi00MS40MDIzNDQtNzIuMzY3MTg4IDAtMTMxLjA1ODU5NCA1OC42ODc1LTEzMS4wNTg1OTQgMTMxLjAzMTI1IDAgMTAuMjg5MDYzIDEuMTUyMzQ0IDIwLjI4OTA2MyAzLjM5ODQzNyAyOS44ODI4MTMtMTA4LjkxNzk2OC01LjQ4MDQ2OS0yMDUuNTAzOTA2LTU3LjYyNS0yNzAuMTMyODEyLTEzNi45MjE4NzUtMTEuMjUgMTkuMzYzMjgxLTE3Ljc0MjE4OCA0MS44NjMyODEtMTcuNzQyMTg4IDY1Ljg3MTA5MyAwIDQ1LjQ2MDkzOCAyMy4xMzY3MTkgODUuNjA1NDY5IDU4LjMxNjQwNyAxMDkuMDgyMDMyLTIxLjUtLjY2MDE1Ni00MS42OTUzMTMtNi41NjI1LTU5LjM1MTU2My0xNi4zODY3MTktLjAxOTUzMS41NTA3ODEtLjAxOTUzMSAxLjA4NTkzNy0uMDE5NTMxIDEuNjcxODc1IDAgNjMuNDY4NzUgNDUuMTcxODc1IDExNi40NjA5MzggMTA1LjE0NDUzMSAxMjguNDY4NzUtMTEuMDE1NjI1IDIuOTk2MDk0LTIyLjYwNTQ2OCA0LjYwOTM3NS0zNC41NTg1OTQgNC42MDkzNzUtOC40Mjk2ODcgMC0xNi42NDg0MzctLjgyODEyNS0yNC42MzI4MTItMi4zNjMyODEgMTYuNjgzNTk0IDUyLjA3MDMxMiA2NS4wNjY0MDYgODkuOTYwOTM3IDEyMi40MjU3ODEgOTEuMDIzNDM3LTQ0Ljg1NTQ2OSAzNS4xNTYyNS0xMDEuMzU5Mzc1IDU2LjA5NzY1Ny0xNjIuNzY5NTMxIDU2LjA5NzY1Ny0xMC41NjI1IDAtMjEuMDAzOTA2LS42MDU0NjktMzEuMjYxNzE4OC0xLjgxNjQwNyA1Ny45OTk5OTk4IDM3LjE3NTc4MSAxMjYuODcxMDkzOCA1OC44NzEwOTQgMjAwLjg4NjcxODggNTguODcxMDk0IiBmaWxsPSIjZmZmZmZmIiBkYXRhLW9yaWdpbmFsPSIjMDAwMDAwIiBzdHlsZT0iIj48L3BhdGg+PC9nPjwvc3ZnPg=="></a>-->
<!-- <a href="javascript:" class="-->
<!-- w-11-->
<!-- h-11-->
<!-- items-center-->
<!-- justify-center-->
<!-- inline-flex-->
<!-- rounded-2xl-->
<!-- font-bold-->
<!-- text-lg text-white-->
<!-- bg-blue-500-->
<!-- hover:shadow-lg-->
<!-- cursor-pointer-->
<!-- transition-->
<!-- ease-in-->
<!-- duration-300-->
<!-- "><img src="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZlcnNpb249IjEuMSIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIHhtbG5zOnN2Z2pzPSJodHRwOi8vc3ZnanMuY29tL3N2Z2pzIiB3aWR0aD0iNTEyIiBoZWlnaHQ9IjUxMiIgeD0iMCIgeT0iMCIgdmlld0JveD0iMCAwIDI0IDI0IiBzdHlsZT0iZW5hYmxlLWJhY2tncm91bmQ6bmV3IDAgMCA1MTIgNTEyIiB4bWw6c3BhY2U9InByZXNlcnZlIj48Zz48cGF0aCB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIGQ9Im0yMy45OTQgMjR2LS4wMDFoLjAwNnYtOC44MDJjMC00LjMwNi0uOTI3LTcuNjIzLTUuOTYxLTcuNjIzLTIuNDIgMC00LjA0NCAxLjMyOC00LjcwNyAyLjU4N2gtLjA3di0yLjE4NWgtNC43NzN2MTYuMDIzaDQuOTd2LTcuOTM0YzAtMi4wODkuMzk2LTQuMTA5IDIuOTgzLTQuMTA5IDIuNTQ5IDAgMi41ODcgMi4zODQgMi41ODcgNC4yNDN2Ny44MDF6IiBmaWxsPSIjZmZmZmZmIiBkYXRhLW9yaWdpbmFsPSIjMDAwMDAwIiBzdHlsZT0iIj48L3BhdGg+PHBhdGggeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiBkPSJtLjM5NiA3Ljk3N2g0Ljk3NnYxNi4wMjNoLTQuOTc2eiIgZmlsbD0iI2ZmZmZmZiIgZGF0YS1vcmlnaW5hbD0iIzAwMDAwMCIgc3R5bGU9IiI+PC9wYXRoPjxwYXRoIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgZD0ibTIuODgyIDBjLTEuNTkxIDAtMi44ODIgMS4yOTEtMi44ODIgMi44ODJzMS4yOTEgMi45MDkgMi44ODIgMi45MDkgMi44ODItMS4zMTggMi44ODItMi45MDljLS4wMDEtMS41OTEtMS4yOTItMi44ODItMi44ODItMi44ODJ6IiBmaWxsPSIjZmZmZmZmIiBkYXRhLW9yaWdpbmFsPSIjMDAwMDAwIiBzdHlsZT0iIj48L3BhdGg+PC9nPjwvc3ZnPg==" class="w-4 h-4"></a>-->
<!-- </div>-->
<!-- <div class="flex items-center justify-center space-x-2">-->
<!-- <span class="h-px w-16 bg-gray-200"></span>-->
<!-- <span class="text-gray-300 font-normal">使用账号密码登录</span>-->
<!-- <span class="h-px w-16 bg-gray-200"></span>-->
<!-- </div>-->
<div class="mt-8 space-y-6" >
<input type="hidden" name="remember" value="true">
<div class="relative">
<label class="ml-3 text-sm font-bold text-gray-700 tracking-wide">门店账号</label>
<input
v-model="loginForm.username"
class="
w-full
text-base
px-4
py-2
border-b border-gray-300
focus:outline-none
rounded-2xl
focus:border-indigo-500
" type="" placeholder="请输入账号">
</div>
<div class="mt-8 content-center">
<label class="ml-3 text-sm font-bold text-gray-700 tracking-wide">密码</label>
<input
v-model="loginForm.password"
class="
w-full
content-center
text-base
px-4
py-2
border-b
rounded-2xl
border-gray-300
focus:outline-none focus:border-indigo-500
" type="password" placeholder="请输入密码">
</div>
<div class="flex items-center justify-between">
<div class="flex items-center">
<input id="remember_me" name="remember_me" type="checkbox" class="
h-4
w-4
bg-blue-500
focus:ring-blue-400
border-gray-300
rounded
">
<label for="remember_me" class="ml-2 block text-sm text-gray-900">记住我</label>
</div>
<div class="wrap-input100 validate-input">
<input class="input100" type="password" name="password" v-model="loginForm.password" placeholder="密码">
<span class="focus-input100"></span>
<span class="symbol-input100">
<i class="fa fa-lock" aria-hidden="true"></i>
</span>
<!-- <div class="text-sm">-->
<!-- <a href="https://v.bootstrapmb.com/2021/8/admh611027/#" class="text-indigo-400 hover:text-blue-500">忘记密码</a>-->
<!-- </div>-->
</div>
<div>
<button
@click="handleLogin"
type="button" class="
w-full
flex
justify-center
bg-gradient-to-r
from-indigo-500
to-blue-600
hover:bg-gradient-to-l
hover:from-blue-500
hover:to-indigo-600
text-gray-100
p-4
rounded-full
tracking-wide
font-semibold
shadow-lg
cursor-pointer
transition
ease-in
duration-500
"> </button>
</div>
<div style="font-weight: 500;font-size: 13px;letter-spacing: 1px;">
<span>门店账号用户名:demo 密码111111</span><br/><br/>
<span>管理端账号用户名:admin 密码111111</span><br/><br/>
<span>商业合作qq: 7827869402 vx: MAMBA_4EVER24</span><br/><br/>
<span> <a target="_blank" style="text-decoration: underline;" href="http://8.146.211.120:8086/"> 完整版演示 http://8.146.211.120:8086/</a></span><br/><br/>
<span> <a target="_blank" style="text-decoration: underline;" href="http://8.146.211.120:8087/"> 移动端登陆 http://8.146.211.120:8087/</a></span>
</div>
<!-- <p class="-->
<!-- items-center-->
<!-- justify-center-->
<!-- mt-10-->
<!-- text-center text-md text-gray-500-->
<!-- ">-->
<!-- <span>还没有账号</span>-->
<!-- <a href="http://www.bootstrapmb.com/" target="_blank" class="-->
<!-- text-indigo-400-->
<!-- hover:text-blue-500-->
<!-- no-underline-->
<!-- hover:underline-->
<!-- cursor-pointer-->
<!-- transition-->
<!-- ease-in-->
<!-- duration-300-->
<!-- ">立即注册</a>-->
<!-- </p>-->
</div>
测试账号 demo 111111<br/>
qq: 727869402<br/>
vx: MAMBA_4EVER24
<div class="container-login100-form-btn">
<button type="button" class="login100-form-btn" @click="handleLogin">
登陆
</button>
</div>
<div class="text-center p-t-12">
<!-- <a class="txt2" href="javascript:">-->
<!-- 忘记密码-->
<!-- </a>-->
</div>
<div class="text-center p-t-136">
<!-- <a class="txt2" href="#">-->
<!-- 还没有账号立即注册-->
<!-- <i class="fa fa-long-arrow-right m-l-5" aria-hidden="true"></i>-->
<!-- </a>-->
</div>
</form>
<div style="margin: 0 auto;"> <a href="https://beian.miit.gov.cn" style="color: #57b846;">豫ICP备2023016213号</a></div>
</div>
</div>
</div>
</div>
</div>
</template>
<script>
import {validUsername} from "@/utils/validate";
import {error, isEmpty, isNotEmpty} from "@/utils/index"
export default {
name: "login",
data() {
return {
loginForm: {
username: 'demo',
password: '111111'
},
redirect: undefined
}
},
watch: {
$route: {
handler: function(route) {
this.redirect = route.query && route.query.redirect
},
immediate: true
}
},
methods: {
handleLogin() {
if(isNotEmpty(this.loginForm.username)&&isNotEmpty(this.loginForm.password)){
this.loading = true
this.$store.dispatch('user/login', this.loginForm).then(() => {
this.$router.push({ path: this.redirect || '/' })
this.loading = false
}).catch(() => {
this.loading = false
})
}else{
error('请完善登陆信息!')
}
}
}
import { validUsername } from '@/utils/validate'
import {error, isEmpty, isNotEmpty} from "@/utils/index"
let timer;
export default {
name: 'Login',
data() {
const validatePassword = (rule, value, callback) => {
if (value.length < 6) {
callback(new Error('The password can not be less than 6 digits'))
} else {
callback()
}
}
return {
loginLogo: '',
loginForm: {
username: 'admin',
password: '111111'
},
input4:'',
loginRules: {
username: [{ required: true, trigger: 'blur' , message: '请输入必填项'}],
password: [{ required: true, trigger: 'blur', validator: validatePassword, message: '请输入必填项' }]
},
loading: false,
passwordType: 'password',
redirect: undefined,
logoShow:false
}
},
watch: {
$route: {
handler: function(route) {
this.redirect = route.query && route.query.redirect
},
immediate: true
}
},
mounted() {
this.loginLogo = require('@/assets/' + process.env.VUE_APP_SYSTEM_LOGO)
},
methods: {
showPwd() {
if (this.passwordType === 'password') {
this.passwordType = ''
} else {
this.passwordType = 'password'
}
this.$nextTick(() => {
this.$refs.password.focus()
})
},
handleLogin() {
console.log('提交')
if(isNotEmpty(this.loginForm.username)&&isNotEmpty(this.loginForm.password)){
// this.loading = true
this.$store.dispatch('user/login', this.loginForm).then(() => {
// this.logoShow = true
// timer = setTimeout(()=>{
this.$router.push({ path: this.redirect || '/' })
// this.loading = false
// clearTimeout(timer);
// timer = setTimeout(()=>{
// this.logoShow = false
// clearTimeout(timer);
// },500)
// },3000)
}).catch(() => {
this.loading = false
})
} else {
error('请完善登陆信息!')
return false
}
}
}
}
</script>
<style scoped src="@/styles/login/tailwind.min.css"/>
<style scoped src="@/styles/login/style.css"/>
<style scoped src="@/styles/login/css/font-awesome.min.css"/>
<style scoped src="@/styles/login/css/main.css"/>
<style scoped src="@/styles/login/css/util.css"/>
<style scoped>
</style>