cmy vor 1 Jahr
Ursprung
Commit
52c2a5c11a

+ 54 - 0
src/api/shareholder.js

@@ -0,0 +1,54 @@
+import request from '@/plugins/request';
+
+/**
+ * @description 分配股权
+ * @param {Object} param data {Object} 
+ * uid:用户id 
+ * initial_share原始股 
+ * bonus_share分红股 
+ * initial_status 1增加2减少
+ * bonus_status 分红股1增加 2减少
+ */
+export function updateShareholdingRecord (data) {
+    return request({
+        url: 'stockRights/updateShareholdingRecord',
+        method: 'post',
+        data
+    });
+}
+/**
+ * @description 股东列表
+ * @param {Object} param data {Object} uid:用户id
+ */
+// export function updateShareholdingRecord (data) {
+//     return request({
+//         url: 'stockRights/updateShareholdingRecord',
+//         method: 'get',
+//         params: data
+//     });
+// }
+
+/**
+ * @description 添加股东
+ * @param {Object} param data {Object} uid:用户id
+ */
+export function addShareholder (data) {
+    return request({
+        url: 'stockRights/addShareholder',
+        method: 'post',
+         data
+    });
+}
+
+/**
+ * @description 删除股东
+ * @param {Object} param data {Object} 传值参数 type类型
+ */
+export function deleteShareholder (data) {
+    return request({
+        url: 'stockRights/deleteShareholder',
+        method: 'post',
+        data
+    });
+}
+

+ 1 - 0
src/components/goodsList/index.vue

@@ -266,6 +266,7 @@ export default {
               "on-change": () => {
                 self.currentid = id;
                 this.productRow = params.row;
+				console.log(this.productRow,'this.productRow');
                 this.$emit("getProductId", this.productRow);
                 if (this.productRow.id) {
                   if (this.$route.query.fodder === "image") {

+ 44 - 115
src/pages/marketing/serveItem/create.vue

@@ -16,30 +16,30 @@
 		<Card :bordered="false" dis-hover class="ivu-mt">
 			<Form :model="formData" :label-width="150">
 				<FormItem label="选择对应服务项目:" required>
-				    <div class="picBox" @click="changeGoods()">
+					<div class="picBox" @click="changeGoods()">
 						<Button type="primary" v-if="!formData.store_name">选择商品</Button>
-				        <div class="" v-if="formData.store_name">
+						<div class="" v-if="formData.store_name">
 							{{formData.store_name}}
-				        </div>
+						</div>
 						<Button type="primary" v-if="formData.store_name">
 							切换商品
 						</Button>
-				    </div>
+					</div>
 				</FormItem>
 				<FormItem label="价格" v-if="formData.price">
-					<Input  v-model="formData.price" v-width="320" disabled ></Input>
+					<Input v-model="formData.price" v-width="320" disabled></Input>
 				</FormItem>
 				<FormItem label="前端显示:">
-				  <RadioGroup v-model="formData.is_display" >
-				    <Radio :label="1">
-				      <Icon type="social-apple"></Icon>
-				      <span>显示</span>
-				    </Radio>
-				    <Radio :label="0">
-				      <Icon type="social-android"></Icon>
-				      <span>隐藏</span>
-				    </Radio>
-				  </RadioGroup>
+					<RadioGroup v-model="formData.is_display">
+						<Radio :label="1">
+							<Icon type="social-apple"></Icon>
+							<span>显示</span>
+						</Radio>
+						<Radio :label="0">
+							<Icon type="social-android"></Icon>
+							<span>隐藏</span>
+						</Radio>
+					</RadioGroup>
 				</FormItem>
 				<!-- <FormItem label="库存" v-if="formData.repertory">
 					<Input  v-model="formData.repertory" v-width="320" disabled></Input>
@@ -58,14 +58,16 @@
 				</FormItem> -->
 			</Form>
 			<div style="width: 500px; display: flex;justify-content: center;">
-				<Button  type="primary" class="submission" @click="save" :disabled="disabled" v-if="!formData.id">立即创建</Button>
-				<Button  type="primary" class="submission" @click="save" :disabled="disabled" v-else>立即修改</Button>
+				<Button type="primary" class="submission" @click="save" :disabled="disabled"
+					v-if="!formData.id">立即创建</Button>
+				<Button type="primary" class="submission" @click="save" :disabled="disabled" v-else>立即修改</Button>
 			</div>
 		</Card>
 		<!-- 选择商品-->
 		<Modal v-model="modals" title="商品列表" footerHide class="paymentFooter" scrollable width="900"
-		    @on-cancel="cancel">
-		    <goods-list ref="goodslist" :goodsType="1" v-if="modals" @getProductId="getProductId" :serviceProject="1"></goods-list>
+			@on-cancel="cancel">
+			<goods-list ref="goodslist" :goodsType="1" v-if="modals" @getProductId="getProductId"
+				:serviceProject="1"></goods-list>
 		</Modal>
 	</div>
 </template>
@@ -74,27 +76,16 @@
 	import {
 		mapState
 	} from "vuex";
-	import storeList from "@/components/storeList";
 	import goodsList from "@/components/goodsList/index";
 	import {
-		couponCategoryApi,
-		couponSaveApi,
-		couponDetailApi,
-		VipEditApi,
-		serveAddApi,
 		serveReadApi,
 		createServeProduct
 	} from "@/api/marketing";
-	import {
-		brandList
-	} from "@/api/product";
-	// import { formatDate } from '@/utils/validate';
 	import Setting from "@/setting";
 	export default {
 		name: "storeCouponCreate",
 		components: {
 			goodsList,
-			storeList
 		},
 		data() {
 			return {
@@ -125,9 +116,6 @@
 				currentTab: '1',
 			};
 		},
-		computed: {
-			...mapState("admin/layout", ["isMobile", "menuCollapse"]),
-		},
 		created() {
 			if (this.$route.query.id) {
 				let query = this.$route.query
@@ -139,48 +127,40 @@
 				this.formData.craft_price = query.craft_price;
 				this.formData.sales_commissions = query.sales_commissions
 				this.formData.superior_commission = query.superior_commission
-				this.formData.is_display = query.is_display*1
+				this.formData.is_display = query.is_display * 1
 			}
 		},
 		methods: {
 			// 商品id
 			getProductId(row) {
-				console.log(row,'这个');
-			    this.modal_loading = false;
-			    this.modals = false;
-			    setTimeout(() => {
-					this.formData.product_id = row.id
-						this.formData.store_name = row.store_name
-						this.formData.product_id = row.id
-						this.formData.card_price = row.price
-						this.formData.unit_name = row.unit_name
-						this.formData.slider_image = row.image
-						this.formData.price = row.price
-						// this.formData.slider_image = row.slider_image
-						// this.formData.is_show = 1
-						this.formData.repertory = row.stock
-					// this.formData.image = row.image
-			    }, 500);
+				console.log(row, '这个触发');
+				this.modal_loading = false;
+				this.modals = false;
+				// setTimeout(() => {
+				this.formData.product_id = row.id
+				this.formData.store_name = row.store_name
+				this.formData.product_id = row.id
+				this.formData.card_price = row.price
+				this.formData.unit_name = row.unit_name
+				this.formData.slider_image = row.image
+				this.formData.price = row.price
+				// this.formData.slider_image = row.slider_image
+				// this.formData.is_show = 1
+				this.formData.repertory = row.stock
+				// this.formData.image = row.image
+				// }, 500);
 			},
 			// 选择商品
 			changeGoods() {
-			    this.modals = true;
-			},
-			downTab() {
-				// if (!this.formData.store_name) {
-				// 	return this.$Message.error("请输入服务卡名称");
-				// }
-				// if (!this.formData.card_price) {
-				// 	return this.$Message.error("请输入售价");
-				// }
-				// if (!this.formData.repertory) {
-				// 	return this.$Message.error("请输入库存");
-				// }
+				this.modals = true;
 			},
 			// 创建
 			save() {
-				this.downTab();
-				console.log('这');
+				console.log(this.formData,'这');
+				if (!this.formData.product_id) {
+					this.$Message.error("请先选择商品");
+					return
+				}
 				createServeProduct(this.formData.id, this.formData)
 					.then((res) => {
 						this.disabled = true;
@@ -195,61 +175,10 @@
 						this.$Message.error(err.msg);
 					});
 			},
-			// 使用有效期--时间段
-			dateChange(time) {
-				this.formData.start_use_time = time[0];
-				this.formData.end_use_time = time[1];
-			},
 			// 限时
-			timeChange(time) {
-				this.formData.start_time = time[0];
-				this.formData.end_time = time[1];
-			},
-			//对象数组去重;
-			unique(arr) {
-				const res = new Map();
-				return arr.filter(
-					(arr) => !res.has(arr.product_id) && res.set(arr.product_id, 1)
-				);
-			},
 			cancel() {
 				this.modals = false;
 			},
-			// 删除商品
-			remove(productId) {
-				for (let index = 0; index < this.productList.length; index++) {
-					if (this.productList[index].product_id == productId) {
-						this.productList.splice(index, 1);
-					}
-				}
-				this.formData.product_id = "";
-				this.productList.forEach((value) => {
-					if (this.formData.product_id) {
-						this.formData.product_id += `,${value.product_id}`;
-					} else {
-						this.formData.product_id += `${value.product_id}`;
-					}
-				});
-			},
-			// 获取详情
-			getDetail() {
-				serveReadApi(this.id).then(res => {
-					console.log(res);
-					let row = res.data.info.storeInfo
-					this.formData = {
-						id: row.id,
-						product_id: row.id,
-						store_name: row.store_name,
-						card_price: row.card_price,
-						explain: row.explain,
-						unit_name: row.unit_name,
-						image: row.image,
-						images: row.slider_image,
-						repertory: row.repertory,
-						is_show: 1
-					}
-				})
-			}
 		},
 	};
 </script>

+ 5 - 2
src/pages/order/serveList/index.vue

@@ -52,8 +52,11 @@
 							<img v-lazy="val.slider_image" />
 						</div>
 						<div class="tabBox_content">
-						<div class="tabBox_tit">{{ val.store_name }}</div>
-						<div class="tabBox_pice">{{'¥' + val.pay_price}}</div>
+							<div class="tabBox_tit">{{ val.store_name }}</div>
+							<div class="tabBox_pice">{{'¥' + val.pay_price}}</div>
+						</div>
+						<div class="tabBox_serve" v-if="val.project_user_id">
+							服务卡
 						</div>
 					</div>
 				</template>

+ 15 - 7
src/pages/store/department/create.vue

@@ -21,13 +21,13 @@
 				<FormItem label="部门名称(英文)" required>
 					<Input v-model="formData.name_en" v-width="320" placeholder="请输入部门名称"></Input>
 				</FormItem>
-				<FormItem label="上级部门">
-					<el-cascader placeholder="请选择上级部门" :options="departmentList" :value="formData.parentid"
+				<FormItem label="上级部门" v-if="departmentList.length>0">
+					<el-cascader placeholder="请选择上级部门" :options="departmentList" :value="formData.parentid||0"
 						v-width="320" :props="{ checkStrictly: true,value: 'department_id',label: 'name' }"
 						clearable @change="changeBm"></el-cascader>
 				</FormItem>
-				<FormItem label="部门领导">
-					<el-cascader placeholder="请选择部门领导" :options="staffList" :value="formData.department_leader"
+				<FormItem label="部门领导" v-if="staffList.length>0">
+					<el-cascader placeholder="请选择部门领导" :options="staffList" :value="formData.department_leader||0"
 						v-width="320" :props="{ checkStrictly: true,value: 'id',label: 'name' }"
 						clearable @change="changeLeader"></el-cascader>
 				</FormItem>
@@ -130,7 +130,7 @@
 		},
 		methods: {
 			changeBm(res) {
-				console.log(res);
+				console.log(res,'res');
 				this.formData.parentid = res[res.length -1 ]
 			},
 			changeLeader(res) {
@@ -141,7 +141,11 @@
 			getDepartmentList() {
 				getDepartmentList().then(res => {
 					console.log(res);
-					this.departmentList = res.data
+					this.departmentList = res.data.map((res)=>{
+						res.department_id = res.department_id+'';
+						return res
+						
+					})
 				})
 			},
 			getStaffList() {
@@ -149,7 +153,11 @@
 					page: 1,
 					limit: 1000
 				}).then(res => {
-					this.staffList = res.data.list
+					this.staffList = res.data.list.map((res)=>{
+						res.id = res.id+'';
+						return res
+						
+					})
 				})
 			},
 			downTab() {

+ 4 - 4
src/pages/user/list/handle/userDetails.vue

@@ -60,7 +60,7 @@
 						</template>
 						<template slot-scope="{ row }" slot="card_name">
 							<div>
-								<div class="title">{{ row.card_name }}</div>
+								<div class="title">{{ row.card_name }}(ID:{{ row.servicecard.id}})</div>
 								<div class="title" v-if="row.order">价格:{{ row.order.pay_price }}</div>
 								<div class="title" v-if="row.servicecard">折扣:{{ row.servicecard
 								.discount }}%</div>
@@ -495,9 +495,9 @@
 							case 'service_card':
 								this.columns = [
 									// {
-									//     title: '动作',
-									//     key: 'title',
-									//     minWidth: 120
+									//     title: 'ID',
+									//     key: 'id',
+									//     minWidth: 20
 									// },
 									{
 										title: '服务卡',

+ 293 - 0
src/pages/user/shareholder/bonus.vue

@@ -0,0 +1,293 @@
+<template>
+<!-- 用户-会员管理-等级列表 -->
+    <div>
+       <Card :bordered="false" dis-hover class="ivu-mt" :padding="0">
+            <div class="new_card_pd">
+                <!-- 筛选条件 -->
+                 <Form ref="levelFrom" :model="levelFrom" inline :label-width="labelWidth" :label-position="labelPosition" @submit.native.prevent>
+                    <FormItem label="状态:"  label-for="status1">
+                        <Select v-model="levelFrom.is_show" placeholder="请选择" clearable element-id="status1" style="width:250px;">
+                            <Option value="1">显示</Option>
+                            <Option value="0">不显示</Option>
+                        </Select>
+                    </FormItem>
+                    <FormItem label="等级名称:"  label-for="title">
+                        <Input  v-model="levelFrom.title"  placeholder="请输入等级名称" style="width:250px;margin-right:14px;"/>
+                        <Button type="primary" @click="userSearchs">查询</Button>
+                    </FormItem>
+                </Form>
+            </div>
+        </Card>
+        <Card :bordered="false" dis-hover class="ivu-mt">
+            <!-- 相关操作 -->
+            <Button v-auth="['admin-user-level_add']" type="primary" @click="add">添加会员等级</Button>
+            <!-- 等级列表表格 -->
+            <Table :columns="columns1" :data="levelLists" ref="table" class="mt25"
+                   :loading="loading" highlight-row
+                   no-userFrom-text="暂无数据"
+                   no-filtered-userFrom-text="暂无筛选结果">
+                <template slot-scope="{ row, index }" slot="icons">
+                    <viewer>
+                        <div class="tabBox_img">
+                            <img v-lazy="row.icon">
+                        </div>
+                    </viewer>
+                </template>
+                <template slot-scope="{ row, index }" slot="is_forevers">
+                    <i-switch v-model="row.is_forever" :value="row.is_forever" :true-value="1" :false-value="0" :disabled="true" size="large">
+                        <span slot="open">永久</span>
+                        <span slot="close">非永久</span>
+                    </i-switch>
+                </template>
+                <template slot-scope="{ row, index }" slot="is_pays">
+                    <i-switch v-model="row.is_pay" :value="row.is_pay" :true-value="1" :false-value="0"  :disabled="true" size="large">
+                        <span slot="open">付费</span>
+                        <span slot="close">免费</span>
+                    </i-switch>
+                </template>
+                <template slot-scope="{ row, index }" slot="is_shows">
+                    <i-switch v-model="row.is_show" :value="row.is_show" :true-value="1" :false-value="0" @on-change="onchangeIsShow(row)" size="large">
+                        <span slot="open">显示</span>
+                        <span slot="close">隐藏</span>
+                    </i-switch>
+                </template>
+                <template slot-scope="{ row, index }" slot="action">
+                    <a @click="edit(row)">编辑</a>
+                    <Divider type="vertical" />
+                    <a @click="changeMenu(row,2,index)">删除</a>
+<!--                    <template>-->
+<!--                        <Dropdown @on-click="changeMenu(row,$event,index)">-->
+<!--                            <a href="javascript:void(0)">-->
+<!--                                更多-->
+<!--                                <Icon type="ios-arrow-down"></Icon>-->
+<!--                            </a>-->
+<!--                            <DropdownMenu slot="list">-->
+<!--&lt;!&ndash;                                <DropdownItem name="1">等级任务</DropdownItem>&ndash;&gt;-->
+<!--                                <DropdownItem name="2">删除等级</DropdownItem>-->
+<!--                            </DropdownMenu>-->
+<!--                        </Dropdown>-->
+<!--                    </template>-->
+                </template>
+            </Table>
+            <div class="acea-row row-right page">
+                <Page :total="total" :current="levelFrom.page" show-elevator show-total @on-change="pageChange"
+                      :page-size="levelFrom.limit"/>
+            </div>
+        </Card>
+        <!-- 等级任务-->
+        <task-list ref="tasks"></task-list>
+    </div>
+</template>
+<script>
+    import { mapState, mapMutations } from 'vuex';
+    import { levelListApi, setShowApi, createApi } from '@/api/user';
+    import editFrom from '@/components/from/from';
+    export default {
+        name: 'user_level',
+        components: { editFrom },
+        data () {
+            return {
+                grid: {
+                    xl: 7,
+                    lg: 7,
+                    md: 12,
+                    sm: 24,
+                    xs: 24
+                },
+                loading: false,
+                columns1: [
+                    {
+                        title: 'ID',
+                        key: 'id',
+                        width: 80
+                    },
+                    {
+                        title: '等级图标',
+                        slot: 'icons',
+                        minWidth: 100
+                    },
+                    {
+                        title: '等级名称',
+                        key: 'name',
+                        minWidth: 120
+                    },
+                    {
+                        title: '等级',
+                        key: 'grade',
+                        minWidth: 100
+                    },
+                    {
+                        title: '享受折扣(%)',
+                        key: 'discount',
+                        minWidth: 100
+                    },
+                    // {
+                    //     title: '有效时间',
+                    //     key: 'valid_date',
+                    //     minWidth: 120
+                    // },
+                    // {
+                    //     title: '是否永久',
+                    //     slot: 'is_forevers',
+                    //     minWidth: 130
+                    // },
+                    // {
+                    //     title: '是否付费',
+                    //     slot: 'is_pays',
+                    //     minWidth: 120
+                    // },
+                    {
+                        title: '是否显示',
+                        slot: 'is_shows',
+                        minWidth: 120
+                    },
+                    {
+                        title: '等级说明',
+                        key: 'explain',
+                        minWidth: 120
+                    },
+                    {
+                        title: '操作',
+                        slot: 'action',
+                        fixed: 'right',
+                        minWidth: 120
+                    }
+                ],
+                levelFrom: {
+                    is_show: '',
+                    title: '',
+                    page: 1,
+                    limit: 10
+                },
+                levelLists: [],
+                total: 0,
+                FromData: null,
+                imgName: '',
+                visible: false,
+                levelId: 0,
+                modalTitleSs: '',
+                titleType: 'level',
+                modelTask: false,
+                num: 0
+            }
+        },
+        created () {
+            this.getList();
+        },
+        computed: {
+            ...mapState('admin/layout', [
+                'isMobile'
+            ]),
+            labelWidth () {
+                return this.isMobile ? undefined : 96;
+            },
+            labelPosition () {
+                return this.isMobile ? 'top' : 'right';
+            }
+        },
+        methods: {
+            ...mapMutations('admin/userLevel', [
+                'getlevelId'
+            ]),
+            // 操作
+            changeMenu (row, name, num) {
+                this.levelId = row.id;
+                switch (name) {
+                case '1':
+                    this.getlevelId(this.levelId);
+                    this.$refs.tasks.modals = true;
+                    this.$refs.tasks.getList();
+                    break;
+                default:
+                    this.del(row, '删除等级', num);
+                }
+            },
+            // 删除
+            del (row, tit, num) {
+                let delfromData = {
+                    title: tit,
+                    num: num,
+                    url: `user/user_level/delete/${row.id}`,
+                    method: 'put',
+                    ids: ''
+                }
+                this.$modalSure(delfromData).then((res) => {
+                    this.$Message.success(res.msg);
+                    this.levelLists.splice(num, 1);
+                    if (!this.levelLists.length) {
+                      this.levelFrom.page =
+                          this.levelFrom.page == 1 ? 1 : this.levelFrom.page - 1;
+                    }
+                    this.getList();
+                }).catch(res => {
+                    this.$Message.error(res.msg);
+                });
+            },
+            // 删除成功
+            // submitModel () {
+            //     this.levelLists.splice(this.delfromData.num, 1)
+            // },
+            // 修改是否显示
+            onchangeIsShow (row) {
+                let data = {
+                    id: row.id,
+                    is_show: row.is_show
+                }
+                setShowApi(data).then(async res => {
+                    this.$Message.success(res.msg);
+                }).catch(res => {
+                    this.$Message.error(res.msg);
+                })
+            },
+            // 等级列表
+            getList () {
+                this.loading = true;
+                this.levelFrom.is_show = this.levelFrom.is_show || '';
+                levelListApi(this.levelFrom).then(async res => {
+                    let data = res.data
+                    this.levelLists = data.list;
+                    this.total = res.data.count;
+                    this.loading = false;
+                }).catch(res => {
+                    this.loading = false;
+                    this.$Message.error(res.msg);
+                })
+            },
+            pageChange (index) {
+                this.levelFrom.page = index;
+                this.getList();
+            },
+            // 添加
+            add () {
+                this.levelId = 0;
+                this.$modalForm(createApi({ id: this.levelId })).then(() => this.getList());
+            },
+            // 编辑
+            edit (row) {
+                this.levelId = row.id;
+                this.$modalForm(createApi({ id: this.levelId })).then(() => this.getList());
+                this.getlevelId(this.levelId);
+            },
+            // 表格搜索
+            userSearchs () {
+                this.levelFrom.page = 1;
+                this.getList();
+            },
+            // 修改成功
+            submitFail () {
+                this.getList();
+            }
+        }
+    }
+</script>
+
+<style scoped lang="stylus">
+    .tabBox_img
+        width 36px
+        height 36px
+        border-radius:4px
+        cursor pointer
+        img
+            width 100%
+            height 100%
+</style>

+ 293 - 0
src/pages/user/shareholder/history.vue

@@ -0,0 +1,293 @@
+<template>
+<!-- 用户-会员管理-等级列表 -->
+    <div>
+       <Card :bordered="false" dis-hover class="ivu-mt" :padding="0">
+            <div class="new_card_pd">
+                <!-- 筛选条件 -->
+                 <Form ref="levelFrom" :model="levelFrom" inline :label-width="labelWidth" :label-position="labelPosition" @submit.native.prevent>
+                    <FormItem label="状态:"  label-for="status1">
+                        <Select v-model="levelFrom.is_show" placeholder="请选择" clearable element-id="status1" style="width:250px;">
+                            <Option value="1">显示</Option>
+                            <Option value="0">不显示</Option>
+                        </Select>
+                    </FormItem>
+                    <FormItem label="等级名称:"  label-for="title">
+                        <Input  v-model="levelFrom.title"  placeholder="请输入等级名称" style="width:250px;margin-right:14px;"/>
+                        <Button type="primary" @click="userSearchs">查询</Button>
+                    </FormItem>
+                </Form>
+            </div>
+        </Card>
+        <Card :bordered="false" dis-hover class="ivu-mt">
+            <!-- 相关操作 -->
+            <Button v-auth="['admin-user-level_add']" type="primary" @click="add">添加会员等级</Button>
+            <!-- 等级列表表格 -->
+            <Table :columns="columns1" :data="levelLists" ref="table" class="mt25"
+                   :loading="loading" highlight-row
+                   no-userFrom-text="暂无数据"
+                   no-filtered-userFrom-text="暂无筛选结果">
+                <template slot-scope="{ row, index }" slot="icons">
+                    <viewer>
+                        <div class="tabBox_img">
+                            <img v-lazy="row.icon">
+                        </div>
+                    </viewer>
+                </template>
+                <template slot-scope="{ row, index }" slot="is_forevers">
+                    <i-switch v-model="row.is_forever" :value="row.is_forever" :true-value="1" :false-value="0" :disabled="true" size="large">
+                        <span slot="open">永久</span>
+                        <span slot="close">非永久</span>
+                    </i-switch>
+                </template>
+                <template slot-scope="{ row, index }" slot="is_pays">
+                    <i-switch v-model="row.is_pay" :value="row.is_pay" :true-value="1" :false-value="0"  :disabled="true" size="large">
+                        <span slot="open">付费</span>
+                        <span slot="close">免费</span>
+                    </i-switch>
+                </template>
+                <template slot-scope="{ row, index }" slot="is_shows">
+                    <i-switch v-model="row.is_show" :value="row.is_show" :true-value="1" :false-value="0" @on-change="onchangeIsShow(row)" size="large">
+                        <span slot="open">显示</span>
+                        <span slot="close">隐藏</span>
+                    </i-switch>
+                </template>
+                <template slot-scope="{ row, index }" slot="action">
+                    <a @click="edit(row)">编辑</a>
+                    <Divider type="vertical" />
+                    <a @click="changeMenu(row,2,index)">删除</a>
+<!--                    <template>-->
+<!--                        <Dropdown @on-click="changeMenu(row,$event,index)">-->
+<!--                            <a href="javascript:void(0)">-->
+<!--                                更多-->
+<!--                                <Icon type="ios-arrow-down"></Icon>-->
+<!--                            </a>-->
+<!--                            <DropdownMenu slot="list">-->
+<!--&lt;!&ndash;                                <DropdownItem name="1">等级任务</DropdownItem>&ndash;&gt;-->
+<!--                                <DropdownItem name="2">删除等级</DropdownItem>-->
+<!--                            </DropdownMenu>-->
+<!--                        </Dropdown>-->
+<!--                    </template>-->
+                </template>
+            </Table>
+            <div class="acea-row row-right page">
+                <Page :total="total" :current="levelFrom.page" show-elevator show-total @on-change="pageChange"
+                      :page-size="levelFrom.limit"/>
+            </div>
+        </Card>
+        <!-- 等级任务-->
+        <task-list ref="tasks"></task-list>
+    </div>
+</template>
+<script>
+    import { mapState, mapMutations } from 'vuex';
+    import { levelListApi, setShowApi, createApi } from '@/api/user';
+    import editFrom from '@/components/from/from';
+    export default {
+        name: 'user_level',
+        components: { editFrom },
+        data () {
+            return {
+                grid: {
+                    xl: 7,
+                    lg: 7,
+                    md: 12,
+                    sm: 24,
+                    xs: 24
+                },
+                loading: false,
+                columns1: [
+                    {
+                        title: 'ID',
+                        key: 'id',
+                        width: 80
+                    },
+                    {
+                        title: '等级图标',
+                        slot: 'icons',
+                        minWidth: 100
+                    },
+                    {
+                        title: '等级名称',
+                        key: 'name',
+                        minWidth: 120
+                    },
+                    {
+                        title: '等级',
+                        key: 'grade',
+                        minWidth: 100
+                    },
+                    {
+                        title: '享受折扣(%)',
+                        key: 'discount',
+                        minWidth: 100
+                    },
+                    // {
+                    //     title: '有效时间',
+                    //     key: 'valid_date',
+                    //     minWidth: 120
+                    // },
+                    // {
+                    //     title: '是否永久',
+                    //     slot: 'is_forevers',
+                    //     minWidth: 130
+                    // },
+                    // {
+                    //     title: '是否付费',
+                    //     slot: 'is_pays',
+                    //     minWidth: 120
+                    // },
+                    {
+                        title: '是否显示',
+                        slot: 'is_shows',
+                        minWidth: 120
+                    },
+                    {
+                        title: '等级说明',
+                        key: 'explain',
+                        minWidth: 120
+                    },
+                    {
+                        title: '操作',
+                        slot: 'action',
+                        fixed: 'right',
+                        minWidth: 120
+                    }
+                ],
+                levelFrom: {
+                    is_show: '',
+                    title: '',
+                    page: 1,
+                    limit: 10
+                },
+                levelLists: [],
+                total: 0,
+                FromData: null,
+                imgName: '',
+                visible: false,
+                levelId: 0,
+                modalTitleSs: '',
+                titleType: 'level',
+                modelTask: false,
+                num: 0
+            }
+        },
+        created () {
+            this.getList();
+        },
+        computed: {
+            ...mapState('admin/layout', [
+                'isMobile'
+            ]),
+            labelWidth () {
+                return this.isMobile ? undefined : 96;
+            },
+            labelPosition () {
+                return this.isMobile ? 'top' : 'right';
+            }
+        },
+        methods: {
+            ...mapMutations('admin/userLevel', [
+                'getlevelId'
+            ]),
+            // 操作
+            changeMenu (row, name, num) {
+                this.levelId = row.id;
+                switch (name) {
+                case '1':
+                    this.getlevelId(this.levelId);
+                    this.$refs.tasks.modals = true;
+                    this.$refs.tasks.getList();
+                    break;
+                default:
+                    this.del(row, '删除等级', num);
+                }
+            },
+            // 删除
+            del (row, tit, num) {
+                let delfromData = {
+                    title: tit,
+                    num: num,
+                    url: `user/user_level/delete/${row.id}`,
+                    method: 'put',
+                    ids: ''
+                }
+                this.$modalSure(delfromData).then((res) => {
+                    this.$Message.success(res.msg);
+                    this.levelLists.splice(num, 1);
+                    if (!this.levelLists.length) {
+                      this.levelFrom.page =
+                          this.levelFrom.page == 1 ? 1 : this.levelFrom.page - 1;
+                    }
+                    this.getList();
+                }).catch(res => {
+                    this.$Message.error(res.msg);
+                });
+            },
+            // 删除成功
+            // submitModel () {
+            //     this.levelLists.splice(this.delfromData.num, 1)
+            // },
+            // 修改是否显示
+            onchangeIsShow (row) {
+                let data = {
+                    id: row.id,
+                    is_show: row.is_show
+                }
+                setShowApi(data).then(async res => {
+                    this.$Message.success(res.msg);
+                }).catch(res => {
+                    this.$Message.error(res.msg);
+                })
+            },
+            // 等级列表
+            getList () {
+                this.loading = true;
+                this.levelFrom.is_show = this.levelFrom.is_show || '';
+                levelListApi(this.levelFrom).then(async res => {
+                    let data = res.data
+                    this.levelLists = data.list;
+                    this.total = res.data.count;
+                    this.loading = false;
+                }).catch(res => {
+                    this.loading = false;
+                    this.$Message.error(res.msg);
+                })
+            },
+            pageChange (index) {
+                this.levelFrom.page = index;
+                this.getList();
+            },
+            // 添加
+            add () {
+                this.levelId = 0;
+                this.$modalForm(createApi({ id: this.levelId })).then(() => this.getList());
+            },
+            // 编辑
+            edit (row) {
+                this.levelId = row.id;
+                this.$modalForm(createApi({ id: this.levelId })).then(() => this.getList());
+                this.getlevelId(this.levelId);
+            },
+            // 表格搜索
+            userSearchs () {
+                this.levelFrom.page = 1;
+                this.getList();
+            },
+            // 修改成功
+            submitFail () {
+                this.getList();
+            }
+        }
+    }
+</script>
+
+<style scoped lang="stylus">
+    .tabBox_img
+        width 36px
+        height 36px
+        border-radius:4px
+        cursor pointer
+        img
+            width 100%
+            height 100%
+</style>

+ 229 - 0
src/pages/user/shareholder/list.vue

@@ -0,0 +1,229 @@
+<template>
+<!-- 用户-会员管理-等级列表 -->
+    <div>
+        <Card :bordered="false" dis-hover class="ivu-mt">
+            <!-- 相关操作 -->
+            <Button v-auth="['admin-user-level_add']" type="primary" @click="add">添加股东</Button>
+            <!-- 等级列表表格 -->
+            <Table :columns="columns1" :data="levelLists" ref="table" class="mt25"
+                   :loading="loading" highlight-row
+                   no-userFrom-text="暂无数据"
+                   no-filtered-userFrom-text="暂无筛选结果">
+                <template slot-scope="{ row, index }" slot="icons">
+                    <viewer>
+                        <div class="tabBox_img">
+                            <img v-lazy="row.avatar">
+                        </div>
+                    </viewer>
+                </template>
+				
+				<template slot-scope="{ row, index }" slot="name">
+				    <div class="acea-row">
+				      <Icon
+				          type="md-male"
+				          v-show="row.sex === '男'"
+				          color="#2db7f5"
+				          size="15"
+				          class="mr5"
+				      />
+				      <Icon
+				          type="md-female"
+				          v-show="row.sex === '女'"
+				          color="#ed4014"
+				          size="15"
+				          class="mr5"
+				      />
+				      <div v-if="row.delete_time != null" style="color:#ed4014;">{{row.nickname}} (已注销)</div>
+				      <div v-else v-text="row.nickname"></div>
+				    </div>
+				</template>
+				
+                <template slot-scope="{ row, index }" slot="action">
+                    <a @click="changeMenu(row,2,index)">删除</a>
+                </template>
+            </Table>
+            <div class="acea-row row-right page">
+                <Page :total="total" :current="listFrom.page" show-elevator show-total @on-change="pageChange"
+                      :page-size="listFrom.limit"/>
+            </div>
+        </Card>
+		<Modal v-model="modals" title="用户列表" footerHide class="paymentFooter" scrollable width="900"
+			@on-cancel="cancel">
+			<user-list ref="goodslist" :goodsType="1" v-if="modals" @imageObject="getProductId"
+				:serviceProject="1"></user-list>
+		</Modal>
+    </div>
+</template>
+<script>
+    import { mapState, mapMutations } from 'vuex';
+    import { userList} from '@/api/user';
+    import { updateShareholdingRecord,deleteShareholder,addShareholder} from '@/api/shareholder';
+    export default {
+        name: 'shareholderList',
+        data () {
+            return {
+				// 弹窗
+				modals:false,
+                grid: {
+                    xl: 7,
+                    lg: 7,
+                    md: 12,
+                    sm: 24,
+                    xs: 24
+                },
+                loading: false,
+                columns1: [
+                    {
+                        title: 'ID',
+                        key: 'uid',
+                        width: 80
+                    },
+                    {
+                        title: '头像',
+                        slot: 'icons',
+                        minWidth: 100
+                    },
+                    {
+                        title: '昵称',
+                        slot: 'name',
+                        minWidth: 120
+                    },
+                    {
+                        title: '分红股全',
+                        key: 'grade',
+                        minWidth: 100
+                    },
+                    {
+                        title: '原始股权',
+                        key: 'discount',
+                        minWidth: 100
+                    },
+                    {
+                        title: '操作',
+                        slot: 'action',
+                        fixed: 'right',
+                        minWidth: 120
+                    }
+                ],
+                listFrom: {
+                    is_shareholder: 1,
+                    page: 1,
+                    limit: 10
+                },
+                levelLists: [],
+                total: 0,
+                FromData: null,
+                imgName: '',
+                visible: false,
+                levelId: 0,
+                modalTitleSs: '',
+                titleType: 'level',
+                modelTask: false,
+                num: 0
+            }
+        },
+        created () {
+			console.log('zs');
+            this.getList();
+        },
+        computed: {
+            ...mapState('admin/layout', [
+                'isMobile'
+            ]),
+            labelWidth () {
+                return this.isMobile ? undefined : 96;
+            },
+            labelPosition () {
+                return this.isMobile ? 'top' : 'right';
+            }
+        },
+        methods: {
+            ...mapMutations('admin/userLevel', [
+                'getlevelId'
+            ]),
+            // 操作
+            changeMenu (row, name, num) {
+                this.levelId = row.id;
+                switch (name) {
+                case '1':
+                    this.getlevelId(this.levelId);
+                    this.$refs.tasks.modals = true;
+                    this.$refs.tasks.getList();
+                    break;
+                default:
+                    this.del(row, '删除等级', num);
+                }
+            },
+            // 删除
+            del (row, tit, num) {
+                let delfromData = {
+                    title: tit,
+                    num: num,
+                    url: `user/user_level/delete/${row.id}`,
+                    method: 'put',
+                    ids: ''
+                }
+                this.$modalSure(delfromData).then((res) => {
+                    this.$Message.success(res.msg);
+                    this.levelLists.splice(num, 1);
+                    if (!this.levelLists.length) {
+                      this.levelFrom.page = this.levelFrom.page == 1 ? 1 : this.levelFrom.page - 1;
+                    }
+                    this.getList();
+                }).catch(res => {
+                    this.$Message.error(res.msg);
+                });
+            },
+            // 等级列表
+            getList () {
+                this.loading = true;
+                userList(this.listFrom).then(async res => {
+                    let data = res.data
+                    this.levelLists = data.list;
+                    this.total = res.data.count;
+                    this.loading = false;
+                }).catch(res => {
+					console.log(res,'res');
+                    this.loading = false;
+                    this.$Message.error(res.msg);
+                })
+            },
+            pageChange (index) {
+                this.levelFrom.page = index;
+                this.getList();
+            },
+            // 添加
+            add () {
+				this.modals = true;
+            },
+            // 编辑
+            edit (row) {
+                this.levelId = row.id;
+                this.$modalForm(createApi({ id: this.levelId })).then(() => this.getList());
+                this.getlevelId(this.levelId);
+            },
+            // 表格搜索
+            userSearchs () {
+                this.levelFrom.page = 1;
+                this.getList();
+            },
+            // 修改成功
+            submitFail () {
+                this.getList();
+            }
+        }
+    }
+</script>
+
+<style lang="less">
+    .tabBox_img{
+        width: 36px;
+        height: 36px;
+        border-radius:4px;
+        cursor: pointer;
+        img{
+            width: 100%;
+            height :100%;
+		}
+	}
+</style>

+ 30 - 0
src/router/modules/user.js

@@ -56,6 +56,36 @@ export default {
             },
             component: () => import('@/pages/user/level/index')
         },
+		{
+		    path: `${Setting.roterPre}/user/shareholder/list`,
+		    name: `${pre}shareholder`,
+		    meta: {
+		        auth: ['user-shareholder-list'],
+		        footer: true,
+		        title: '股东列表'
+		    },
+		    component: () => import('@/pages/user/shareholder/list')
+		},
+		{
+		    path: `${Setting.roterPre}/user/shareholder/history`,
+		    name: `${pre}shareholder`,
+		    meta: {
+		        auth: ['user-shareholder-history'],
+		        footer: true,
+		        title: '股权记录'
+		    },
+		    component: () => import('@/pages/user/shareholder/history')
+		},
+		{
+		    path: `${Setting.roterPre}/user/shareholder/bonus`,
+		    name: `${pre}shareholder`,
+		    meta: {
+		        auth: ['user-shareholder-bonus'],
+		        footer: true,
+		        title: '分红发放记录'
+		    },
+		    component: () => import('@/pages/user/shareholder/bonus')
+		},
         {
             path: `${Setting.roterPre}/vipuser/level/setup`,
             name: `${pre}levelSetup`,