zhuliu 9 달 전
부모
커밋
ffe5c9b6fe

+ 9 - 0
src/router/index.js

@@ -80,6 +80,13 @@ export const defaultBackStageManageRouterItem = [
         sign:'administrator/tenant'
       },
       {
+        path: 'editTenant',
+        name: 'Administrator_editTenant',
+        component: () => import('@/views/backStageManage/organization/tenant/editTenant.vue'),
+        meta: {title: '编辑企业信息',icon: '企业'},
+        hidden:true
+      },
+      {
         path: 'personnel',
         name: 'Administrator_personnel',
         component: () => import('@/views/backStageManage/organization/personnel/index.vue'),
@@ -327,6 +334,8 @@ router.beforeEach((to, from, next) => {
                 router.addRoutes(Store.state.permission.addRouters); // 动态添加可访问路由表
                 next({ ...to, replace: true })
               })
+          }).catch(error=>{
+            next()
           })
         }else{
           next()

+ 234 - 0
src/views/backStageManage/organization/personnel/components/detail.vue

@@ -0,0 +1,234 @@
+<template>
+  <div>
+    <p class="form_item_title">人员信息:</p>
+    <el-form ref="form" :model="personalForm" :rules="rules" label-position="left" label-width="100px" :class="model == 'detail'?'pointer_events_none':''">
+        <el-row :gutter="24">
+            <el-col :span="12">
+                <el-form-item label="姓名:" prop="name">
+                    <el-input
+                        v-model="personalForm.name"
+                        placeholder="姓名"
+                    ></el-input>
+                </el-form-item>
+            </el-col>
+            <el-col :span="12">
+                <el-form-item label="邮箱:" prop="email">
+                    <el-input
+                        v-model="personalForm.email"
+                        placeholder="邮箱"
+                    ></el-input>
+                </el-form-item>
+            </el-col>
+            <el-col :span="12">
+                <el-form-item label="手机号:" prop="mobile">
+                    <el-input
+                        v-model="form.mobile"
+                        placeholder="手机号"
+                        maxlength="11"
+                    ></el-input>
+                </el-form-item>
+            </el-col>
+            <el-col :span="12">
+                <el-form-item label="邮箱:" prop="email">
+                    <el-input
+                        v-model="form.email"
+                        placeholder="邮箱"
+                    ></el-input>
+                </el-form-item>
+            </el-col>
+            <el-col :span="12">
+                <el-form-item label="账号:" prop="username">
+                    <el-input
+                        v-model="form.email"
+                        placeholder="邮箱"
+                    ></el-input>
+                </el-form-item>
+            </el-col>
+            <el-col :span="12">
+                <el-form-item label="会员类型:" prop="username">
+                    <el-input
+                        v-model="form.vipTypeName"
+                        placeholder="会员类型"
+                    ></el-input>
+                </el-form-item>
+            </el-col>
+            <template>
+                <el-col :span="12">
+                    <el-form-item label="到期时间:" prop="expitrTime">
+                        <el-input
+                            v-model="form.expitrTime"
+                            placeholder="到期时间"
+                        ></el-input>
+                    </el-form-item>
+                </el-col>
+                <el-col :span="12">
+                    <el-form-item label="剩余天数:" prop="expitrTime">
+                        <el-input
+                            :value="getRemainDays(form.expitrTime)"
+                            placeholder="到期时间"
+                        ></el-input>
+                    </el-form-item>
+                </el-col>
+            </template>
+            
+        </el-row>
+    </el-form>
+    <p class="form_item_title">所属企业信息:</p>
+    <el-form ref="form" :model="tenantForm" :rules="rules" label-position="left" label-width="100px" :class="model == 'detail'?'pointer_events_none':''">
+        <el-row :gutter="24">
+            <el-col :span="12">
+                <el-form-item label="名称:" prop="name">
+                    <el-input
+                        v-model="tenantForm.name"
+                        placeholder="企业名称"
+                    ></el-input>
+                </el-form-item>
+            </el-col>
+            <el-col :span="12">
+                <el-form-item label="类型:" prop="type">
+                    <el-select v-model="tenantForm.type" placeholder="企业类型">
+                        <el-option v-for="item in tenantType" :key="item.dictChildValue" :label="item.dictChildLabel" :value="Number(item.dictChildValue)"></el-option>
+                    </el-select>
+                </el-form-item>
+            </el-col>
+            <el-col :span="12">
+                <el-form-item label="状态:" prop="state">
+                    <el-select v-model="tenantForm.state" placeholder="企业类型">
+                        <el-option v-for="item in tenantType" :key="item.dictChildValue" :label="item.dictChildLabel" :value="Number(item.dictChildValue)"></el-option>
+                    </el-select>
+                </el-form-item>
+            </el-col>
+            <el-col :span="12">
+                <el-form-item label="可使用人数:" prop="number">
+                    <el-input-number v-model="tenantForm.number" size="small" controls-position="right" :min="0"></el-input-number>
+                </el-form-item>
+            </el-col>
+            <el-col :span="12">
+                <el-form-item label="管理员名称:" prop="userName">
+                    <el-input
+                        v-model="tenantForm.userName"
+                        placeholder="管理员名称"
+                    ></el-input>
+                </el-form-item>
+            </el-col>
+            <el-col :span="12">
+                <el-form-item label="管理员邮箱:" prop="email">
+                    <el-input
+                        v-model="tenantForm.email"
+                        placeholder="管理员邮箱"
+                    ></el-input>
+                </el-form-item>
+            </el-col>
+            <el-col :span="24">
+                <el-form-item label="地址:" prop="address">
+                    <el-input
+                        v-model="tenantForm.address"
+                        placeholder="企业地址"
+                    ></el-input>
+                </el-form-item>
+            </el-col>
+        </el-row>
+    </el-form>
+    <p class="form_item_title">版本信息:</p>
+    <div style="border:1px solid white;padding:10px;margin:10px 0;border-radius:8px;height:300px">
+        <vipTypeTable :tableData="tenantForm.vipTypes||[]"></vipTypeTable>
+    </div>
+  </div>
+</template>
+
+<script>
+import vipTypeTable from '@/views/backStageManage/paymentCode/paymentCode/components/table/vipType.vue'
+export default {
+  components: {
+    vipTypeTable
+  },
+  props: {
+    personalId:{
+
+    },
+    tenantId:{}
+  },
+  data() {
+    return {
+        tenantForm:{},
+        personalForm:{}
+    };
+  },
+  watch: {
+    
+  },
+  computed: {},
+  created() {},
+  mounted() {
+    this.init()
+  },
+  methods: {
+    init(){
+        this.getTenantForm()
+        this.getPersonalForm()
+    },
+    //获取租户信息
+    getTenantForm(){
+        if(this.tenantId){
+            return
+        }
+        var params = {
+            ids:[this.tenantId]
+        }
+        this.$api.queryQiaoBiTenant(params).then(response=>{
+            if(response.code == 200){
+                var data = response.data
+                if(data && data.length){
+                    this.tenantForm = data[0]
+                }
+            }
+        }).catch(error=>{
+        })
+    },
+    //获取人员信息
+    getPersonalForm(){
+        if(this.personalId){
+            return
+        }
+        var params = {
+            id:this.personalId
+        }
+        this.$api.getPersonnelList(params).then(response=>{
+            if(response.code == 200){
+                var data = response.data
+                if(data && data.length){
+                    this.personalForm = data[0]
+                }
+            }
+        }).catch(error=>{
+        })
+    },
+     //获取剩余天数
+     getRemainDays(endDate){
+        if(!endDate){
+            return ''
+        }
+        var endTime = new Date(endDate)
+        var now = new Date()
+        var dataTime = 24 * 60 * 60 * 1000
+        var remainDays
+        if(endTime<now){
+            remainDays = '已过期'
+        }else{
+            remainDays = Math.ceil((endTime - now) / dataTime)
+        }
+        var maxDay = 20
+        if(remainDays == '已过期' || remainDays<=maxDay){
+            if(remainDays == '已过期'){
+                return `<span style="color:red">${remainDays}</span>`
+            }else{
+                return `<span style="color:red">剩余${remainDays}天</span>`
+            }
+        }
+        return `剩余${remainDays}天`
+    },
+  },
+};
+</script>
+<style lang="scss" scoped>
+</style>

+ 16 - 9
src/views/backStageManage/organization/personnel/components/personnel.vue

@@ -47,14 +47,17 @@
             </el-table-column>
             <el-table-column label="是否启用" align="center" show-overflow-tooltip>
                 <template slot-scope="scope">
-                    <el-switch 
-                        v-model="scope.row.state"
-                        :active-value="1"
-                        :inactive-value="0"
-                        active-color="#13ce66" 
-                        inactive-color="#ff4949" 
-                        @change="handleSwitchChange(scope.row)"
-                    ></el-switch>
+                    <div>
+                       <el-switch 
+                            v-model="scope.row.state"
+                            :active-value="1"
+                            :inactive-value="0"
+                            active-color="#13ce66" 
+                            inactive-color="#ff4949" 
+                            @change="handleSwitchChange(scope.row)"
+                        ></el-switch> 
+                    </div>
+                    
                 </template>
             </el-table-column>
             
@@ -105,7 +108,11 @@ export default {
         };
     },
     watch: {},
-    computed: {},
+    computed: {
+        userinfo(){
+            return this.$store.getters.userinfo
+        }
+    },
     created() {},
     mounted() {
         this.getList();

+ 0 - 60
src/views/backStageManage/organization/tenant/components/dialog/vipNumDialog.vue

@@ -1,60 +0,0 @@
-<template>
-  <div>
-    <el-dialog title="查看版本数量" :visible.sync="visible" width="500px" :before-close="close">
-        <el-table border v-loading="loading" :data="tableData">
-            <el-table-column type="index" label="#" width="55" align="center">
-                <template slot-scope="scope">
-                    <span>{{ (scope.$index + 1) }}</span>
-                </template>
-            </el-table-column>
-            <el-table-column label="会员类型名称" align="center">
-                <template slot-scope="scope">
-                    <span>{{ scope.row.vipName }}</span>
-                </template>
-            </el-table-column>
-            <el-table-column label="数量" align="center">
-                <template slot-scope="scope">
-                    <span>{{ scope.row.num }}</span>
-                </template>
-            </el-table-column>
-            <el-table-column label="操作" align="center">
-                <template slot-scope="scope">
-                    <el-button type="text">修改数量</el-button>
-                </template>
-            </el-table-column>
-        </el-table>
-    </el-dialog>
-  </div>
-</template>
-
-<script>
-export default {
-  components: {},
-  props: {},
-  data() {
-    return {
-        visible:false,
-        loading:false,
-        tableData:[],
-        tenantId:null
-    };
-  },
-  watch: {},
-  computed: {},
-  created() {},
-  mounted() {},
-  methods: {
-    open(tenantId){
-        this.tenantId = tenantId
-        this.getList()
-        this.visible = true
-    },
-    getList(){},
-    close(){
-        this.visible = false
-    }
-  },
-};
-</script>
-<style lang="scss" scoped>
-</style>

+ 247 - 0
src/views/backStageManage/organization/tenant/components/form/tenant.vue

@@ -0,0 +1,247 @@
+<template>
+    <div>
+        <div class="button-container" v-if="model != 'detail'">
+                <el-button type="primary" size="small" :loading="btnLoading" @click="submitForm">提 交</el-button>
+                <el-button size="small"  @click="init">重 置</el-button>
+        </div>
+        <div class="form_center" :class="model == 'detail'?'pointer_events_none':''">
+            <el-form ref="form" :model="form" :rules="rules" label-width="100px" label-position="left">
+                <el-form-item label="租户名称" prop="tenant">
+                    <el-input v-model="form.name" placeholder="请输入租户名称" :readonly="true"></el-input>
+                </el-form-item>
+
+                <el-form-item label="可使用人员数量" prop="number">
+                    <el-input-number v-model="form.number" size="small" controls-position="right" :min="0"></el-input-number>
+                </el-form-item>
+
+                <el-form-item label="状态" prop="state">
+                    <el-switch
+                        style="display: block"
+                        v-model="scope.row.state"
+                        @change="(val)=>changeState(scope.row,val)"
+                        active-color="#13ce66"
+                        inactive-color="red"
+                        :active-value="1"
+                        :inactive-value="0"
+                        active-text="启用"
+                        inactive-text="禁用">
+                    </el-switch>
+                </el-form-item>
+                <el-form-item label="类型" prop="type">
+                    <el-select v-model="form.type" placeholder="请选择企业类型">
+                        <el-option v-for="item in tenantType" :key="item.dictChildValue" :label="item.dictChildLabel" :value="Number(item.dictChildValue)"></el-option>
+                    </el-select>
+                </el-form-item>
+
+                <el-form-item label="描述" prop="describe">
+                    <el-input v-model="form.describe" placeholder="请输入描述" type="textarea" maxlength="100" show-word-limit></el-input>
+                </el-form-item>
+                <div style="border:1px solid white;padding:10px;margin:10px 0;border-radius:8px;height:300px">
+                    <vipTypeTable :tableData="tableData"></vipTypeTable>
+                </div>
+            </el-form>
+        </div>
+    </div>
+</template>
+
+<script>
+const currentForm = {
+    tenantId:null,
+    name:null,
+    describe:null,
+    number:null,
+    state:1,
+    type:0,
+    vipTypes:[],
+}
+import commonData from '../mixins/commonData'
+import vipTypeTable from '@/views/backStageManage/paymentCode/paymentCode/components/table/vipType.vue'
+export default {
+    components: {
+        vipTypeTable
+    },
+    mixins:[commonData],
+    props: {
+        id:null,
+        model:{
+            type:String,
+            default:"add"
+        },
+    },
+    data() {
+        return {
+            btnLoading: false,
+            // 表单参数
+            form: {},
+            rules: {},
+            tableData:[]
+        };
+    },
+    watch: {
+        id(){
+            if(this.$route.path != '/administrator/editTenant'){
+                return
+            }
+            this.init()
+        },
+    },
+    computed: {
+        userinfo() {
+            return this.$store.state.admin.userinfo
+        }
+    },
+    created() {},
+    mounted() {
+       this.init()
+    },
+    methods: {
+        //初始化当前页面
+        async init(){
+            if(this.model == 'add'){
+                this.resetForm()
+            }else if(this.model == 'edit' || this.model == 'detail'){
+                await this.getById()
+            }
+            if(this.model == 'detail'){
+                this.tableData = this.form.vipTypes || []
+            }else{
+                this.getVipType()
+            }
+        },
+        //查询数据并校验
+        async getById(){
+            if(!this.id){
+                this.$message.error('编辑缺少参数')
+                return
+            }
+            var params = {
+                ids: [this.id],
+            };
+            await this.$api.queryQiaoBiTenant(params).then(response=>{
+                if(response.code == 200){
+                    var data = response.data.records
+                    if(data && data.length>0){
+                        this.form = data[0]
+                    }
+                }
+            }).catch(error=>{
+                this.resetForm()
+            })
+        },
+        //重置表单
+        resetForm(){
+            this.form = Object.assign({}, currentForm)
+            this.$refs['form'].resetFields();
+        },
+        /** 提交按钮 */
+        submitForm: function() {
+            this.$refs['form'].validate((valid) => {
+                if (valid) {
+                    this.form.vipTypes = this.tableData.map(item=>{
+                        return {
+                            vipTypeId:item.id,
+                            vipTypeNum:item.vipTypeNum,
+                            vipTypeName:item.vipTypeName
+                        }
+                    })
+                    this.form.tenantId = this.form.id
+                    this.btnLoading = true
+                    var a = '添加'
+                    var api = 'addPaymentCode'
+                    if(this.model == "edit"){
+                        a = '编辑'
+                        api = 'updateTenantVip'
+                    }
+                    this.$api[api](this.form).then(response => {
+                        if (response.code === 200) {
+                            this.btnLoading = false
+                            this.$message.success( a + '成功');
+                            this.finish()
+                        }
+                    })
+                    .catch(error => {
+                        this.$message.error(a + '失败')
+                        this.btnLoading = false
+                    });
+                }
+            });
+        },
+        finish(){
+            if(this.model == 'add'){
+                this.init()
+            }else{
+                this.$store.commit('removeHistoryPath',this.$route.path);
+                this.$store.commit('removeHistory',this.$route.path);
+                this.$router.push(
+                    {
+                        path:'/administrator/tenant'
+                    }
+                )
+            }
+        },
+        //获取会员类型
+        getVipType(){
+            var params = {}
+            this.$api.getVipList(params).then(response=>{
+                if(response.code == 200){
+                    var data = response.data.records
+                    if(!data || data.length == 0){
+                        this.tableData = []
+                        return
+                    }
+                    if(this.model == 'add'){
+                        this.tableData = data.map(item=>{
+                            item.vipTypeNum = 0
+                            return item
+                        })
+                        return
+                    }
+                    var vipTypes = this.form.vipTypes
+                    if(!vipTypes || vipTypes.length == 0){
+                        this.tableData = data.map(item=>{
+                            item.vipTypeNum = 0
+                            return item
+                        })
+                        return
+                    }
+                    for(var i = 0;i<data.length;i++){
+                        var item = data[i]
+                        var obj = vipTypes.find(vip=>{
+                            return vip.vipTypeId == item.id
+                        })
+                        if(obj){
+                            this.$set(item,'vipTypeNum',obj.vipTypeNum || 0)
+                        }else{
+                            this.$set(item,'vipTypeNum', 0)
+                        }
+                    }
+                    this.tableData = data
+                    
+                }
+            })
+        },
+    },
+};
+</script>
+<style lang="scss">
+.form_center {
+    width: 800px;
+    margin: 30px auto;
+}
+
+.button-container {
+    max-width: 1200px;
+    display: flex;
+    justify-content:flex-end;
+    margin: 10px auto;
+    position:sticky;
+    top:10px,
+}
+.form_item_title{
+    color: black;
+    font-weight: bold;
+    font-size: 14px;
+    padding: 5px 0;
+    border-bottom: 1px solid white;
+}
+</style>

+ 34 - 8
src/views/backStageManage/organization/tenant/components/tenant.vue

@@ -45,7 +45,12 @@
                 <el-table-column prop="describe" label="备注" align="center" show-overflow-tooltip></el-table-column>
                 <el-table-column label="操作"  width="150">
                     <template slot-scope="scope">
-                        <el-button type="primary" size="mini" @click="checkVipNum(scope.row)">查看会员版本数量</el-button>
+                        <el-button
+                            size="mini"
+                            type="text"
+                            icon="el-icon-edit"
+                            @click="handleEdit(scope.row)"
+                        >修改</el-button>
                     </template>
                 </el-table-column>
             </el-table>
@@ -54,8 +59,6 @@
             <el-pagination :current-page.sync="queryParams.current" :page-size="queryParams.size" :total="total" @current-change="handleCurrentChange" layout="total, prev, pager, next, jumper" background></el-pagination>
         </el-footer>
     </el-container>
-
-    <vipNumDialog ref="vipNumDialog"></vipNumDialog>
   </div>
 </template>
 
@@ -63,11 +66,10 @@
 const defaultSearchForm = {
     name:null
 }
-import vipNumDialog from './dialog/vipNumDialog.vue';
 import commonData from './mixins/commonData'
 export default {
   components: {
-    vipNumDialog
+    
   },
   mixins:[commonData],
   props: {},
@@ -121,12 +123,36 @@ export default {
         this.getList()
     },
     //查看租户会员版本数量
-    checkVipNum(row){
-        this.$refs.vipNumDialog.open(row.id)
+    handleEdit(row){
+        this.$router.push({ 
+          path: '/administrator/editTenant', 
+          query: {
+              id: row.id
+          }
+        });
     },
     //禁用租户
     changeState(row,val){
-
+        var params = {
+            ...row,
+            tenantId:row.id
+        }
+        var state = {
+            0:'禁用',
+            1:'启用'
+        }
+        this.$api.updateTenantVip(params).then(response=>{
+            if (response.code === 200) {
+                this.$message.success( state[row.state] + '成功');
+            }
+        }).catch(error=>{
+            this.$message.error( state[row.state] + '失败');
+            if(row.state == 0){
+                this.$set(row,'state',1)
+            }else{
+                this.$set(row,'state',0)
+            }
+        })
     },
   },
 };

+ 30 - 0
src/views/backStageManage/organization/tenant/editTenant.vue

@@ -0,0 +1,30 @@
+<template>
+    <div class="height_100">
+      <tenantForm model="edit" :id="id"></tenantForm>
+    </div>
+</template>
+  
+<script>
+import tenantForm from './components/form/tenant.vue';
+export default {
+    components: {
+        tenantForm
+    },
+    props: {},
+    data() {
+      return {
+      };
+    },
+    watch: {},
+    computed: {
+        id(){
+            return this.$route.query.id
+        }
+    },
+    created() {},
+    mounted() {},
+    methods: {},
+  };
+</script>
+<style lang="scss" scoped>
+</style>

+ 1 - 1
src/views/backStageManage/paymentCode/paymentCode/components/form/paymentCode.vue

@@ -290,7 +290,7 @@ export default {
 <style lang="scss">
 .form_center {
     width: 800px;
-    margin: -40px auto;
+    margin: 0px auto;
 }
 
 .button-container {