lex-xin 3 سال پیش
والد
کامیت
6d6d821637

+ 16 - 0
src/constant/index.js

@@ -338,3 +338,19 @@ export const backType = {
   SUBJECT_CHANGE:'声部更换',
   CANCEL_ACTIVITY_COURSE:'取消活动资格'
 }
+
+export const paymentMode = {
+  YEAR: '年',
+  MONTH: '月'
+}
+
+export const organState = {
+  0: '草稿',
+  1: '启动',
+  2: '停用'
+}
+
+export const organPayState = {
+  0: '未缴费',
+  1: '已缴费'
+}

+ 4 - 0
src/utils/vueFilter.js

@@ -195,6 +195,10 @@ Vue.filter('courseTypeFormat', val => constant.courseType[val])
 // 格式化签到签退记录 updateAttendanceEnum
 Vue.filter('updateAttendanceEnum', val => constant.updateAttendanceEnum[val])
 Vue.filter('clientTypeFilter',val=>constant.clientType[val])
+// 机构状态
+Vue.filter('organState',val=>constant.organState[val])
+// 机构缴费状态
+Vue.filter('organPayState',val=>constant.organPayState[val])
 // 教学伴奏
 Vue.filter('clientType',val=>constant.clientStatus[val])
 // 时间处理

+ 14 - 18
src/views/organManager/api.js

@@ -1,35 +1,31 @@
 
 import request2 from '@/utils/request2'
 
-export const platformServeQueryPage = data => request2({
-  url: '/api-web/platformServe/queryPage',
-  method: 'get',
-  params: data,
+export const tenantInfoQueryPage = data => request2({
+  url: '/api-web/tenantInfo/queryPage',
+  method: 'post',
+  data,
 })
 
-export const platformServeAdd = data => request2({
-  url: '/api-web/platformServe/add',
+export const tenantInfoAdd = data => request2({
+  url: '/api-web/tenantInfo/add',
   method: 'post',
   data,
 })
 
-export const platformServeUpdate = data => request2({
-  url: '/api-web/platformServe/update',
+export const tenantInfoUpdate = data => request2({
+  url: '/api-web/tenantInfo/update',
   method: 'post',
   data,
 })
 
-export const platformServeDelete = data => request2({
-  url: '/api-web/platformServe/delete/' + data.id,
-  method: 'get'
+export const tenantInfoOpsState = data => request2({
+  url: '/api-web/tenantInfo/opsState/' + data.id,
+  method: 'get',
+  params: data
 })
 
-export const platformServeQueryInfo = data => request2({
-  url: '/api-web/platformServe/queryInfo/' + data.id,
+export const tenantInfoInfo = data => request2({
+  url: '/api-web/tenantInfo/info/' + data.id,
   method: 'get'
 })
-
-export const platformServeQueryModeDetail = data => request2({
-  url: '/api-web/platformServe/queryModeDetail/' + data.id,
-  method: 'get'
-})

+ 86 - 11
src/views/organManager/components/memberSetting.vue

@@ -8,49 +8,76 @@
         style="margin-bottom: 20px"
       ></el-alert>
       <el-form ref="form" :model="form" label-width="140px" size="small" :inline="true">
-        <el-form-item label="月度会员分润金额" prop="sn"
-          :rules="[{ required: true, message: '请输入月度会员分润金额', trigger: 'blur' }]">
+        <el-form-item label="月度会员分润金额" prop="month_divide"
+          :rules="[{ required: true, message: '请输入月度会员分润金额', trigger: 'blur' },
+            { type: 'number', message: '月度会员分润金额必须为数字值' }]">
           <el-input
             size="small"
+            :disabled="isDisabled"
             placeholder="请输入月度会员分润金额"
+            v-model.number="form.month_divide"
+            type="number"
             style="width: 238px;"
           >
             <div slot="append">元/月</div>
           </el-input>
         </el-form-item>
-        <el-form-item label="季度会员分润金额" prop="sn">
+        <el-form-item label="季度会员分润金额" prop="quarter_divide"
+          :rules="[{ required: true, message: '请输入月度会员分润金额', trigger: 'blur' },
+            { type: 'number', message: '季度会员分润金额必须为数字值' }]">
           <el-input
             size="small"
+            :disabled="isDisabled"
             placeholder="请输入季度会员分润金额"
+            v-model.number="form.quarter_divide"
+            type="number"
             style="width: 238px;"
           >
             <div slot="append">元/季</div>
           </el-input>
         </el-form-item>
-        <el-form-item label="半年会员分润金额" prop="sn">
+        <el-form-item label="半年会员分润金额" prop="half_year_divide"
+          :rules="[{ required: true, message: '请输入月度会员分润金额', trigger: 'blur' },
+            { type: 'number', message: '半年会员分润金额必须为数字值' }]">
           <el-input
             size="small"
+            :disabled="isDisabled"
             placeholder="请输入半年会员分润金额"
+            type="number"
+            v-model.number="form.half_year_divide"
             style="width: 238px;"
           >
             <div slot="append">元/半年</div>
           </el-input>
         </el-form-item>
-        <el-form-item label="年度会员分润金额" prop="sn">
+        <el-form-item label="年度会员分润金额" prop="year_divide"
+          :rules="[{ required: true, message: '请输入月度会员分润金额', trigger: 'blur' },
+            { type: 'number', message: '年度会员分润金额必须为数字值' }]">
           <el-input
             size="small"
+            :disabled="isDisabled"
             placeholder="请输入年度会员分润金额"
+            type="number"
+            v-model.number="form.year_divide"
             style="width: 238px;"
           >
             <div slot="append">元/年</div>
           </el-input>
         </el-form-item>
-        <el-form-item label="可用教材" prop="serveId">
+        <el-form-item label="可用教材" prop="teachingMaterialId"
+          :rules="[{ required: true, message: '请选择可用教材', trigger: 'change' }]">
           <el-select
-            v-model.trim="form.serveId"
+            v-model.trim="form.teachingMaterialId"
+            :disabled="isDisabled"
+            multiple
+            filterable
+            collapse-tags
+            clearable
             placeholder="请选择可用教材"
             style="width: 238px !important"
           >
+            <el-option v-for="(item, index) in teachList" :key="index"
+              :label="item.name" :value="item.id"></el-option>
           </el-select>
         </el-form-item>
       </el-form>
@@ -58,18 +85,66 @@
 </template>
 
 <script>
+// {
+//     "member_config": {
+//         "month_divide": "10",
+//         "quarter_divide": "20",
+//         "half_year_divide": "30",
+//         "year_divide": "40"
+//     },
+//     "cloud_room_rule": {
+//         "cloud_room_up_limit": "2",
+//         "cloud_room_config": {
+//             "3": "10",
+//             "4": "20",
+//             "5": "30"
+//         }
+//     }
+// }
+import { getSysMusicScoreList } from '@/views/teachManager/api'
 export default {
-  name: 'serviceManger',
+  props: ['type'],
   data () {
-    const query = this.$route.query
     return {
-      payType: query.type,
-      form: {}
+      form: {
+        month_divide: null,
+        quarter_divide: null,
+        half_year_divide: null,
+        year_divide: null,
+        teachingMaterialId: [], // 可用教材
+      },
+      teachList: [] // 教材列表
     };
   },
   mounted () {
+    this.__init()
+  },
+  computed: {
+    isDisabled() {
+      return this.type == 'setting' ? true : false
+    }
   },
   methods: {
+    async __init() {
+      try {
+        const res = await getSysMusicScoreList({ page: 1, rows: 999 })
+        this.teachList = res.data?.rows || []
+      } catch(e) {}
+    },
+    onSubmit() {
+      let status = false
+      this.$refs.form.validate(_ => {
+        status = _
+      })
+      return status
+    },
+    getValues() {
+      const { teachingMaterialId, ...res } = this.form
+      return {
+        member_config: { ...res },
+        teachingMaterialId
+      }
+    },
   },
 };
 </script>

+ 121 - 21
src/views/organManager/components/openService.vue

@@ -8,59 +8,90 @@
         style="margin-bottom: 20px"
       ></el-alert>
       <el-form ref="form" :model="form" label-width="120px" size="small" :inline="true">
-        <el-form-item label="服务名称" prop="serveId">
+        <el-form-item label="服务名称" prop="serveId"
+          :rules="[{ required: true, message: '请选择服务名称', trigger: 'change' }]">
           <el-select
-            v-model.trim="form.serveId"
+            v-model="form.serveId"
+            :disabled="isDisabled"
             placeholder="请选择服务名称"
             style="width: 238px !important"
+            @change="onProductChange"
           >
+            <el-option v-for="item in productList" :key="item.id"
+              :label="item.serveName" :value="item.id"></el-option>
           </el-select>
         </el-form-item>
-        <el-form-item label="付费模式" prop="serveDetailId">
+        <el-form-item label="付费模式" prop="serveMode"
+          :rules="[{ required: true, message: '请选择付费模式', trigger: 'change' }]">
           <el-select
-            v-model.trim="form.serveDetailId"
+            v-model="form.serveMode"
+            :disabled="isDisabled"
             placeholder="请选择付费模式"
             style="width: 238px !important"
+            @change="onModeChange"
           >
+            <el-option v-for="(item, index) in modeList" :key="index"
+              :label="paymentMode[item.mode]" :value="item.mode"></el-option>
           </el-select>
         </el-form-item>
-        <el-form-item label="学员上限" prop="sn">
+        <el-form-item label="学员上限" prop="studentUpLimit"
+          :rules="[{ required: true, message: '请选择学员上限', trigger: 'change' }]">
           <el-select
             placeholder="请选择学员上限"
+            :disabled="isDisabled"
+            @change="onStudentUpLimitChange"
             style="width: 238px !important"
+            v-model="form.studentUpLimit"
           >
+            <el-option v-for="(item, index) in studentUpList" :key="index"
+              :label="item.studentUpLimit" :value="item.id"></el-option>
           </el-select>
         </el-form-item>
-        <el-form-item label="合同价" prop="sn">
+        <el-form-item label="合同价" prop="contractPrice"
+          :rules="[{ required: true, message: '请输入合同价', trigger: 'blur' },
+            { type: 'number', message: '合同价必须为数字值' }]">
           <el-input
-            size="small"
+            :disabled="isDisabled"
             placeholder="请输入合同价"
+            v-model.number="form.contractPrice"
+            type="number"
             style="width: 238px;"
           >
-            <div slot="append">元/</div>
+            <div slot="append">元/{{ unitSuffix }}</div>
           </el-input>
         </el-form-item>
-        <el-form-item label="原价" prop="sn">
+        <el-form-item label="原价" prop="originalPrice"
+          :rules="[{ required: true, message: '请输入原价', trigger: 'blur' },
+            { type: 'number', message: '原价必须为数字值' }]">
           <el-input
-            size="small"
             placeholder="请输入原价"
+            disabled
+            v-model.number="form.originalPrice"
             style="width: 238px;"
           >
-            <div slot="append">元/</div>
+            <div slot="append">元/{{ unitSuffix }}</div>
           </el-input>
         </el-form-item>
-        <el-form-item label="有效期" prop="sn">
+        <el-form-item label="有效期" prop="expiryCount"
+          :rules="[{ required: true, message: '请输入有效期', trigger: 'blur' },
+            { type: 'number', message: '有效期必须为数字值' }]">
           <el-input
-            size="small"
+            :disabled="isDisabled"
+            type="number"
+            v-model.number="form.expiryCount"
             placeholder="请输入有效期"
           >
-            <div slot="append"></div>
+            <div slot="append">{{ unitSuffix }}</div>
           </el-input>
         </el-form-item>
-        <el-form-item label="开能价格" prop="sn">
+        <el-form-item label="开通价格" prop="payAmount"
+          :rules="[{ required: true, message: '请输入开通价格', trigger: 'blur' },
+            { type: 'number', message: '开通价格必须为数字值' }]">
           <el-input
-            size="small"
-            placeholder="请输入开能价格"
+            placeholder="请输入开通价格"
+            type="number"
+            v-model.number="form.payAmount"
+            :disabled="isDisabled"
           >
             <div slot="append">元</div>
           </el-input>
@@ -70,18 +101,87 @@
 </template>
 
 <script>
+import { platformServeQueryPage, platformServeQueryModeDetail } from '@/views/platformManager/serviceManager/api'
+import { paymentMode } from '@/constant'
 export default {
-  name: 'serviceManger',
+  props: ['type'],
   data () {
-    const query = this.$route.query
     return {
-      payType: query.type,
-      form: {}
+      paymentMode,
+      form: {
+        serveId: null,
+        serveMode: null,
+        serveDetailId: null,
+        studentUpLimit: null,
+        expiryUnit: null,
+        contractPrice: null,
+        originalPrice: null,
+        expiryCount: null,
+        payAmount: null
+      },
+      productList: [],
+      modeList: [],
+      studentUpList: [], // 学员上限列表
     };
   },
   mounted () {
+    this.__init()
+  },
+  computed: {
+    isDisabled() {
+      return this.type == 'setting' ? true : false
+    },
+    unitSuffix() {
+      // 后辍默认为年
+      return this.paymentMode[this.form.expiryUnit] || '年'
+    }
   },
   methods: {
+    async __init() {
+      try {
+        const res = await platformServeQueryPage({ page: 1, rows: 999 })
+        this.productList = res.data?.rows || []
+      } catch(e) {}
+    },
+    async onProductChange(val) {
+      const form = this.form
+      try {
+        const res = await platformServeQueryModeDetail({ id: val })
+        this.modeList = res.data || []
+      } catch(e) { console.log(e) }
+    },
+    onSubmit() {
+      let status = false
+      this.$refs.form.validate(_ => {
+        status = _
+      })
+      return status
+    },
+    getValues() {
+      return this.form
+    },
+    onModeChange(val) { // 付费模式改变时
+      const form = this.form
+      for(let item of (this.modeList || [])) {
+        if(val == item.mode) {
+          this.studentUpList = item.list || []
+          form.expiryUnit = item.mode
+
+          // ...
+          form.studentUpLimit = null // 学员上限
+          form.originalPrice = null // 重置原价
+        }
+      }
+    },
+    onStudentUpLimitChange(val) {
+      const form = this.form
+      for(let item of (this.studentUpList || [])) {
+        if(val == item.id) {
+          form.serveDetailId = item.id
+          form.originalPrice = item.originalPrice
+        }
+      }
+    }
   },
 };
 </script>

+ 32 - 10
src/views/organManager/components/organInfo.vue

@@ -45,15 +45,21 @@
           ></el-input>
         </el-form-item>
         <el-form-item label="联系人手机号" prop="phone"
-          :rules="[{ required: true, message: '请输入联系人手机号', trigger: 'blur' }]">
+          :rules="[{ required: true, message: '请输入联系人手机号', trigger: 'blur' },
+            { pattern: /^1[3456789]\d{9}$/, message: '请输入正确的手机号', trigger: 'blur' }]">
           <el-input
             v-model.trim="form.phone"
             size="small"
+            :max="11"
+            :min="11"
+            type="number"
+            style="width: 184px"
             placeholder="请输入联系人手机号"
           ></el-input>
         </el-form-item>
         <el-form-item label="机构邮箱" prop="email"
-          :rules="[{ required: true, message: '请输入机构邮箱', trigger: 'blur' }]">
+          :rules="[{ required: true, message: '请输入机构邮箱', trigger: 'blur' },
+            { pattern: /^\w+((.\w+)|(-\w+))@[A-Za-z0-9]+((.|-)[A-Za-z0-9]+).[A-Za-z0-9]+$/, message: '请输入正确的邮箱格式', trigger: 'blur' }]">
           <el-input
             v-model.trim="form.email"
             size="small"
@@ -68,10 +74,19 @@
             placeholder="请输入机构客服电话"
           ></el-input>
         </el-form-item>
+        <el-form-item label="机构地址" prop="address">
+          <el-input
+            v-model.trim="form.address"
+            size="small"
+            placeholder="请输入机构地址"
+          ></el-input>
+        </el-form-item>
         <el-form-item label="商品描述" prop="remark">
           <el-input
             type="textarea"
             size="small"
+            show-word-limit
+            :max="200"
             v-model.trim="form.remark"
           ></el-input>
         </el-form-item>
@@ -96,16 +111,29 @@ export default {
         contacts: null,
         phone: null,
         email: null,
+        address: null,
         customerServicePhone: null,
         remark: null,
-      }
+      },
+      imageWidthM: 258,
+      imageHeightM: 74,
     };
   },
   mounted () {
   },
   methods: {
+    onSubmit() {
+      let state = false
+      this.$refs.form.validate(_ => {
+        state = _
+      })
+      return state
+    },
+    getValues() { // 获取数据
+      return this.form
+    },
     handleAvatarSuccess(res) {
-      this.form.image = res.data.url;
+      this.form.logo = res.data.url;
     },
     beforeAvatarUpload(file) {
       const imageType = {
@@ -154,12 +182,6 @@ export default {
       }
       return isImage && isLt2M && isSize;
     },
-    onCancel () {
-      this.$store.dispatch('delVisitedViews', this.$route)
-      this.$router.push({
-        path: "/organManager/organList"
-      });
-    }
   },
 };
 </script>

+ 28 - 44
src/views/organManager/components/rateSetting.vue

@@ -7,69 +7,53 @@
         :closable="false"
         style="margin-bottom: 20px"
       ></el-alert>
-      <el-form ref="form" :model="form" label-width="140px" size="small" :inline="true">
-        <el-form-item label="月度会员分润金额" prop="sn"
-          :rules="[{ required: true, message: '请输入月度会员分润金额', trigger: 'blur' }]">
+      <el-form ref="form" :model="form" label-width="120px" size="small" :inline="true">
+        <el-form-item label="手续费费率" prop="chargeRate"
+          :rules="[{ required: true, message: '请输入手续费费率', trigger: 'blur' },
+            { type: 'number', message: '手续费费率必须为数字值' }]">
           <el-input
             size="small"
-            placeholder="请输入月度会员分润金额"
+            :disabled="isDisabled"
+            v-model.number="form.chargeRate"
+            placeholder="请输入手续费费率"
             style="width: 238px;"
+            type="number"
           >
-            <div slot="append">元/月</div>
+            <div slot="append"></div>
           </el-input>
         </el-form-item>
-        <el-form-item label="季度会员分润金额" prop="sn">
-          <el-input
-            size="small"
-            placeholder="请输入季度会员分润金额"
-            style="width: 238px;"
-          >
-            <div slot="append">元/季</div>
-          </el-input>
-        </el-form-item>
-        <el-form-item label="半年会员分润金额" prop="sn">
-          <el-input
-            size="small"
-            placeholder="请输入半年会员分润金额"
-            style="width: 238px;"
-          >
-            <div slot="append">元/半年</div>
-          </el-input>
-        </el-form-item>
-        <el-form-item label="年度会员分润金额" prop="sn">
-          <el-input
-            size="small"
-            placeholder="请输入年度会员分润金额"
-            style="width: 238px;"
-          >
-            <div slot="append">元/年</div>
-          </el-input>
-        </el-form-item>
-        <el-form-item label="可用教材" prop="serveId">
-          <el-select
-            v-model.trim="form.serveId"
-            placeholder="请选择可用教材"
-            style="width: 238px !important"
-          >
-          </el-select>
-        </el-form-item>
       </el-form>
   </div>
 </template>
 
 <script>
 export default {
-  name: 'serviceManger',
+  props: ['type'],
   data () {
-    const query = this.$route.query
     return {
-      payType: query.type,
-      form: {}
+      form: {
+        chargeRate: null
+      }
     };
   },
+  computed: {
+    isDisabled() {
+      return this.type == 'setting' ? true : false
+    }
+  },
   mounted () {
   },
   methods: {
+    onSubmit() {
+      let status = false
+      this.$refs.form.validate(_ => {
+        status = _
+      })
+      return status
+    },
+    getValues() {
+      return this.form
+    },
   },
 };
 </script>

+ 42 - 14
src/views/organManager/components/roomPrice.vue

@@ -11,33 +11,28 @@
         <el-table :data="dataList"
                   style="width:100% !important;"
                   :header-cell-style="{background:'#EDEEF0',color:'#444'}">
-          <el-table-column prop="name"
-                           label="流量包">
-          </el-table-column>
-          <el-table-column prop="onlineClassesUnitPrice"
-                           label="合同价">
+          <el-table-column label="流量包">
             <template slot-scope="scope">
-              <div>
-                <el-input v-model.trim="scope.row.onlineClassesUnitPrice"></el-input>
-              </div>
+              {{ scope.row.minuteUpLimit || 0 }}分钟
             </template>
           </el-table-column>
-          <el-table-column prop="offlineClassesUnitPrice"
-                           label="原价(元)">
+          <el-table-column prop="contractPrice" label="合同价">
             <template slot-scope="scope">
-              <div>
-                <el-input v-model.trim="scope.row.offlineClassesUnitPrice"></el-input>
-              </div>
+              <el-input v-model.trim="scope.row.contractPrice" placeholder="请输入合同价" type="number"></el-input>
             </template>
           </el-table-column>
+          <el-table-column prop="price" label="原价(元)">
+          </el-table-column>
         </el-table>
       </el-col>
   </div>
 </template>
 
 <script>
+
+import { queryPage as cloudQueryPage } from '@/views/platformManager/cloudTrafficPackage/api'
 export default {
-  name: 'serviceManger',
+  props: ['type'],
   data () {
     const query = this.$route.query
     return {
@@ -46,8 +41,41 @@ export default {
     };
   },
   mounted () {
+    this.__init()
+  },
+  computed: {
+    isDisabled() {
+      return this.type == 'setting' ? true : false
+    }
   },
   methods: {
+    async __init() {
+      try {
+        const res = await cloudQueryPage({ page: 1, rows: 999 })
+        const result = res.data?.rows || []
+        for(let item of result) {
+          this.dataList.push({
+            id: item.id,
+            minuteUpLimit: item.minuteUpLimit,
+            price: item.price,
+            contractPrice: null, // 合同价
+          })
+        }
+      } catch(e) {
+        console.log(e)
+      }
+    },
+    onSubmit() {
+      return true
+      // let status = false
+      // this.$refs.form.validate(_ => {
+      //   status = _
+      // })
+      // return status
+    },
+    getValues() {
+      return this.dataList
+    },
   },
 };
 </script>

+ 75 - 15
src/views/organManager/components/roomRules.vue

@@ -8,11 +8,16 @@
         style="margin-bottom: 20px"
       ></el-alert>
       <el-form ref="form" :model="form" label-width="200px" size="small" :inline="true">
-        <el-form-item label="云教室人数上限(含老师)" prop="sn"
-          :rules="[{ required: true, message: '请输入云教室人数上限', trigger: 'blur' }]">
+        <el-form-item label="云教室人数上限(含老师)" prop="cloud_room_up_limit"
+          :rules="[{ required: true, message: '请输入云教室人数上限', trigger: 'blur' },
+            { type: 'number', message: '云教室人数上限必须为数字值', trigger: 'blur' }]">
           <el-input
             size="small"
             placeholder="请输入云教室人数上限"
+            v-model.number="form.cloud_room_up_limit"
+            :disabled="isDisabled"
+            @blur="onUpLimitChange"
+            type="number"
             style="width: 238px;"
           >
             <div slot="append">人</div>
@@ -20,18 +25,14 @@
         </el-form-item>
       </el-form>
       <el-col :lg="12" :md="18" :sm="18" :xs="24">
-        <el-table :data="dataList"
+        <el-table :data="form.roomConfig"
                   style="width:100% !important;"
                   :header-cell-style="{background:'#EDEEF0',color:'#444'}">
-          <el-table-column prop="name"
-                           label="人数">
+          <el-table-column prop="num" label="人数">
           </el-table-column>
-          <el-table-column prop="onlineClassesUnitPrice"
-                           label="每分钟扣费标准">
+          <el-table-column prop="price" label="每分钟扣费标准">
             <template slot-scope="scope">
-              <div>
-                <el-input v-model.trim="scope.row.onlineClassesUnitPrice"></el-input>
-              </div>
+              <el-input-number v-model.number="scope.row.price" style="width: 184px;" :disabled="isDisabled" :min="0" :controls="false" placeholder="请输入合同价" size="small"></el-input-number>
             </template>
           </el-table-column>
         </el-table>
@@ -41,21 +42,80 @@
 
 <script>
 export default {
-  name: 'serviceManger',
+  props: ['type'],
   data () {
-    const query = this.$route.query
     return {
-      payType: query.type,
-      dataList: [],
+      form: {
+        cloud_room_up_limit: null,
+        roomConfig: []
+        // cloud_room_config: {}
+      },
     };
   },
   mounted () {
   },
+  computed: {
+    isDisabled() {
+      return this.type == 'setting' ? true : false
+    }
+  },
   methods: {
+    onUpLimitChange() {
+      const form = this.form
+      if(form.cloud_room_up_limit > 0) {
+        const count = form.cloud_room_up_limit || 0
+        const roomLength = form.roomConfig.length || 0
+        if(count - roomLength > 0) {
+          const diff = count - roomLength
+          for(let i = 1; i < diff; i++) {
+            form.roomConfig.push({
+              num: roomLength + 1 + i,
+              price: undefined
+            })
+          }
+        } else {
+          const diff = roomLength - count + 1
+          console.log(roomLength, diff, 'diff')
+          form.roomConfig.splice(roomLength - diff, diff)
+          this.$forceUpdate()
+        }
+      } else {
+        form.roomConfig = []
+      }
+
+      form.roomConfig.forEach(room => {
+        console.log(typeof room.price)
+      });
+    },
+    onSubmit() {
+      let status = false
+      this.$refs.form.validate(_ => {
+        status = _
+      })
+      return status
+    },
+    getValues() {
+      const { roomConfig, cloud_room_up_limit } = this.form
+      let cloud_room_config = {}
+      roomConfig.forEach(room => {
+        // if(typeof room.price == 'number') {
+
+        // }
+        cloud_room_config[room.num] = room.price
+      });
+      return {
+        cloud_room_rule: {
+          cloud_room_up_limit,
+          cloud_room_config
+        }
+      }
+    },
   },
 };
 </script>
 <style lang='scss' scoped>
-
+/deep/.el-input-number .el-input__inner {
+  text-align: left;
+}
 
 </style>

+ 41 - 32
src/views/organManager/index.vue

@@ -28,34 +28,30 @@
           :picker-options="{ firstDayOfWeek: 1 }"
         ></el-date-picker>
       </el-form-item>
-      <el-form-item prop="courseViewType">
+      <el-form-item prop="createdName">
+        <el-input v-model="searchForm.createdName" placeholder="请输入添加人"></el-input>
+      </el-form-item>
+      <el-form-item prop="payState">
         <el-select
-          v-model.trim="searchForm.courseViewType"
+          v-model.trim="searchForm.payState"
           filterable
-          placeholder="请选择添加人"
+          placeholder="请选择支付状态"
           clearable
         >
-          <!-- <el-option
-            :label="item.label"
-            :value="item.value"
-            v-for="item in courseViewTypeList"
-            :key="item.value"
-          ></el-option> -->
+          <el-option label="未缴费" :value="0"></el-option>
+          <el-option label="已缴费" :value="1"></el-option>
         </el-select>
       </el-form-item>
-      <el-form-item prop="courseViewType">
+      <el-form-item prop="state">
         <el-select
-          v-model.trim="searchForm.courseViewType"
+          v-model.trim="searchForm.state"
           filterable
           placeholder="请选择机构状态"
           clearable
         >
-          <!-- <el-option
-            :label="item.label"
-            :value="item.value"
-            v-for="item in courseViewTypeList"
-            :key="item.value"
-          ></el-option> -->
+          <!-- <el-option label="草稿" :value="0"></el-option> -->
+          <el-option label="启动" :value="1"></el-option>
+          <el-option label="停用" :value="2"></el-option>
         </el-select>
       </el-form-item>
       <el-form-item>
@@ -73,25 +69,31 @@
       >
         <el-table-column align="center" prop="id" label="机构编号">
         </el-table-column>
-        <el-table-column align="center" label="机构名称" prop="serveName">
-        </el-table-column>
-        <el-table-column align="center" label="联系人" prop="productName">
+        <el-table-column align="center" label="机构名称" prop="name">
         </el-table-column>
-        <el-table-column align="center" label="联系人电话" prop="productName">
+        <el-table-column align="center" label="联系人" prop="contacts">
         </el-table-column>
-        <el-table-column align="center" label="服务" prop="productName">
+        <el-table-column align="center" label="联系人电话" prop="phone">
         </el-table-column>
-        <el-table-column align="center" label="人数" prop="productName">
+        <el-table-column align="center" label="服务" prop="serveName">
         </el-table-column>
-        <el-table-column align="center" label="有效期到期时间" prop="productName">
+        <el-table-column align="center" label="人数" prop="studentUpLimit">
         </el-table-column>
-        <el-table-column align="center" label="网络教室剩余时长" prop="productName">
+        <el-table-column align="center" label="有效期到期时间" prop="expireDate">
         </el-table-column>
-        <el-table-column align="center" label="缴费状态" prop="productName">
+        <!-- <el-table-column align="center" label="网络教室剩余时长" prop="productName">
+        </el-table-column> -->
+        <el-table-column align="center" label="缴费状态" prop="payState">
+          <template slot-scope="scope">
+            {{ scope.row.payState | organPayState }}
+          </template>
         </el-table-column>
-        <el-table-column align="center" label="添加人" prop="productName">
+        <el-table-column align="center" label="添加人" prop="createdName">
         </el-table-column>
-        <el-table-column align="center" label="机构状态" prop="productName">
+        <el-table-column align="center" label="机构状态" prop="state">
+          <template slot-scope="scope">
+            {{ scope.row.state | organState }}
+          </template>
         </el-table-column>
         <el-table-column align="center" label="操作">
           <template slot-scope="scope">
@@ -136,9 +138,14 @@
 </template>
 <script>
 import pagination from "@/components/Pagination/index";
-import { platformServeQueryPage,platformServeDelete } from "./api";
+import { tenantInfoQueryPage ,platformServeDelete } from "./api";
+import { getTimes } from "@/utils";
 const initSearch = {
-  search: null
+  search: null,
+  state: null,
+  createTimer: [],
+  payState: null,
+  createdName: null,
 };
 export default {
   components: { pagination },
@@ -161,8 +168,10 @@ export default {
   methods: {
     async getList() {
       try {
-        const res = await platformServeQueryPage({
-          ...this.searchForm,
+        let { createTimer, ...reset } = this.searchForm;
+        const res = await tenantInfoQueryPage({
+          ...reset,
+          ...getTimes(createTimer, ["startDate", "endDate"], "YYYY-MM-DD"),
           page: this.pageInfo.page,
           rows: this.pageInfo.limit,
         });

+ 61 - 15
src/views/organManager/organOperation.vue

@@ -15,17 +15,17 @@
         </el-col>
       </div>
       <!-- 机构基本信息 -->
-      <organInfo v-show="active == 0" />
-      <!-- 产品定价 -->
-      <openService v-show="active == 1" />
-      <roomPrice v-show="active == 1" />
-      <memberSetting v-show="active == 1" />
-      <roomRules v-show="active == 1" />
-      <rate-setting v-show="active == 1" />
-
+      <organInfo ref="organInfo" v-show="active == 0" />
+      <!-- 产品定价 确认设置 -->
+      <div v-show="[1, 2].includes(active)">
+        <openService ref="openService" :type="getType" />
+        <memberSetting ref="memberSetting" :type="getType" />
+        <roomRules ref="roomRules" :type="getType" />
+        <rateSetting ref="rateSetting" :type="getType" />
+      </div>
       <div style="padding-left: 120px;display: flex;width: 100%;">
         <el-button type="primary" size="small" v-if="active > 0" @click="active -= 1">上一步</el-button>
-        <el-button type="primary" size="small" @click="onNext">下一步</el-button>
+        <el-button type="primary" size="small" @click="onNext">{{ active >= 2 ? '提交' : '下一步' }}</el-button>
       </div>
     </div>
   </div>
@@ -34,25 +34,71 @@
 <script>
 import organInfo from './components/organInfo'
 import openService from './components/openService'
-import roomPrice from './components/roomPrice'
 import memberSetting from './components/memberSetting'
 import roomRules from './components/roomRules'
-import RateSetting from './components/rateSetting.vue'
+import rateSetting from './components/rateSetting'
+import { tenantInfoAdd } from './api'
 export default {
   name: 'serviceManger',
-  components: { organInfo, openService, roomPrice, memberSetting, roomRules, RateSetting },
+  components: { organInfo, openService, memberSetting, roomRules, rateSetting },
   data () {
     const query = this.$route.query
     return {
       payType: query.type,
-      active: 1, // 当前第几步
+      active: 0, // 当前第几步
     };
   },
   mounted () {
   },
+  computed: {
+    getType() {
+      return this.active == 2 ? 'setting' : null
+    }
+  },
   methods: {
-    onNext() {
-      this.active += 1
+    async onNext() {
+      if(this.active == 0) {
+        const organStatus = await this.$refs.organInfo.onSubmit()
+        console.log(organStatus)
+        if(organStatus) {
+          this.active += 1
+        }
+      } else if(this.active == 1) {
+        const openStatus = await this.$refs.openService.onSubmit()
+        const memberStatus = await this.$refs.memberSetting.onSubmit()
+        const ruleStatus = await this.$refs.roomRules.onSubmit()
+        const rateStatus = await this.$refs.rateSetting.onSubmit()
+        console.log('验证中')
+        if(openStatus && memberStatus && ruleStatus && rateStatus) {
+          this.active += 1
+        }
+      } else if(this.active == 2) {
+        // 处理提交
+        const organData = await this.$refs.organInfo.getValues()
+        const openData = await this.$refs.openService.getValues()
+        const memberData = await this.$refs.memberSetting.getValues()
+        const ruleData = await this.$refs.roomRules.getValues()
+        const rateData = await this.$refs.rateSetting.getValues()
+        const { member_config, teachingMaterialId } = memberData
+        let config = {
+          member_config,
+          ruleData
+        }
+        let params = {
+          ...organData,
+          productInfo: openData,
+          config: {
+            config: JSON.stringify(config),
+            teachingMaterialId: teachingMaterialId.join(','),
+            ...rateData
+          }
+        }
+        console.log(params)
+        try {
+          const res = await tenantInfoAdd(params)
+          console.log(res)
+        } catch(e) {}
+      }
     },
     onCancel () {
       this.$store.dispatch('delVisitedViews', this.$route)