lex-xin 3 年之前
父节点
当前提交
df6c426974

+ 1 - 0
package.json

@@ -77,6 +77,7 @@
     "babel-polyfill": "^6.26.0",
     "chalk": "2.4.2",
     "connect": "3.6.6",
+    "element-theme-chalk": "^2.15.6",
     "eslint": "5.15.3",
     "eslint-plugin-vue": "5.2.2",
     "html-webpack-plugin": "3.2.0",

+ 10 - 0
src/assets/element-variables.scss

@@ -0,0 +1,10 @@
+$--color-primary: #409EFF !default;
+// $--color-primary-light-1: mix($--color-white, $--color-primary, 10%) !default; /* 53a8ff */
+// $--color-primary-light-2: mix($--color-white, $--color-primary, 20%) !default; /* 66b1ff */
+// $--color-primary-light-3: mix($--color-white, $--color-primary, 30%) !default; /* 79bbff */
+// $--color-primary-light-4: mix($--color-white, $--color-primary, 40%) !default; /* 8cc5ff */
+// $--color-primary-light-5: mix($--color-white, $--color-primary, 50%) !default; /* a0cfff */
+// $--color-primary-light-6: mix($--color-white, $--color-primary, 60%) !default; /* b3d8ff */
+// $--color-primary-light-7: mix($--color-white, $--color-primary, 70%) !default; /* c6e2ff */
+// $--color-primary-light-8: mix($--color-white, $--color-primary, 80%) !default; /* d9ecff */
+// $--color-primary-light-9: mix($--color-white, $--color-primary, 90%) !default; /* ecf5ff */

+ 2 - 0
src/main.js

@@ -31,6 +31,8 @@ import './theme/index.css'
 import locale from 'element-ui/lib/locale/lang/zh-CN' // lang i18n
 
 import '@/styles/index.scss' // global css
+
+import '@/assets/element-variables.scss'
 import App from './App'
 import store from './store'
 import installComponents from '@/components/install'

+ 2 - 0
src/router/index.js

@@ -495,6 +495,8 @@ export const asyncRoutes = {
   specialDeault:() => import('@/views/baseRulesManager/special.vue'),
   // 机构设置
   tenantInfoSetting:() => import('@/views/tenantSetting/tenantInfo.vue'),
+  // 机构交易管理
+  tenantTradeManager:() => import('@/views/tenantSetting/tenantTradeManager.vue'),
 
 }
 

+ 9 - 2
src/store/modules/user.js

@@ -1,5 +1,5 @@
 import { login, logout, getInfo } from '@/api/user'
-import { getToken, setToken, removeToken, removeCrossToken, setCrossToken } from '@/utils/auth'
+import { getToken, setToken, removeToken, removeCrossToken, setCrossToken, removeTenant } from '@/utils/auth'
 import { tenantInfoQueryPage, tenantInfoInfo } from '@/views/organManager/api'
 import { resetRouter } from '@/router'
 // import qs from 'qs'
@@ -58,6 +58,8 @@ async function tenantQueryPage(id) {
     const info = await tenantInfoInfo({id: tenantId})
     sessionStorage.setItem('tenantId', info.data.id)
     sessionStorage.setItem('tenantName', info.data.name)
+    sessionStorage.setItem('tenantLogo', info.data.logo)
+    sessionStorage.setItem('tenantStatus', 'on') // 判断是否此状态,没有的话,刷新页面会重新请求页面
   } catch(e) {}
 }
 
@@ -102,7 +104,10 @@ const actions = {
           const isSuperAdmin = data.data.isSuperAdmin
           const roles = data.data.roles
           const tenantId = data.data.tenantId
-          await tenantQueryPage(tenantId)
+          const tenantStatus = sessionStorage.getItem('tenantStatus')
+          if(tenantStatus != 'on') {
+            await tenantQueryPage(tenantId)
+          }
           sessionStorage.setItem('baseTenantId', tenantId)
           commit('SET_NAME', username)
           commit('SET_AVATAR', avatar)
@@ -126,6 +131,7 @@ const actions = {
         removeToken()
         removeCrossToken()
         resetRouter()
+        removeTenant() // 移除机构信息
         commit('SET_NAME', '')
         resolve()
       }).catch(error => {
@@ -140,6 +146,7 @@ const actions = {
       commit('SET_TOKEN', '')
       removeToken()
       removeCrossToken()
+      removeTenant() // 移除机构信息
       resolve()
     })
   }

+ 3 - 1
src/styles/variables.scss

@@ -13,7 +13,8 @@ $subMenuActiveBg:#EEF4F4;
 
 $sideBarWidth: 195px;
 /* 改变主题色变量 */
-$--color-primary: rgb(19, 129, 122);
+// $--color-primary: rgb(19, 129, 122);
+$--color-primary:red;
 // the :export directive is the magic sauce for webpack
 // https://www.bluematador.com/blog/how-to-share-variables-between-js-and-sass
 :export {
@@ -26,4 +27,5 @@ $--color-primary: rgb(19, 129, 122);
   subMenuBg: $subMenuBg;
   subMenuHover: $subMenuHover;
   sideBarWidth: $sideBarWidth;
+  --color-primary: $--color-primary;
 }

+ 9 - 0
src/utils/auth.js

@@ -32,6 +32,15 @@ export function removeToken () {
   return Cookies.remove(TokenKey)
 }
 
+export function removeTenant() {
+  // 移除跟机构相关信息
+  sessionStorage.removeItem('tenantId')
+  sessionStorage.removeItem('tenantName')
+  sessionStorage.removeItem('tenantLogo')
+  sessionStorage.removeItem('tenantStatus')
+  sessionStorage.removeItem('baseTenantId')
+}
+
 export function setCrossToken (token) {
   return Cookies.set(CrossTokenKey, token, { domain: getCookieDomain() })
 }

+ 0 - 0
src/views/adapayAccount/bankJson.js → src/utils/bankJson.js


+ 0 - 0
src/views/adapayAccount/cityJson.js → src/utils/cityJson.js


+ 6 - 0
src/utils/searchArray.js

@@ -92,7 +92,13 @@ export const orderStatus = [
   { value: 'ADD_STUDENT', label: '进行中乐团加学员' },
   { value: 'REPLACEMENT', label: '乐器置换' },
   { value: "OTHER", label: "其他" },
+]
 
+// 机构交易类型
+export const tenantStatus = [
+  { value: "TENANT_OPEN", label: '机构开通缴费' },
+  { value: "TENANT_RENEW", label: '机构续费' },
+  { value: "CLOUD_TEACHER", label: '激活团练宝' }
 ]
 
 // 交易状态

+ 0 - 1
src/views/accompanyManager/accompanyBuys.vue

@@ -56,7 +56,6 @@
           @click="onExport"
           type="primary"
           v-permission="'export/studentBuyPractice'"
-          style="background-color: #14928a; border: 1px solid #14928a"
           >导出</el-button
         >
       </el-form-item>

+ 2 - 2
src/views/adapayAccount/form.vue

@@ -170,8 +170,8 @@
 </template>
 
 <script>
-import { cityJson } from "./cityJson";
-import { bankJson } from "./bankJson";
+import { cityJson } from "../../utils/cityJson";
+import { bankJson } from "../../utils/bankJson";
 import { getToken } from "@/utils/auth";
 import load from '@/utils/loading'
 import { createMember, updateMember } from './api.js'

+ 2 - 2
src/views/adapayAccount/index.vue

@@ -198,8 +198,8 @@ import pagination from "@/components/Pagination/index";
 import AccountForm from './form'
 import { queryPageList, createSettleAccount, updateMonthMaxReceipt } from './api.js'
 import { getPaymentConfigs } from "../chargeManager/api";
-import { cityJson } from './cityJson'
-import { bankJson } from './bankJson'
+import { cityJson } from "../../utils/cityJson";
+import { bankJson } from "../../utils/bankJson";
 import cleanDeep from 'clean-deep'
 const initSearch = {
   memberId: null,

+ 1 - 2
src/views/afterSchoolManager/afterSchoolTeach.vue

@@ -98,8 +98,7 @@
                      type="primary">重置</el-button>
           <el-button @click="onExport"
                      type="primary"
-                     v-permission="'export/exercisesSituations'"
-                     style=" background: #14928a; border:1px solid #14928a;">导出</el-button>
+                     v-permission="'export/exercisesSituations'">导出</el-button>
         </el-form-item>
       </el-form>
       <div class="tableWrap">

+ 1 - 3
src/views/categroyManager/insideSetting/adminManager.vue

@@ -4,9 +4,7 @@
       <div class="squrt"></div>系统权限管理
     </h2>
     <div class="m-core">
-      <div @click="onAdminOperation('create')"
-           v-permission="'role/add'"
-           class='newBand'>添加</div>
+      <el-button  style="margin-bottom: 20px;" type="primary" v-permission="'role/add'" @click="onAdminOperation('create')" icon="el-icon-plus">添加</el-button>
       <!-- 列表 -->
       <div class="tableWrap">
         <el-table :data='tableList'

+ 8 - 0
src/views/organManager/api.js

@@ -30,3 +30,11 @@ export const tenantInfoInfo = data => request2({
   url: '/api-web/tenantInfo/info/' + data.id,
   method: 'get'
 })
+
+// 根据父节点查询下一级子节点列表(递归)
+export const areaQueryTree = (data) => request2({
+  url: '/api-web/area/queryTree',
+  method: 'get',
+  params: data
+})
+

+ 7 - 3
src/views/organManager/components/memberSetting.vue

@@ -7,7 +7,7 @@
         :closable="false"
         style="margin-bottom: 20px"
       ></el-alert>
-      <el-form ref="form" :model="form" label-width="140px"  :inline="true">
+      <el-form ref="form" label-position="top" :model="form" label-width="140px"  :inline="true">
         <el-form-item label="月度会员激活价" prop="month_divide"
           :rules="[{ required: true, message: '请输入月度会员激活价', trigger: 'blur' },
             { type: 'number', message: '月度会员激活价必须为数字值' }]">
@@ -187,6 +187,10 @@ export default {
 };
 </script>
 <style lang='scss' scoped>
-
-
+.el-tag + .el-tag {
+  margin-left: 10px;
+}
+.el-input, .el-select {
+  width: 300px !important;
+}
 </style>

+ 4 - 8
src/views/organManager/components/openService.vue

@@ -7,14 +7,13 @@
         :closable="false"
         style="margin-bottom: 20px"
       ></el-alert>
-      <el-form ref="form" :model="form" label-width="140px"  :inline="true">
+      <el-form ref="form" label-position="top" :model="form" label-width="140px"  :inline="true">
         <el-form-item label="服务名称" prop="serveId"
           :rules="[{ required: true, message: '请选择服务名称', trigger: 'change' }]">
           <el-select
             v-model="form.serveId"
             :disabled="isDisabled"
             placeholder="请选择服务名称"
-            style="width: 238px !important"
             @change="onProductChange"
           >
             <el-option v-for="item in productList" :key="item.id"
@@ -27,7 +26,6 @@
             v-model="form.serveMode"
             :disabled="isDisabled"
             placeholder="请选择付费模式"
-            style="width: 238px !important"
             @change="onModeChange"
           >
             <el-option v-for="(item, index) in modeList" :key="index"
@@ -40,7 +38,6 @@
             placeholder="请选择学员上限"
             :disabled="isDisabled"
             @change="onStudentUpLimitChange"
-            style="width: 238px !important"
             v-model="form.serveDetailId"
           >
             <el-option v-for="(item, index) in studentUpList" :key="index"
@@ -55,7 +52,6 @@
             placeholder="请输入合同价"
             v-model.number="form.contractPrice"
             type="number"
-            style="width: 238px;"
           >
             <div slot="append">元/{{ unitSuffix }}</div>
           </el-input>
@@ -67,7 +63,6 @@
             placeholder="请输入原价"
             disabled
             v-model.number="form.originalPrice"
-            style="width: 238px;"
           >
             <div slot="append">元/{{ unitSuffix }}</div>
           </el-input>
@@ -198,6 +193,7 @@ export default {
 };
 </script>
 <style lang='scss' scoped>
-
-
+.el-input, .el-select {
+  width: 300px !important;
+}
 </style>

+ 127 - 36
src/views/organManager/components/organInfo.vue

@@ -8,41 +8,43 @@
         style="margin-bottom: 20px"
       ></el-alert>
       <!-- label-position="top" -->
-      <el-form ref="form"  :model="form" label-width="140px" :inline="true">
+      <el-form ref="form" label-position="top" :model="form" label-width="140px" :inline="true">
         <el-col :span="24">
           <el-form-item label="机构LOGO" prop="logo"
             :rules="[{ required: true, message: '请上传机构LOGO', trigger: 'blur, change' }]">
-            <el-upload
-              class="avatar-uploader"
-              action="/api-web/uploadFile"
-              accept=".png"
-              :headers="headers"
-              :show-file-list="false"
-              :disabled="isDisabled"
-              :on-success="handleAvatarSuccess"
-              :before-upload="beforeAvatarUpload"
-            >
-              <img v-if="form.logo" :src="form.logo" class="avatar" />
-              <i v-else class="el-icon-plus avatar-uploader-icon"></i>
-            </el-upload>
-            <div class="tips" v-show="!isDisabled" style="line-height: 1;color: red;">图片尺寸:258x74;支持的格式:png;</div>
+            <div style="width: 300px !important">
+              <el-upload
+                class="avatar-uploader"
+                action="/api-web/uploadFile"
+                accept=".png"
+                :headers="headers"
+                :show-file-list="false"
+                :disabled="isDisabled"
+                :on-success="handleAvatarSuccess"
+                :before-upload="beforeAvatarUpload"
+              >
+                <img v-if="form.logo" :src="form.logo" class="avatar" />
+                <i v-else class="el-icon-plus avatar-uploader-icon"></i>
+              </el-upload>
+              <div class="tips" v-show="!isDisabled" style="line-height: 1;color: red;">图片尺寸:72x72;支持的格式:png;</div>
+            </div>
           </el-form-item>
-          <!-- <el-form-item label="整体风格" prop="theme"
-          :rules="[{ required: true, message: '请选择整体风格', trigger: 'change' }]">
+          <el-form-item label="主题" prop="theme" :rules="[{ required: true, message: '请选择主题', trigger: 'change' }]">
             <el-select
               v-model="form.theme"
               :disabled="isDisabled"
-              placeholder="请选择整体风格"
-              style="width: 238px !important"
+              placeholder="请选择主题"
             >
               <el-option label="大雅绿" value="green"></el-option>
             </el-select>
           </el-form-item>
           <el-form-item label="主题色" prop="themeColor" :rules="[{ required: true, message: '请选择主题色', trigger: 'change' }]">
-            <el-color-picker v-model="themeColor"></el-color-picker>
-          </el-form-item> -->
+            <div style="width: 300px !important">
+              <el-color-picker :disabled="isDisabled" v-model="form.themeColor"></el-color-picker>
+            </div>
+          </el-form-item>
         </el-col>
-        <el-form-item label="公司全称" prop="tsignName" v-show="tenantInfo != 'SETTING'"
+        <el-form-item label="公司全称" prop="tsignName" v-if="tenantInfo != 'SETTING'"
           :rules="[{ required: true, message: '请输入公司全称', trigger: 'blur' }]">
           <el-input
             v-model.trim="form.tsignName"
@@ -50,7 +52,7 @@
             placeholder="请输入公司全称"
           ></el-input>
         </el-form-item>
-        <el-form-item label="营业执照编号" prop="tsignCode" v-show="tenantInfo != 'SETTING'"
+        <el-form-item label="营业执照编号" prop="tsignCode" v-if="tenantInfo != 'SETTING'"
           :rules="[{ required: true, message: '请输入营业执照编号', trigger: 'blur' }]">
           <el-input
             v-model.trim="form.tsignCode"
@@ -58,12 +60,48 @@
             placeholder="请输入营业执照编号"
           ></el-input>
         </el-form-item>
-        <el-form-item label="机构名称" prop="name"
-          :rules="[{ required: true, message: '请输入机构名称', trigger: 'blur' }]">
+        <!-- <el-form-item label="所在城市" required>
+          <el-form-item prop="province" :rules="[{ required: true, message: '请选择省', trigger: 'change' }]" style="margin-right: 0;">
+            <el-select
+              v-model.trim="form.province"
+              filterable
+              placeholder="请选择省"
+              clearable
+              style="width: 90px !important;"
+              @change="onChangeProvince"
+            >
+              <el-option
+                v-for="item in provinceList"
+                :key="item.value"
+                :label="item.label"
+                :value="item.value"
+              ></el-option>
+            </el-select>
+          </el-form-item>
+          <el-form-item prop="city" :rules="[{ required: true, message: '请选择市', trigger: 'change' }]">
+            <el-select
+              v-model.trim="form.city"
+              filterable
+              style="width: 90px !important;"
+              placeholder="请选择市"
+              clearable
+            >
+              <el-option
+                v-for="item in cityList"
+                :key="item.value"
+                :label="item.label"
+                :value="item.value"
+              ></el-option>
+            </el-select>
+          </el-form-item>
+        </el-form-item> -->
+        <el-form-item label="机构简称" prop="name"
+          :rules="[{ required: true, message: '请输入机构简称', trigger: 'blur' }]">
           <el-input
             v-model.trim="form.name"
             :disabled="isDisabled"
-            placeholder="请输入机构名称"
+            :max="60"
+            placeholder="请输入机构简称"
           ></el-input>
         </el-form-item>
         <el-form-item label="机构联系人" prop="contacts"
@@ -83,7 +121,7 @@
             :disabled="isDisabled"
             type="number"
             oninput="if(value.length > 11)value=value.slice(0, 11)"
-            style="width: 184px"
+            style="width: 187px"
             placeholder="请输入联系人手机号"
           ></el-input>
         </el-form-item>
@@ -96,6 +134,7 @@
             placeholder="请输入机构邮箱"
           ></el-input>
         </el-form-item>
+        <!--  -->
         <el-form-item label="机构客服电话" prop="customerServicePhone">
           <el-input
             v-model.trim="form.customerServicePhone"
@@ -126,6 +165,10 @@
 
 <script>
 import { getToken } from "@/utils/auth";
+import {
+  areaQueryChild,
+  getParentArea,
+} from "@/api/specialSetting";
 export default {
   props: ['type', 'data', 'tenantInfo'],
   data () {
@@ -139,6 +182,8 @@ export default {
         logo: null,
         name: null,
         contacts: null,
+        province: null,
+        city: null, // 分部编号
         phone: null,
         email: null,
         address: null,
@@ -148,19 +193,34 @@ export default {
         themeColor: '#14928a'
       },
       payState: null,
-      imageWidthM: 258,
-      imageHeightM: 74,
+      imageWidthM: 72,
+      imageHeightM: 72,
+      provinceList: [],
+      cityList: []
     };
   },
-  mounted () {
+  async mounted () {
+    await this.getAreaList()
     if(this.data) {
       this.form = { ...this.data }
       this.payState = this.data.payState
     }
+    // 判断是否有城市编号
+    if(this.form.areaId) {
+      await getParentArea({ id: this.form.areaId }).then(async (res) => {
+        if (res.code == 200 && res.data) {
+          await this.getAreaList(res.data.id, () => {
+            this.form.province = res.data.id
+            this.form.city = this.form.areaId
+          });
+            this.branchStatus = true;
+        }
+      });
+    }
   },
   computed: {
     isDisabled() {
-      console.log(this.payState)
+      // console.log(this.payState)
       return this.type == 'setting' || this.payState == 1  ? true : false
     }
   },
@@ -172,7 +232,35 @@ export default {
       })
       return state
     },
+    onChangeProvince(val) {
+      this.form.city = null;
+      this.getAreaList(val);
+    },
+    getAreaList(parentId, callback) {
+      parentId = parentId ? parentId : 0;
+      areaQueryChild({ parentId: parentId }).then((res) => {
+        if (res.code == 200 && res.data) {
+          let tempData = [];
+          res.data.forEach((item) => {
+            tempData.push({
+              label: item.name,
+              value: item.id,
+            });
+          });
+          if (parentId) {
+            this.cityList = tempData;
+          } else {
+            this.provinceList = tempData;
+          }
+
+          if (callback && typeof callback == "function") {
+            callback();
+          }
+        }
+      });
+    },
     getValues() { // 获取数据
+      this.form.areaId = this.form.city;
       return this.form
     },
     handleAvatarSuccess(res) {
@@ -240,15 +328,18 @@ export default {
 .avatar-uploader-icon {
   font-size: 28px;
   color: #8c939d;
-  width: 258px;
-  height: 74px;
-  line-height: 74px;
+  width: 72px;
+  height: 72px;
+  line-height: 72px;
   text-align: center;
 }
 
+.el-input, .el-select, .el-textarea {
+  width: 300px !important;
+}
 .avatar {
-  width: 258px;
-  height: 74px;
+  width: 72px;
+  height: 72px;
   display: block;
 }
 </style>

+ 4 - 4
src/views/organManager/components/rateSetting.vue

@@ -7,12 +7,11 @@
         :closable="false"
         style="margin-bottom: 20px"
       ></el-alert>
-      <el-form ref="form" :model="form" label-width="120px"  :inline="true">
+      <el-form ref="form" label-position="top" :model="form" label-width="120px"  :inline="true">
         <el-form-item label="手续费费率" prop="chargeRate"
           :rules="[{ required: true, message: '请输入手续费费率', trigger: 'blur' },
             { type: 'number', message: '手续费费率必须为数字值' }]">
           <el-input
-            
             :disabled="isDisabled"
             v-model.number="form.chargeRate"
             placeholder="请输入手续费费率"
@@ -63,6 +62,7 @@ export default {
 };
 </script>
 <style lang='scss' scoped>
-
-
+.el-input, .el-select {
+  width: 300px !important;
+}
 </style>

+ 5 - 5
src/views/organManager/components/roomRules.vue

@@ -7,18 +7,16 @@
         :closable="false"
         style="margin-bottom: 20px"
       ></el-alert>
-      <el-form ref="form" :model="form" label-width="200px"  :inline="true">
+      <el-form ref="form" label-position="top" :model="form" label-width="200px"  :inline="true">
         <el-form-item label="云教室人数上限(含老师)" prop="cloud_room_up_limit"
           :rules="[{ required: true, message: '请输入云教室人数上限', trigger: 'blur' },
             { type: 'number', message: '云教室人数上限必须为数字值', trigger: 'blur' }]">
           <el-input
-            
             placeholder="请输入云教室人数上限"
             v-model.number="form.cloud_room_up_limit"
             :disabled="isDisabled"
             @blur="onUpLimitChange"
             type="number"
-            style="width: 238px;"
           >
             <div slot="append">人</div>
           </el-input>
@@ -32,7 +30,7 @@
           </el-table-column>
           <el-table-column prop="price" label="每分钟扣费标准">
             <template slot-scope="scope">
-              <el-input-number v-model.number="scope.row.price" style="width: 184px;" :disabled="isDisabled" :min="0" :controls="false" placeholder="请输入合同价" ></el-input-number>
+              <el-input-number v-model.number="scope.row.price" :disabled="isDisabled" :min="0" :controls="false" placeholder="请输入合同价" ></el-input-number>
             </template>
           </el-table-column>
         </el-table>
@@ -134,5 +132,7 @@ export default {
 /deep/.el-input-number .el-input__inner {
   text-align: left;
 }
-
+.el-input, .el-select, .el-input-number {
+  width: 300px !important;
+}
 </style>

+ 8 - 4
src/views/organManager/organOperation.vue

@@ -24,7 +24,7 @@
           <roomRules ref="roomRules" :data="config" :type="getType" />
           <rateSetting ref="rateSetting" :data="config" :type="getType" />
         </div>
-        <div style="padding-left: 140px;display: flex;width: 100%;" v-if="payType != 'look'">
+        <div style="padding-left: 0;display: flex;width: 100%;" v-if="payType != 'look'">
           <el-button type="primary"  v-if="active > 0" @click="active -= 1">上一步</el-button>
           <el-button type="primary"  @click="onNext">{{ active >= 2 ? '提交' : '下一步' }}</el-button>
         </div>
@@ -69,9 +69,10 @@ export default {
         }
         const res = await tenantInfoInfo({ id: this.id })
         const { config, productInfo, ...other } = res.data
-        this.config = config
+        const { theme, themeColor, ...con } = config
+        this.config = { ...con }
         this.productInfo = productInfo
-        this.info = { ...other }
+        this.info = { ...other, theme, themeColor }
         this.productInfo.payState = this.info.payState
       } catch(e) {}
     }
@@ -105,14 +106,17 @@ export default {
         const ruleData = await this.$refs.roomRules.getValues()
         const rateData = await this.$refs.rateSetting.getValues()
         const { member_config, teachingMaterialId } = memberData
+        const { theme, themeColor, ...con } = organData
         let config = {
           member_config,
           ...ruleData
         }
         let params = {
-          ...organData,
+          ...con,
           productInfo: openData,
           config: {
+            theme,
+            themeColor,
             config: JSON.stringify(config),
             teachingMaterialId: teachingMaterialId.join(','),
             ...rateData

+ 7 - 0
src/views/tenantSetting/api.js

@@ -0,0 +1,7 @@
+import request2 from '@/utils/request2'
+
+export const tenantOrderRecordQueryPage = (data) => request2({
+  url: '/api-web/tenantOrderRecord/queryPage',
+  method: 'post',
+  data,
+})

+ 58 - 0
src/views/tenantSetting/model/orderInfo.vue

@@ -0,0 +1,58 @@
+<template>
+  <div>
+    <el-alert title="基础信息" :closable="false" class="alert" type="info" />
+    <descriptions :column="3">
+      <descriptions-item label="交易流水号">121212</descriptions-item>
+      <descriptions-item label="订单号">梅赫梅特阿里通克fsdf</descriptions-item>
+      <descriptions-item label="订单时间">梅赫梅特阿里通克fsdf</descriptions-item>
+      <descriptions-item label="交易类型">梅赫梅特阿里通克fsdf</descriptions-item>
+      <descriptions-item label="交易状态">梅赫梅特阿里通克fsdf</descriptions-item>
+      <descriptions-item label="机构名称/编号">梅赫梅特阿里通克fsdf</descriptions-item>
+      <descriptions-item label="订单金额">梅赫梅特阿里通克fsdf</descriptions-item>
+      <descriptions-item label="支付金额">梅赫梅特阿里通克fsdf</descriptions-item>
+      <descriptions-item label="支付手续费">梅赫梅特阿里通克fsdf</descriptions-item>
+    </descriptions>
+
+    <el-alert title="订单详情" :closable="false" class="alert" style="margin-top: 20px;" type="info" />
+    <el-table
+        :data="tableList"
+        :header-cell-style="{ background: '#EDEEF0', color: '#444' }"
+      >
+      <el-table-column align="center" prop="id" label="产品名称">
+      </el-table-column>
+      <el-table-column align="center" label="产品类型" prop="name">
+      </el-table-column>
+      <el-table-column align="center" label="数量" prop="contacts">
+      </el-table-column>
+      <el-table-column align="center" label="单价" prop="phone">
+      </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>
+  </div>
+</template>
+
+<script>
+export default {
+  data() {
+    return {
+      tableList: []
+    }
+  }
+}
+</script>
+
+<style lang="less" scoped>
+.alert {
+  margin-bottom: 10px;
+}
+.description-title {
+  margin-bottom: 0;
+}
+.description-label {
+  width: 120px !important;
+}
+</style>

+ 10 - 3
src/views/tenantSetting/tenantInfo.vue

@@ -9,7 +9,7 @@
       <!-- 机构基本信息 -->
         <organInfo ref="organInfo" :data="info" type="update" tenantInfo="SETTING" />
 
-        <div style="padding-left: 140px;display: flex;width: 100%;">
+        <div style="display: flex;width: 100%;">
           <el-button type="primary"  @click="onNext">确认</el-button>
         </div>
     </div>
@@ -40,15 +40,22 @@ export default {
         const res = await tenantInfoInfo({ id: tenantId })
         this.status = true
         const { config, productInfo, ...other } = res.data
-        this.info = { ...other }
+        const { theme, themeColor, ...con } = config
+        this.info = { ...other, theme, themeColor }
       } catch (e) {}
     },
     async onNext() {
       const organStatus = await this.$refs.organInfo.onSubmit()
       if(!organStatus) return
       const organData = await this.$refs.organInfo.getValues()
+      const { theme, themeColor, ...con } = organData
+        let config = {
+          theme,
+          themeColor
+        }
       let params = {
-        ...organData
+        ...organData,
+        config
       }
       try {
           const res = await tenantInfoUpdate(params)

+ 243 - 0
src/views/tenantSetting/tenantTradeManager.vue

@@ -0,0 +1,243 @@
+<template>
+  <div class="m-container">
+    <h2>
+      <div class="squrt"></div>
+      机构交易管理
+    </h2>
+    <save-form
+      :inline="true"
+      class="searchForm"
+      ref="searchForm"
+      @submit="search"
+      @reset="reset"
+      :saveKey="'tenantTradeManager'"
+      :model.sync="searchForm"
+    >
+      <el-form-item prop="transNo">
+        <el-input
+          placeholder="交易流水号"
+          clearable
+          type="text"
+          v-model.trim="searchForm.transNo"
+        ></el-input>
+      </el-form-item>
+      <el-form-item prop="orderNo">
+        <el-input
+          placeholder="订单号"
+          clearable
+          type="text"
+          v-model.trim="searchForm.orderNo"
+        ></el-input>
+      </el-form-item>
+      <el-form-item prop="tenantId" v-if="baseTenantId < 0">
+        <!-- 小于0则是平台 -->
+        <el-select
+          v-model.trim="searchForm.tenantId"
+          filterable
+          multiple
+          collapse-tags
+          placeholder="机构名称"
+          clearable
+        >
+          <el-option v-for="(item, index) in  tenantList" :key="index" :label="item.name" :value="item.id"></el-option>
+        </el-select>
+      </el-form-item>
+      <el-form-item prop="orderType">
+        <el-select
+          v-model.trim="searchForm.orderType"
+          clearable
+          filterable
+          @clear="onClear('orderType')"
+          placeholder="交易类型"
+        >
+          <el-option
+            v-for="(item, index) in tenantStatus"
+            :key="index"
+            :label="item.label"
+            :value="item.value"
+          ></el-option>
+        </el-select>
+      </el-form-item>
+      <el-form-item prop="orderState">
+        <el-select
+          v-model.trim="searchForm.orderState"
+          clearable
+          filterable
+          @clear="onClear('orderState')"
+          placeholder="交易状态"
+        >
+          <el-option label="待支付" :value="0"></el-option>
+          <el-option label="已支付" :value="1"></el-option>
+        </el-select>
+      </el-form-item>
+      <el-form-item prop="createTimer">
+        <el-date-picker
+          v-model.trim="searchForm.createTimer"
+          type="daterange"
+          value-format="yyyy-MM-dd"
+          range-separator="至"
+          start-placeholder="入驻开始时间"
+          end-placeholder="入驻结束时间"
+          :picker-options="{ firstDayOfWeek: 1 }"
+        ></el-date-picker>
+      </el-form-item>
+      <el-form-item>
+        <el-button native-type="submit" type="danger">搜索</el-button>
+        <el-button native-type="reset" type="primary">重置</el-button>
+      </el-form-item>
+    </save-form>
+    <!-- 列表 -->
+    <div class="tableWrap">
+      <el-table
+        :data="tableList"
+        :header-cell-style="{ background: '#EDEEF0', color: '#444' }"
+      >
+        <el-table-column align="center" prop="transNo" label="交易流水号">
+        </el-table-column>
+        <el-table-column align="center" label="订单号" prop="orderNo">
+        </el-table-column>
+        <el-table-column align="center" label="订单时间" prop="payDate">
+        </el-table-column>
+        <el-table-column align="center" label="机构编号" prop="tenantId">
+        </el-table-column>
+        <el-table-column align="center" label="机构名称" prop="tenantName">
+        </el-table-column>
+        <el-table-column align="center" label="交易类型">
+          <template slot-scope="scope">
+            {{ scope.row.orderType }}
+          </template>
+        </el-table-column>
+        <el-table-column align="center" label="订单金额">
+          <template slot-scope="scope">
+            {{ scope.row.expectAmount | moneyFormat }}
+          </template>
+        </el-table-column>
+        <!-- <el-table-column align="center" label="网络教室剩余时长" prop="productName">
+        </el-table-column> -->
+        <el-table-column align="center" label="支付金额">
+          <template slot-scope="scope">
+            {{ scope.row.actualAmount | moneyFormat }}
+          </template>
+        </el-table-column>
+        <el-table-column align="center" label="交易状态">
+          <template slot-scope="scope">
+            {{ scope.row.orderState | tenantOrderStatus }}
+          </template>
+        </el-table-column>
+        <el-table-column align="center" label="操作">
+          <template slot-scope="scope">
+            <el-button
+              @click="openService(scope.row)"
+              v-permission="'tenantInfo/info'"
+              type="text"
+              >查看</el-button>
+          </template>
+        </el-table-column>
+      </el-table>
+      <pagination
+        :saveKey="'tenantTradeManager'"
+        sync
+        :total.sync="pageInfo.total"
+        :page.sync="pageInfo.page"
+        :limit.sync="pageInfo.limit"
+        :page-sizes="pageInfo.page_size"
+        @pagination="getList"
+      />
+    </div>
+
+    <el-dialog title="订单详情" :visible.sync="orderVisible" width="1200px">
+      <order-info />
+    </el-dialog>
+  </div>
+</template>
+<script>
+import pagination from "@/components/Pagination/index";
+import { tenantInfoQueryPage } from "../organManager/api";
+import { tenantOrderRecordQueryPage } from "./api";
+import { tenantStatus, dealStatus } from "@/utils/searchArray";
+import OrderInfo from './model/orderInfo'
+import { getTimes } from "@/utils";
+const initSearch = {
+  transNo: null,
+  orderNo: null,
+  tenantId: [],
+  orderType: null,
+  orderState: null,
+  createTimer: [],
+};
+export default {
+  components: { pagination, OrderInfo },
+  data() {
+    const baseTenantId = sessionStorage.getItem('baseTenantId')
+    return {
+      baseTenantId,
+      tenantStatus,
+      dealStatus,
+      tableList: [],
+      orderVisible: false,
+      pageInfo: {
+        // 分页规则
+        limit: 10, // 限制显示条数
+        page: 1, // 当前页
+        total: 0, // 总条数
+        page_size: [10, 20, 40, 50], // 选择限制显示条数
+      },
+      searchForm: { ...initSearch },
+      tenantList: []
+    };
+  },
+  async mounted() {
+    await this.getTenant()
+    this.getList();
+  },
+  methods: {
+    async getTenant() {
+      try {
+        const res = await tenantInfoQueryPage({ page: 1, rows: 999 }, )
+        this.tenantList = res.data?.rows || []
+      } catch(e) {}
+    },
+    async getList() {
+      try {
+        let { createTimer, tenantId, ...reset } = this.searchForm;
+        const res = await tenantOrderRecordQueryPage({
+          ...reset,
+          tenantId: tenantId.join(','),
+          ...getTimes(createTimer, ["startDate", "endDate"], "YYYY-MM-DD"),
+          page: this.pageInfo.page,
+          rows: this.pageInfo.limit,
+        });
+        this.pageInfo.total = res.data.total;
+        this.tableList = res.data.rows;
+      } catch (e) {}
+    },
+    search() {
+      this.pageInfo.page = 1;
+      this.$refs.searchForm.save(this.searchForm);
+      this.$refs.searchForm.save(this.pageInfo, "page");
+      this.getList();
+    },
+    reset() {
+      this.searchForm = { ...initSearch };
+      this.search();
+    },
+    openService(row) {
+      this.orderVisible = true
+    },
+  },
+  filters: {
+    tenantOrderStatus(val) {
+      const template = {
+        0: "待支付",
+        1: "已支付"
+      }
+      return template[val]
+    }
+  }
+};
+</script>
+<style lang="scss" scoped>
+.courseMask .el-dialog__body {
+  padding-bottom: 0;
+}
+</style>