Browse Source

Merge branch '11/24SAAS' of http://git.dayaedu.com/yonge/dy-admin-manager into 11/24SAAS

mo 3 years ago
parent
commit
3951ef79e1

+ 0 - 1
src/App.vue

@@ -65,7 +65,6 @@ body {
 }
 }
 </style>
 </style>
 <style lang="scss">
 <style lang="scss">
-$--color-primary: teal;
 .el-table {
 .el-table {
   width: 99% !important;
   width: 99% !important;
   border-left: 1px solid #ebeef5;
   border-left: 1px solid #ebeef5;

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

@@ -1,10 +0,0 @@
-$--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 */

+ 175 - 0
src/components/ThemePicker/index.vue

@@ -0,0 +1,175 @@
+<template>
+  <el-color-picker
+    v-model="theme"
+    :predefine="['#409EFF', '#1890ff', '#304156','#212121','#11a983', '#13c2c2', '#6959CD', '#f5222d', ]"
+    class="theme-picker"
+    popper-class="theme-picker-dropdown"
+  />
+</template>
+
+<script>
+const version = require('element-ui/package.json').version // element-ui version from node_modules
+const ORIGINAL_THEME = '#409EFF' // default color
+
+export default {
+  data() {
+    return {
+      chalk: '', // content of theme-chalk css
+      theme: ''
+    }
+  },
+  computed: {
+    defaultTheme() {
+      return this.$store.state.settings.theme
+    }
+  },
+  watch: {
+    defaultTheme: {
+      handler: function(val, oldVal) {
+        this.theme = val
+      },
+      immediate: true
+    },
+    async theme(val) {
+      const oldVal = this.chalk ? this.theme : ORIGINAL_THEME
+      if (typeof val !== 'string') return
+      const themeCluster = this.getThemeCluster(val.replace('#', ''))
+      const originalCluster = this.getThemeCluster(oldVal.replace('#', ''))
+      console.log(themeCluster, originalCluster)
+
+      const $message = this.$message({
+        message: '  Compiling the theme',
+        customClass: 'theme-message',
+        type: 'success',
+        duration: 0,
+        iconClass: 'el-icon-loading'
+      })
+
+      const getHandler = (variable, id) => {
+        return () => {
+          const originalCluster = this.getThemeCluster(ORIGINAL_THEME.replace('#', ''))
+          const newStyle = this.updateStyle(this[variable], originalCluster, themeCluster)
+
+          let styleTag = document.getElementById(id)
+          if (!styleTag) {
+            styleTag = document.createElement('style')
+            styleTag.setAttribute('id', id)
+            document.head.appendChild(styleTag)
+          }
+          styleTag.innerText = newStyle
+        }
+      }
+
+      if (!this.chalk) {
+        const url = `https://unpkg.com/element-ui@${version}/lib/theme-chalk/index.css`
+        await this.getCSSString(url, 'chalk')
+      }
+
+      const chalkHandler = getHandler('chalk', 'chalk-style')
+
+      chalkHandler()
+
+      const styles = [].slice.call(document.querySelectorAll('style'))
+        .filter(style => {
+          const text = style.innerText
+          return new RegExp(oldVal, 'i').test(text) && !/Chalk Variables/.test(text)
+        })
+      styles.forEach(style => {
+        const { innerText } = style
+        if (typeof innerText !== 'string') return
+        style.innerText = this.updateStyle(innerText, originalCluster, themeCluster)
+      })
+
+      this.$emit('change', val)
+
+      $message.close()
+    }
+  },
+
+  methods: {
+    updateStyle(style, oldCluster, newCluster) {
+      let newStyle = style
+      oldCluster.forEach((color, index) => {
+        newStyle = newStyle.replace(new RegExp(color, 'ig'), newCluster[index])
+      })
+      return newStyle
+    },
+
+    getCSSString(url, variable) {
+      return new Promise(resolve => {
+        const xhr = new XMLHttpRequest()
+        xhr.onreadystatechange = () => {
+          if (xhr.readyState === 4 && xhr.status === 200) {
+            this[variable] = xhr.responseText.replace(/@font-face{[^}]+}/, '')
+            resolve()
+          }
+        }
+        xhr.open('GET', url)
+        xhr.send()
+      })
+    },
+
+    getThemeCluster(theme) {
+      const tintColor = (color, tint) => {
+        let red = parseInt(color.slice(0, 2), 16)
+        let green = parseInt(color.slice(2, 4), 16)
+        let blue = parseInt(color.slice(4, 6), 16)
+
+        if (tint === 0) { // when primary color is in its rgb space
+          return [red, green, blue].join(',')
+        } else {
+          red += Math.round(tint * (255 - red))
+          green += Math.round(tint * (255 - green))
+          blue += Math.round(tint * (255 - blue))
+
+          red = red.toString(16)
+          green = green.toString(16)
+          blue = blue.toString(16)
+
+          return `#${red}${green}${blue}`
+        }
+      }
+
+      const shadeColor = (color, shade) => {
+        let red = parseInt(color.slice(0, 2), 16)
+        let green = parseInt(color.slice(2, 4), 16)
+        let blue = parseInt(color.slice(4, 6), 16)
+
+        red = Math.round((1 - shade) * red)
+        green = Math.round((1 - shade) * green)
+        blue = Math.round((1 - shade) * blue)
+
+        red = red.toString(16)
+        green = green.toString(16)
+        blue = blue.toString(16)
+
+        return `#${red}${green}${blue}`
+      }
+
+      const clusters = [theme]
+      for (let i = 0; i <= 9; i++) {
+        clusters.push(tintColor(theme, Number((i / 10).toFixed(2))))
+      }
+      clusters.push(shadeColor(theme, 0.1))
+      return clusters
+    }
+  }
+}
+</script>
+
+<style>
+.theme-message,
+.theme-picker-dropdown {
+  z-index: 99999 !important;
+}
+
+.theme-picker .el-color-picker__trigger {
+  height: 26px !important;
+  width: 26px !important;
+  padding: 2px;
+}
+
+.theme-picker-dropdown .el-color-dropdown__link-btn {
+  display: none;
+}
+</style>

+ 1 - 1
src/main.js

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

+ 1 - 1
src/styles/index.scss

@@ -4,7 +4,7 @@
 @import './element-ui.scss';
 @import './element-ui.scss';
 @import './sidebar.scss';
 @import './sidebar.scss';
 
 
-$--color-primary: teal;
+// $--color-primary: red;
 body {
 body {
   height: 100%;
   height: 100%;
   -moz-osx-font-smoothing: grayscale;
   -moz-osx-font-smoothing: grayscale;

+ 2 - 2
src/styles/variables.scss

@@ -26,7 +26,7 @@ $darkmenuActiveAfter: #000;
 
 
 $sideBarWidth: 195px;
 $sideBarWidth: 195px;
 /* 改变主题色变量 */
 /* 改变主题色变量 */
-$--color-primary: rgb(19, 129, 122);
+// $--color-primary: rgb(19, 129, 122);
 // the :export directive is the magic sauce for webpack
 // the :export directive is the magic sauce for webpack
 // https://www.bluematador.com/blog/how-to-share-variables-between-js-and-sass
 // https://www.bluematador.com/blog/how-to-share-variables-between-js-and-sass
 :export {
 :export {
@@ -53,7 +53,7 @@ $--color-primary: rgb(19, 129, 122);
 }
 }
 
 
 /* 改变主题色变量 */
 /* 改变主题色变量 */
-$--color-primary: teal;
+$--color-primary: #14928a;
 
 
 /* 改变 icon 字体路径变量,必需 */
 /* 改变 icon 字体路径变量,必需 */
 $--font-path: '~element-ui/lib/theme-chalk/fonts';
 $--font-path: '~element-ui/lib/theme-chalk/fonts';

+ 1 - 1
src/utils/validate.js

@@ -65,7 +65,7 @@ export function vaildTeachingUrl() {
   } else if (/test/.test(url)) { // dev 环境
   } else if (/test/.test(url)) { // dev 环境
     returnUrl = 'http://mantest.dayaedu.com'
     returnUrl = 'http://mantest.dayaedu.com'
   } else { // 默认dev环境
   } else { // 默认dev环境
-    returnUrl = 'https://mantest.dayaedu.com'
+    returnUrl = 'http://mandev.dayaedu.com'
   }
   }
   return returnUrl
   return returnUrl
 }
 }

+ 21 - 13
src/views/organManager/components/organInfo.vue

@@ -29,7 +29,7 @@
               <div class="tips" v-show="!isDisabled" style="line-height: 1;color: red;">图片尺寸:72x72;支持的格式:png;</div>
               <div class="tips" v-show="!isDisabled" style="line-height: 1;color: red;">图片尺寸:72x72;支持的格式:png;</div>
             </div>
             </div>
           </el-form-item>
           </el-form-item>
-          <el-form-item label="主题" prop="theme" :rules="[{ required: true, message: '请选择主题', trigger: 'change' }]">
+          <el-form-item label="主题" v-if="tenantInfo == 'SETTING'" prop="theme" :rules="[{ required: true, message: '请选择主题', trigger: 'change' }]">
             <el-select
             <el-select
               v-model="form.theme"
               v-model="form.theme"
               :disabled="isDisabled"
               :disabled="isDisabled"
@@ -38,36 +38,37 @@
               <el-option label="大雅绿" value="green"></el-option>
               <el-option label="大雅绿" value="green"></el-option>
             </el-select>
             </el-select>
           </el-form-item>
           </el-form-item>
-          <el-form-item label="主题色" prop="themeColor" :rules="[{ required: true, message: '请选择主题色', trigger: 'change' }]">
+          <el-form-item label="主题色" v-if="tenantInfo == 'SETTING'" prop="themeColor" :rules="[{ required: true, message: '请选择主题色', trigger: 'change' }]">
             <div style="width: 300px !important">
             <div style="width: 300px !important">
               <el-color-picker :disabled="isDisabled" v-model="form.themeColor"></el-color-picker>
               <el-color-picker :disabled="isDisabled" v-model="form.themeColor"></el-color-picker>
             </div>
             </div>
           </el-form-item>
           </el-form-item>
         </el-col>
         </el-col>
-        <el-form-item label="公司全称" prop="tsignName" v-if="tenantInfo != 'SETTING'"
+        <el-form-item label="公司全称" prop="tsignName"
           :rules="[{ required: true, message: '请输入公司全称', trigger: 'blur' }]">
           :rules="[{ required: true, message: '请输入公司全称', trigger: 'blur' }]">
           <el-input
           <el-input
             v-model.trim="form.tsignName"
             v-model.trim="form.tsignName"
-            :disabled="isDisabled"
+            :disabled="isDisabled || tenantInfo == 'SETTING'"
             placeholder="请输入公司全称"
             placeholder="请输入公司全称"
           ></el-input>
           ></el-input>
         </el-form-item>
         </el-form-item>
-        <el-form-item label="营业执照编号" prop="tsignCode" v-if="tenantInfo != 'SETTING'"
+        <el-form-item label="营业执照编号" prop="tsignCode"
           :rules="[{ required: true, message: '请输入营业执照编号', trigger: 'blur' }]">
           :rules="[{ required: true, message: '请输入营业执照编号', trigger: 'blur' }]">
           <el-input
           <el-input
             v-model.trim="form.tsignCode"
             v-model.trim="form.tsignCode"
-            :disabled="isDisabled"
+            :disabled="isDisabled || tenantInfo == 'SETTING'"
             placeholder="请输入营业执照编号"
             placeholder="请输入营业执照编号"
           ></el-input>
           ></el-input>
         </el-form-item>
         </el-form-item>
-        <!-- <el-form-item label="所在城市" required>
+        <el-form-item label="所在城市" required>
           <el-form-item prop="province" :rules="[{ required: true, message: '请选择省', trigger: 'change' }]" style="margin-right: 0;">
           <el-form-item prop="province" :rules="[{ required: true, message: '请选择省', trigger: 'change' }]" style="margin-right: 0;">
             <el-select
             <el-select
               v-model.trim="form.province"
               v-model.trim="form.province"
               filterable
               filterable
               placeholder="请选择省"
               placeholder="请选择省"
+              :disabled="isDisabled"
               clearable
               clearable
-              style="width: 90px !important;"
+              style="width: 148px !important;"
               @change="onChangeProvince"
               @change="onChangeProvince"
             >
             >
               <el-option
               <el-option
@@ -82,7 +83,8 @@
             <el-select
             <el-select
               v-model.trim="form.city"
               v-model.trim="form.city"
               filterable
               filterable
-              style="width: 90px !important;"
+              :disabled="isDisabled"
+              style="width: 148px !important;"
               placeholder="请选择市"
               placeholder="请选择市"
               clearable
               clearable
             >
             >
@@ -94,7 +96,7 @@
               ></el-option>
               ></el-option>
             </el-select>
             </el-select>
           </el-form-item>
           </el-form-item>
-        </el-form-item> -->
+        </el-form-item>
         <el-form-item label="机构简称" prop="name"
         <el-form-item label="机构简称" prop="name"
           :rules="[{ required: true, message: '请输入机构简称', trigger: 'blur' }]">
           :rules="[{ required: true, message: '请输入机构简称', trigger: 'blur' }]">
           <el-input
           <el-input
@@ -210,18 +212,24 @@ export default {
       await getParentArea({ id: this.form.areaId }).then(async (res) => {
       await getParentArea({ id: this.form.areaId }).then(async (res) => {
         if (res.code == 200 && res.data) {
         if (res.code == 200 && res.data) {
           await this.getAreaList(res.data.id, () => {
           await this.getAreaList(res.data.id, () => {
-            this.form.province = res.data.id
-            this.form.city = this.form.areaId
+            this.$set(this.form, "province", res.data.id);
+            this.$set(this.form, "city", this.form.areaId);
           });
           });
             this.branchStatus = true;
             this.branchStatus = true;
         }
         }
       });
       });
     }
     }
+
+    this.$refs.form.clearValidate()
   },
   },
   computed: {
   computed: {
     isDisabled() {
     isDisabled() {
       // console.log(this.payState)
       // console.log(this.payState)
-      return this.type == 'setting' || this.payState == 1  ? true : false
+      if(this.tenantInfo == 'SETTING') {
+        return false
+      } else {
+        return this.type == 'setting' || this.payState == 1  ? true : false
+      }
     }
     }
   },
   },
   methods: {
   methods: {

+ 15 - 9
src/views/organManager/index.vue

@@ -100,26 +100,22 @@
               @click="openService('look', scope.row)"
               @click="openService('look', scope.row)"
               v-permission="'tenantInfo/info'"
               v-permission="'tenantInfo/info'"
               type="text"
               type="text"
-              
               >查看</el-button>
               >查看</el-button>
             <el-button
             <el-button
               @click="openService('update', scope.row)"
               @click="openService('update', scope.row)"
               v-permission="'tenantInfo/update'"
               v-permission="'tenantInfo/update'"
               type="text"
               type="text"
-              
               >修改</el-button>
               >修改</el-button>
             <el-button
             <el-button
               @click="changeOrgan(scope.row)"
               @click="changeOrgan(scope.row)"
               v-permission="scope.row.state == 1 ? 'tenantInfo/opsState/stop' : 'tenantInfo/opsState/open'"
               v-permission="scope.row.state == 1 ? 'tenantInfo/opsState/stop' : 'tenantInfo/opsState/open'"
               type="text"
               type="text"
-              
               >{{ scope.row.state == 1 ? '停用' : '启用' }}</el-button>
               >{{ scope.row.state == 1 ? '停用' : '启用' }}</el-button>
-            <!-- <el-button
-              @click="openService('update', scope.row)"
-              v-permission="'platformServe/update'"
+            <el-button
+              v-if="scope.row.payState != 1"
+              @click="onQrCode(scope.row)"
               type="text"
               type="text"
-              
-              >重置密码</el-button> -->
+              >缴费二维码</el-button>
           </template>
           </template>
         </el-table-column>
         </el-table-column>
       </el-table>
       </el-table>
@@ -133,12 +129,15 @@
         @pagination="getList"
         @pagination="getList"
       />
       />
     </div>
     </div>
+    <qr-code v-model="qrcodeStatus" title="机构缴费二维码" :codeUrl="codeUrl" />
   </div>
   </div>
 </template>
 </template>
 <script>
 <script>
 import pagination from "@/components/Pagination/index";
 import pagination from "@/components/Pagination/index";
+import QrCode from "@/components/QrCode/index";
 import { tenantInfoQueryPage , tenantInfoOpsState } from "./api";
 import { tenantInfoQueryPage , tenantInfoOpsState } from "./api";
 import { getTimes } from "@/utils";
 import { getTimes } from "@/utils";
+import { vaildTeachingUrl } from "@/utils/validate";
 const initSearch = {
 const initSearch = {
   search: null,
   search: null,
   state: null,
   state: null,
@@ -147,7 +146,7 @@ const initSearch = {
   createdName: null,
   createdName: null,
 };
 };
 export default {
 export default {
-  components: { pagination },
+  components: { pagination, QrCode },
   data() {
   data() {
     return {
     return {
       tableList: [],
       tableList: [],
@@ -159,6 +158,8 @@ export default {
         page_size: [10, 20, 40, 50], // 选择限制显示条数
         page_size: [10, 20, 40, 50], // 选择限制显示条数
       },
       },
       searchForm: { ...initSearch },
       searchForm: { ...initSearch },
+      qrcodeStatus: false,
+      codeUrl: null,
     };
     };
   },
   },
   mounted() {
   mounted() {
@@ -188,6 +189,11 @@ export default {
       this.searchForm = { ...initSearch };
       this.searchForm = { ...initSearch };
       this.search();
       this.search();
     },
     },
+    onQrCode(row) {
+      // 生成报名二维码
+      this.qrcodeStatus = true;
+      this.codeUrl = vaildTeachingUrl() + "/#/tenantPay/" + row.id;
+    },
     changeOrgan(row) {
     changeOrgan(row) {
       const stateStr = row.state == 1 ? '停用' : '启用'
       const stateStr = row.state == 1 ? '停用' : '启用'
       const state = row.state == 1 ? 2 : 1
       const state = row.state == 1 ? 2 : 1

+ 1 - 1
src/views/organManager/organOperation.vue

@@ -6,7 +6,7 @@
     </h2>
     </h2>
     <div class="m-core" style="overflow: hidden">
     <div class="m-core" style="overflow: hidden">
       <div style="display: block;overflow: hidden;" v-if="payType != 'look'">
       <div style="display: block;overflow: hidden;" v-if="payType != 'look'">
-        <el-col :span="8" :lg="10" :md="18" :sm="18" :xs="24">
+        <el-col :span="12" :lg="14" :md="20" :sm="20" :xs="24">
           <el-steps :active="active" finish-status="success" simple align-center>
           <el-steps :active="active" finish-status="success" simple align-center>
             <el-step title="机构信息" ></el-step>
             <el-step title="机构信息" ></el-step>
             <el-step title="产品定价" ></el-step>
             <el-step title="产品定价" ></el-step>

+ 1 - 1
src/views/tenantSetting/tenantTradeManager.vue

@@ -96,7 +96,7 @@
         </el-table-column>
         </el-table-column>
         <el-table-column align="center" label="订单号" prop="orderNo">
         <el-table-column align="center" label="订单号" prop="orderNo">
         </el-table-column>
         </el-table-column>
-        <el-table-column align="center" label="订单时间" prop="payDate">
+        <el-table-column align="center" label="订单时间" prop="createdTime">
         </el-table-column>
         </el-table-column>
         <el-table-column align="center" label="机构编号" prop="tenantId">
         <el-table-column align="center" label="机构编号" prop="tenantId">
         </el-table-column>
         </el-table-column>