| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462 |
- <?php
- use common\helpers\ComponentHelper;
- ComponentHelper::loadComponentView('com-select-cat');
- ComponentHelper::loadComponentView('com-dialog-select');
- ComponentHelper::loadComponentView('com-rich-text');
- ?>
- <script src="/resources/js/Sortable.min.js"></script>
- <script src="/resources/unpkg/vuedraggable@2.18.1/dist/vuedraggable.umd.min.js"></script>
- <div id="app" v-cloak>
- <el-card class="box-card" shadow="never" style="border:0;min-width: 1200px;"
- body-style="background-color: #f3f3f3;padding: 10px 0 0;">
- <div slot="header">
- <el-breadcrumb separator="/">
- <el-breadcrumb-item>
- <span style="color: #409EFF;cursor: pointer"
- @click="$navigate({r:'electron-coupon/default/index'})">
- 招商员
- </span>
- </el-breadcrumb-item>
- <el-breadcrumb-item>{{titleName}}</el-breadcrumb-item>
- </el-breadcrumb>
- </div>
- <div class="form-body" v-loading="loading">
- <el-form :model="submitData" :rules="rules" ref="ruleForm" size="small" label-width="150px" style="margin-left: 20px;">
- <el-form-item label="招商员" style="margin-bottom: 20px" prop="name" label-width="100px">
- <div class="user-add" v-show="submitData.id == 0">
- <el-tooltip effect="dark" content="添加用户" placement="top">
- <el-button @click="showUserDialog('user')"
- icon="el-icon-plus"></el-button>
- </el-tooltip>
- </div>
- <div v-show="submitData.user_id" class="user-info">
- <img :src="submitData.avatar_url ? submitData.avatar_url : '/resources/img/common/default-avatar.png'" />
- <p>会员ID: {{submitData.user_id}}</p>
- <p>会员昵称:{{submitData.nickname}}</p>
- <p>手机号码:{{submitData.mobile}}</p>
- </div>
- </el-form-item>
- <el-form-item label="等级" style="margin-bottom: 20px" required label-width="100px">
- <el-select v-model="submitData.business_bonus_level" placeholder="请选择等级" :disabled="submitData.id == 0 ? true : false">
- <el-option v-for="(item, index) in level_list" :label="item.level_name" :value="item.level" :key="index"></el-option>
- </el-select>
- </el-form-item>
- <el-form-item label="分红比例" style="margin-bottom: 20px" required label-width="100px">
- {{bonus_rate}}
- <div class="remark">用户成为招商员之后,新推广的门店、商户才享受分红</div>
- </el-form-item>
- <el-form-item label="状态" style="margin-bottom: 20px" required label-width="100px">
- <el-switch
- v-model="submitData.status"
- :active-value="1"
- :inactive-value="0"
- active-text="开放"
- inactive-text="禁用"
- >
- </el-switch>
- <div class="remark">禁用后不再给予分红</div>
- </el-form-item>
- </div>
- <el-dialog @open="getUser" title="选择用户" :visible.sync="userDialog.visible" :close-on-click-modal="false">
- <el-form size="small" :inline="true" @submit.native.prevent>
- <el-form-item>
- <div class="input-item">
- <el-input @keyup.enter.native="search" size="small" v-model="keyword_name" autocomplete="off" placeholder="昵称" style="width: 30%"></el-input>
- <el-input @keyup.enter.native="search" size="small" v-model="keyword_id" autocomplete="off" placeholder="ID" style="width: 16%"></el-input>
- <el-input @keyup.enter.native="search" size="small" v-model="keyword_mobile" autocomplete="off" placeholder="手机号" style="width: 30%"></el-input>
- <el-button size="small" :loading=foundLoading @click="getUser">查找用户</el-button>
- </el-input>
- </div>
- </el-form-item>
- </el-form>
- <el-table :data="userDialog.list" v-loading="userDialog.loading" @selection-change="userSelectionChange">
- <el-table-column label="选择" type="selection"></el-table-column>
- <el-table-column label="ID" prop="id" width="100px"></el-table-column>
- <el-table-column label="头像" width="100px" prop="avatar_url">
- <template slot-scope="scope">
- <com-image mode="aspectFill" width='50px' height='50px' :src="scope.row.avatar_url ? scope.row.avatar_url:'/resources/img/common/default-avatar.png'"></com-image>
- </template>
- </el-table-column>
- <el-table-column label="名称" prop="nickname"></el-table-column>
- </el-table>
- <div style="text-align: center; margin-top: 15px;">
- <el-pagination
- v-if="userDialog.pagination"
- style="display: inline-block"
- background
- @current-change="userDialogPageChange"
- layout="prev, pager, next"
- :page-size.sync="userDialog.pagination.pageSize"
- :total="Number(userDialog.pagination.totalCount)">
- </el-pagination>
- </div>
- <div slot="footer">
- <el-button @click="userDialog.visible = false">取 消</el-button>
- <el-button type="primary" @click="addUser">确 定</el-button>
- </div>
- </el-dialog>
- <el-button class="button-item" :loading="btnLoading" type="primary" @click="saveFun"
- size="small">保存
- </el-button>
- </el-card>
- </div>
- <script>
- const app = new Vue({
- el: '#app',
- data() {
- return {
- diy_img_prefix: '<?= Yii::getAlias('@attachurl') ?>',
- titleName:"添加招商员",
- loading:false,
- foundLoading:false,
- keyword_name: '',
- keyword_id: '',
- keyword_mobile: '',
- level_list: [],
- userDialog: {
- visible: false,
- page: 1,
- loading: null,
- pagination: null,
- list: [],
- index: 'user',
- selectedList: null,
- max: 20,
- },
- submitData:{
- id: 0,
- user_id: '',
- nickname: '',
- mobile: '',
- avatar_url: '',
- status: 1,
- business_bonus_level: 0, // 别改动初始值
- created_at: 0,
- updated_at: 0,
- bonus_rate: 0
- },
- rules: {
- business_bonus_level: [
- { required: true, message: '请选择招商员等级', trigger: 'blur' }
- ],
- },
- btnLoading:false,
- };
- },
- mounted() {
- this.submitData.updated_at = Date.parse(new Date()) / 1000; // 新建数据的更新时间
- if (getQuery('id')) {
- this.titleName="编辑招商员";
- this.loadData(getQuery('id'));
- } else {
- this.submitData.created_at = Date.parse(new Date()) / 1000; // 新建数据的创建时间
- }
- this.getBonusLevel(getQuery('id'));
- },
- watch:{
- },
- computed:
- {
- bonus_rate() {
- let rate = 0;
- let that = this;
- this.level_list.map(function (item) {
- if (item.level == that.submitData.business_bonus_level) {
- rate = item.bonus_rate;
- }
- });
- this.submitData.bonus_rate = rate;
- return rate ? rate + '%' : '';
- }
- },
- methods: {
- getUser() {
- let self = this;
- self.userDialog.loading = true;
- request({
- params: {
- r: 'business-bonus/default/search-user',
- page: self.userDialog.page,
- keyword_name: this.keyword_name,
- keyword_id: this.keyword_id,
- keyword_mobile: this.keyword_mobile,
- type:this.userDialog.index,
- },
- method: 'get',
- }).then(e => {
- self.userDialog.loading = false;
- self.userDialog.list = e.data.data.list;
- self.userDialog.pagination = e.data.data.pagination;
- }).catch(e => {
- console.log(e);
- });
- },
- addUser()
- {
- if (this.userDialog.selectedList && this.userDialog.selectedList.length > 1) {
- this.$message.error('只能选择一个用户!');
- return false;
- }
- this.submitData.nickname = this.userDialog.selectedList[0].nickname;
- this.submitData.user_id = this.userDialog.selectedList[0].id;
- this.submitData.mobile = this.userDialog.selectedList[0].mobile;
- this.submitData.avatar_url = this.userDialog.selectedList[0].avatar_url;
- this.userDialog.visible = false;
- },
- userSelectionChange(e) {
- if (e.length > 1) {
- this.$message.error('只能选择一个用户!');
- }
- this.userDialog.selectedList = e;
- },
- userDialogPageChange(page) {
- this.userDialog.page = page;
- this.getUser();
- },
- showUserDialog(index) {
- this.userDialog.visible = true;
- this.userDialog.index = index;
- },
- saveFun(){
- this.$refs['ruleForm'].validate((valid) => {
- if (valid) {
- if (!this.submitData.user_id) {
- this.$message.error('请选择一个用户作为招商员!');
- return false;
- }
- let data =JSON.parse(JSON.stringify(this.submitData));
- this.btnLoading = true;
- let url = 'business-bonus/default/edit';
- request({
- params: {
- r:url,
- },
- method: 'post',
- data: data
- }).then(e => {
- this.btnLoading = false;
- if (e.data.code == 0) {
- this.$message.success(e.data.msg);
- setTimeout(function () {
- navigateTo({
- r: 'business-bonus/default/index',
- });
- }, 1500);
- } else {
- this.$message.error(e.data.msg);
- }
- }).catch(e => {
- this.$message.error(e);
- this.btnLoading = false;
- })
- } else {
- this.$message.error('请填写必要的参数!');
- return false;
- }
- });
- },
- picUrl(e) {
- if (e.length) {
- this.submitData.pic = e[0].url;
- }
- },
- delPic(index) {
- /* this.pic_url.splice(index, 1) */
- this.submitData.pic = '';
- },
- receiveDatetimeChange(){
- if(this.receive_datetime){
- this.submitData.receive_begin_time = Date.parse(new Date(this.receive_datetime[0]).toString())/1000;
- this.submitData.receive_end_time = Date.parse(new Date(this.receive_datetime[1]).toString())/1000;
- }
- },
- useDatetimeChange() {
- if(this.use_datetime){
- this.submitData.use_begin_time = Date.parse(new Date(this.use_datetime[0]).toString())/1000;
- this.submitData.use_end_time = Date.parse(new Date(this.use_datetime[1]).toString())/1000;
- }
- },
- addPrize(){
- this.submitData.prize.push(JSON.parse(JSON.stringify(this.prizeObj)));
- },
- delPrize(index){
- this.submitData.prize.splice(index,1)
- },
- formatTime(timeStamp) {
- var date = new Date();
- date.setTime(timeStamp * 1000);
- var y = date.getFullYear();
- var m = date.getMonth() + 1;
- m = m < 10 ? ('0' + m) : m;
- var d = date.getDate();
- d = d < 10 ? ('0' + d) : d;
- var h = date.getHours();
- h = h < 10 ? ('0' + h) : h;
- var minute = date.getMinutes();
- var second = date.getSeconds();
- minute = minute < 10 ? ('0' + minute) : minute;
- second = second < 10 ? ('0' + second) : second;
- return y + '-' + m + '-' + d + ' ' + h + ':' + minute + ':' + second;
- },
- loadData(id){
- this.loading = true;
- request({
- params: {
- r:'business-bonus/default/info',
- inc_id: id
- },
- method: 'get',
- }).then(e => {
- this.loading = false;
- if (e.data.code == 0) {
- if (e.data.data.is_null == 0) {
- this.submitData = e.data.data.info;
- }
- } else {
- this.$message.error(e.data.msg);
- }
- }).catch(e => {
- this.loading = false;
- });
- },
- getBonusLevel(id) {
- request({
- params: {
- r:'business-bonus/default/business-bonus-level',
- },
- method: 'post',
- }).then(e => {
- if (e.data.code == 0) {
- this.level_list = e.data.data.level_list;
- if (id <= 0) {
- this.submitData.business_bonus_level = 1; // 初始化,触发计算属性
- }
- } else {
- this.$message.error(e.data.msg);
- }
- }).catch(e => {
- });
- }
- }
- });
- </script>
- <style>
- .form-body {
- padding: 20px;
- background-color: #fff;
- margin-bottom: 20px;
- padding-right: 20%;
- min-width: 900px;
- }
- .form-body .el-form-item {
- padding-right: 25%;
- min-width: 850px;
- }
- .form-button {
- margin: 0;
- }
- .form-button .el-form-item__content {
- margin-left: 0 !important;
- }
- .button-item {
- padding: 9px 25px;
- }
- .check-group {
- font-size: 14px !important;
- }
- .check-group .el-col {
- display: flex;
- }
- .check-group .el-input {
- margin: 0 5px;
- }
- .check-group .el-col .el-checkbox {
- display: flex;
- align-items: center;
- }
- .check-group .el-col .el-input {
- width: 100px;
- }
- .check-group .el-col .el-input .el-input__inner {
- height: 30px;
- width: 100px;
- }
- .el-checkbox-group .el-col {
- margin-bottom: 10px;
- }
- .add-image-btn {
- width: 100px;
- height: 100px;
- color: #419EFB;
- border: 1px solid #e2e2e2;
- cursor: pointer;
- }
- .remark {
- color: #cccccc;
- }
- .user-info img {
- width: 60px;
- border-radius: 50%;
- margin-top: 10px;
- }
- </style>
|