Просмотр исходного кода

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

mo 3 лет назад
Родитель
Сommit
47627d35c3

BIN
src/assets/images/base/smallLogo.png


+ 26 - 4
src/components/ImageCropper/CropperModal.vue

@@ -1,5 +1,5 @@
 <template>
-    <el-dialog :visible.sync="visible" :title="options.title" :close-on-click-modal="false" width="800px" @close="cancelHandel">
+    <el-dialog :visible.sync="visible" :title="options.title" append-to-body :close-on-click-modal="false" width="800px" @close="cancelHandel">
         <el-row>
             <el-col :xs="24" :md="12" :style="{ height: '350px', width: '350px' }">
                 <vue-cropper ref="cropper" :img="options.img" :info="true" :autoCrop="options.autoCrop" :autoCropWidth="options.autoCropWidth" :autoCropHeight="options.autoCropHeight" :fixedBox="options.fixedBox" @realTime="realTime">
@@ -44,7 +44,6 @@ export default {
       visible: false,
       img: null,
       confirmLoading: false,
-
       options: {
         img: '', //裁剪图片的地址
         autoCrop: true, //是否默认生成截图框
@@ -53,6 +52,7 @@ export default {
         fixedBox: true, //是否固定截图框大小 不允许改变
         previewsCircle: true, //预览图是否是原圆形
         centerBox: true,
+        outputType: 'png',
         title: '修改头像',
         name: null, // 文件名称
       },
@@ -83,11 +83,16 @@ export default {
     okHandel() {
       const that = this
       that.confirmLoading = true
-      // 获取截图的base64 数据
+      // 获取截图的base64 数据 getCropBlob getCropData
       this.$refs.cropper.getCropBlob(async (data) => {
+        // let blobObject = new Blob([data]);
         let form = new FormData()
 	      form.append('file', data, this.options.name || 'aa.jpg')
-        console.log(data, 'blob', form)
+	      // form.append('file', this.base64ToFile(data), this.options.name || 'aa.jpg')
+        // console.log(data, 'blob', form)
+
+        // const reader = new FileReader();
+        // reader.readAsDataURL(file)
         try {
           const res = await uploadFile(form)
           that.$emit('cropper-ok', res)
@@ -98,6 +103,17 @@ export default {
         }
       })
     },
+    base64ToFile(urlData, fileName) {
+      let arr = urlData.split(',');
+      let mime = arr[0].match(/:(.*?);/)[1];
+      let bytes = atob(arr[1]); // 解码base64
+      let n = bytes.length
+      let ia = new Uint8Array(n);
+      while (n--) {
+          ia[n] = bytes.charCodeAt(n);
+      }
+      return new File([ia], fileName, { type: mime });
+    },
     //转成blob
     blobToFile(Blob, fileName) {  //兼容IE
       Blob.lastModifiedDate = new Date()
@@ -148,6 +164,12 @@ export default {
 .previewImg {
   padding-left: 50px;
   padding-top: 10px;
+  & > span {
+    display: block;
+    color: #212121;
+    font-size: 16px;
+    padding-bottom: 15px;
+  }
 }
 .operation {
   font-size: 24px;

+ 5 - 3
src/components/ImageCropper/index.vue

@@ -48,11 +48,13 @@ export default {
     },
     accept: {
       type: String,
-      default: '.png,.jpg,.jpeg'
+      default: '.png,.jpg,.jpeg,.gif'
     },
     acceptArray: {
-      type: Array,
-      default: ['image/jpeg', 'image/png', 'image/jpg']
+      type: [Array, Object],
+      default() {
+        return ['image/jpeg', 'image/png', 'image/jpg', 'image/gif']
+      }
     },
     disabled: {
       type: Boolean,

+ 12 - 1
src/layout/components/Navbar.vue

@@ -14,7 +14,7 @@
       />
       <img
         v-else
-        src="@/assets/images/base/logo.png"
+        src="@/assets/images/base/smallLogo.png"
         class="sidebar-logo"
         style="width: 36px; height: 36px"
       />
@@ -452,6 +452,17 @@ export default {
             //     path: url
             //     })
             // }
+
+            // 需要重置数据
+            this.$store.commit('commit_branchs',[])
+            this.$store.commit('commit_subjects',[])
+            this.$store.commit('commit_teachers',[])
+            this.$store.commit('commit_schools',[])
+            this.$store.commit('commit_vip_group_category',[])
+            this.$store.commit('commit_educations',[])
+            this.$store.commit('commit_technician',[])
+            this.$store.commit('commit_roles',[])
+            this.$store.commit('commit_employs',[])
           }
         }
       })

+ 6 - 3
src/store/modules/app.js

@@ -10,7 +10,7 @@ import {
   queryTenantInfoSumm
 } from '@/views/productService/api'
 import dayjs from 'dayjs'
-
+import { getTenantId } from '@/utils/auth'
 const state = {
   sidebar: {
     opened: Cookies.get('sidebarStatus') ? !!+Cookies.get('sidebarStatus') : true,
@@ -168,8 +168,11 @@ const actions = {
   }) {
     if (permission('tenantInfo/queryTenantInfoSumm')) {
       try {
-        const res = await queryTenantInfoSumm()
-        commit('TEANAT_SETTING', res.data)
+        // console.log(getTenantId(), 'getTenantId')
+        if(getTenantId()) {
+          const res = await queryTenantInfoSumm()
+          commit('TEANAT_SETTING', res.data)
+        }
       } catch (error) {}
     }
   },

+ 1 - 1
src/store/modules/selects.js

@@ -197,7 +197,7 @@ export default {
               }
             }
           }
-          // console.log(tempArr, 'tempArr')
+          console.log(tempArr, 'tempArr')
           commit('commit_roles', tempArr)
         } catch (error) {}
         loadings.commit_roles = false

+ 20 - 3
src/views/businessManager/shopManager/shopList.vue

@@ -978,12 +978,16 @@
           prop="image"
           :label-width="formLabelWidth"
         >
-          <upload
+          <!-- <upload
             v-model="form.image"
             :imageWidthM="400"
             :disabled="addDisabled"
             :imageHeightM="400"
-          ></upload>
+          ></upload> -->
+          <image-cropper :options="cropperOptions" :disabled="addDisabled" :imgSize="2" :imageUrl="form.image"  @crop-upload-success="cropSuccess" />
+          <p style="color: red">
+            请上传大小2M以内,格式为jpg、png、gif图片
+          </p>
         </el-form-item>
         <br />
         <el-form-item
@@ -1040,6 +1044,7 @@ import { getToken, getTenantId } from "@/utils/auth";
 import { goodsType } from "@/utils/searchArray";
 import load from "@/utils/loading";
 import { permission } from "@/utils/directivePage";
+import ImageCropper from '@/components/ImageCropper'
 // import courseEvaluateVue from '@/views/teamDetail/componentCourse/courseEvaluate.vue';
 let validPrice = (rule, value, callback) => {
   if ((value == "" && typeof value == "string") || value == null) {
@@ -1066,6 +1071,7 @@ export default {
     pagination,
     Tooltip,
     Upload,
+    ImageCropper
   },
   name: "shopList",
   data() {
@@ -1310,7 +1316,15 @@ export default {
         ],
       },
       selectGoodsList: [],
-      tenantId:''
+      tenantId:'',
+      cropperOptions: {
+        autoCrop: true, //是否默认生成截图框
+        autoCropWidth: 300, //默认生成截图框宽度
+        autoCropHeight: 300, //默认生成截图框高度
+        fixedBox: true, //是否固定截图框大小 不允许改变
+        previewsCircle: false, //预览图是否是圆形
+        title: '商品图片', //模态框上显示的标题
+      },
     };
   },
 async  mounted() {
@@ -1346,6 +1360,9 @@ async  mounted() {
         }
       });
     },
+    cropSuccess(data) {
+      this.form.image = data.data.url;
+    },
     async onUpdate(row, type) {
       let title = type == 1 ? "你是否下架该商品?" : "你是否上架该商品?";
       this.$confirm(title, "提示", {

+ 18 - 3
src/views/businessManager/shopManager/shopOperation.vue

@@ -405,7 +405,7 @@
           type="info"
         />
         <el-form-item label="商品图片" prop="image">
-          <el-upload
+          <!-- <el-upload
             class="avatar-uploader"
             action="/api-web/uploadFile"
             accept=".jpg, .jpeg, .png"
@@ -417,9 +417,11 @@
           >
             <img v-if="form.image" :src="form.image" class="avatar" />
             <i v-else class="el-icon-plus avatar-uploader-icon"></i>
-          </el-upload>
+          </el-upload> -->
+          <image-cropper :options="cropperOptions" :disabled="pageDisabled" :imgSize="2" :imageUrl="form.image"  @crop-upload-success="cropSuccess" />
           <p class="imageSize">
-            仅支持上传尺寸为:{{ imageWidthM }}x{{ imageHeightM }}的图片
+            <!-- 仅支持上传尺寸为:{{ imageWidthM }}x{{ imageHeightM }}的图片 -->
+            请上传大小2M以内,格式为jpg、png、gif图片
           </p>
         </el-form-item>
         <br />
@@ -458,6 +460,7 @@ import {
 } from "@/api/businessManager";
 import { getToken, getTenantId } from "@/utils/auth";
 import { goodsType, stockType } from "@/utils/searchArray";
+import ImageCropper from '@/components/ImageCropper'
 let validPrice = (rule, value, callback) => {
   if ((value == "" && typeof value == "string") || value == null) {
     callback(new Error("请输入金额"));
@@ -480,6 +483,7 @@ let validStock = (rule, value, callback) => {
 };
 export default {
   name: "shopOperation",
+  components: { ImageCropper },
   data() {
     return {
       goodsType: goodsType,
@@ -670,6 +674,14 @@ export default {
       imageWidthM: 400,
       imageHeightM: 400,
       tenantId: "",
+      cropperOptions: {
+        autoCrop: true, //是否默认生成截图框
+        autoCropWidth: 300, //默认生成截图框宽度
+        autoCropHeight: 300, //默认生成截图框高度
+        fixedBox: true, //是否固定截图框大小 不允许改变
+        previewsCircle: false, //预览图是否是圆形
+        title: '商品图片', //模态框上显示的标题
+      },
     };
   },
   mounted() {
@@ -690,6 +702,9 @@ export default {
       this.getList();
       this.getCatagory();
     },
+    cropSuccess(data) {
+      this.form.image = data.data.url;
+    },
     onSubmit(formName) {
       this.$refs[formName].validate((valid) => {
         if (valid) {

+ 33 - 17
src/views/categroyManager/productSystem/memberSet.vue

@@ -99,6 +99,15 @@
           </template>
         </el-table-column>
       </el-table>
+      <pagination
+        save-key="memberSet"
+        :total.sync="rules.total"
+        sync
+        :page.sync="rules.page"
+        :limit.sync="rules.limit"
+        :page-sizes="rules.page_size"
+        @pagination="getList"
+      />
     </div>
     <el-dialog
       :title="title"
@@ -156,14 +165,15 @@
           :label-width="formLabelWidth"
           :rules="[{ required: true, message: '请上传会员标识' }]"
         >
-          <upload
+          <!-- <upload
             v-if="!addDisabled"
             v-model="form.icon"
             :imageWidthM="200"
             :disabled="addDisabled"
             :imageHeightM="200"
           ></upload>
-          <img v-else :src="form.icon" alt="" width="120px" height="120px" />
+          <img v-else :src="form.icon" alt="" width="120px" height="120px" /> -->
+          <image-cropper :options="cropperOptions" :disabled="addDisabled" :imgSize="2" :imageUrl="form.icon" @crop-upload-success="cropSuccess2" />
           <!-- <p style="color: red" v-if="!addDisabled">
             请上传200*200像素,大小2M以内,格式为jpg、png、gif图片
           </p> -->
@@ -175,16 +185,17 @@
           :label-width="formLabelWidth"
           :rules="[{ required: true, message: '请上传试用会员标识' }]"
         >
-          <upload
+          <!-- <upload
             v-if="!addDisabled"
             v-model="form.experienceIcon"
             :imageWidthM="200"
             :disabled="addDisabled"
             :imageHeightM="200"
-          ></upload>
-          <img v-else :src="form.experienceIcon" alt="" width="120px" height="120px" />
+          ></upload> -->
+          <image-cropper :options="cropperOptions" :disabled="addDisabled" :imgSize="2" :imageUrl="form.experienceIcon"  @crop-upload-success="cropSuccess" />
+          <!-- <img v-else :src="form.experienceIcon" alt="" width="120px" height="120px" /> -->
           <p style="color: red" v-if="!addDisabled">
-            请上传200*200像素,大小2M以内,格式为jpg、png、gif图片
+            请上传大小2M以内,格式为jpg、png、gif图片
           </p>
         </el-form-item>
         <!-- <br />
@@ -270,21 +281,12 @@
       </span>
     </el-dialog>
 
-    <pagination
-      save-key="memberSet"
-      :total.sync="rules.total"
-      sync
-      :page.sync="rules.page"
-      :limit.sync="rules.limit"
-      :page-sizes="rules.page_size"
-      @pagination="getList"
-    />
   </div>
 </template>
 <script>
 import pagination from "@/components/Pagination/index";
 import Upload from "@/components/Upload/index";
-
+import ImageCropper from '@/components/ImageCropper'
 import {
   addMemberRank,
   getmemberRankList,
@@ -293,7 +295,7 @@ import {
 } from "./api";
 import { getMemberPrivilegesItem } from "@/views/dictionaryManager/api";
 export default {
-  components: { pagination, Upload },
+  components: { pagination, Upload, ImageCropper },
   name: "memberSet",
   data() {
     return {
@@ -337,6 +339,14 @@ export default {
       allChildIds: [],
       checkList: [],
       searchName: "搜索\xa0\xa0\xa0\xa0\xa0\xa0\xa0",
+      cropperOptions: {
+        autoCrop: true, //是否默认生成截图框
+        autoCropWidth: 200, //默认生成截图框宽度
+        autoCropHeight: 200, //默认生成截图框高度
+        fixedBox: true, //是否固定截图框大小 不允许改变
+        previewsCircle: false, //预览图是否是圆形
+        title: '会员标识', //模态框上显示的标题
+      },
     };
   },
   async mounted() {
@@ -358,6 +368,12 @@ export default {
       this.getList();
     },
     onReSet() {},
+    cropSuccess(data) {
+      this.form.experienceIcon = data.data.url;
+    },
+    cropSuccess2(data) {
+      this.form.icon = data.data.url;
+    },
     async getList() {
       try {
         const res = await getmemberRankList({

+ 101 - 99
src/views/studentManager/studentGroupRecord.vue

@@ -4,108 +4,110 @@
       <div class="squrt"></div>
       团练宝缴费记录
     </h2>
-    <el-form :inline="true" :model="searchForm">
-      <el-form-item prop="period">
-        <el-select
-          placeholder="团练宝单位"
-          clearable
-          v-model.trim="searchForm.period"
-          style="width: 100% !important"
-        >
-          <el-option label="月度" value="MONTH"></el-option>
-          <el-option label="季度" value="QUARTERLY"></el-option>
-          <el-option label="半年" value="YEAR_HALF"></el-option>
-          <el-option label="年度" value="YEAR"></el-option>
-          <!-- <el-option label="固定天数" value="DAY"></el-option> -->
-        </el-select>
-      </el-form-item>
-      <el-form-item prop="visitTime">
-          <el-date-picker
-            v-model.trim="searchForm.visitTime"
-            style="width: 410px"
-            type="daterange"
-            :picker-options="{
-              firstDayOfWeek: 1,
-            }"
-            :default-time="['00:00:00', '23:59:59']"
-            range-separator="至"
-            start-placeholder="创建开始日期"
-            end-placeholder="创建结束日期"
-          ></el-date-picker>
+    <div class="m-core">
+      <el-form :inline="true" :model="searchForm">
+        <el-form-item prop="period">
+          <el-select
+            placeholder="团练宝单位"
+            clearable
+            v-model.trim="searchForm.period"
+            style="width: 100% !important"
+          >
+            <el-option label="月度" value="MONTH"></el-option>
+            <el-option label="季度" value="QUARTERLY"></el-option>
+            <el-option label="半年" value="YEAR_HALF"></el-option>
+            <el-option label="年度" value="YEAR"></el-option>
+            <!-- <el-option label="固定天数" value="DAY"></el-option> -->
+          </el-select>
+        </el-form-item>
+        <el-form-item prop="visitTime">
+            <el-date-picker
+              v-model.trim="searchForm.visitTime"
+              style="width: 410px"
+              type="daterange"
+              :picker-options="{
+                firstDayOfWeek: 1,
+              }"
+              :default-time="['00:00:00', '23:59:59']"
+              range-separator="至"
+              start-placeholder="创建开始日期"
+              end-placeholder="创建结束日期"
+            ></el-date-picker>
+          </el-form-item>
+        <el-form-item>
+          <el-button @click="search" type="danger">搜索</el-button>
+          <el-button @click="onReSet" type="primary">重置</el-button>
         </el-form-item>
-      <el-form-item>
-        <el-button @click="search" type="danger">搜索</el-button>
-        <el-button @click="onReSet" type="primary">重置</el-button>
-      </el-form-item>
-    </el-form>
+      </el-form>
 
-    <div class="tableWrap">
-      <el-table
-        style="width: 100%"
-        :header-cell-style="{ background: '#EDEEF0', color: '#444' }"
-        :data="tableList"
-      >
-        <el-table-column
-          align="center"
-          prop="id"
-          label="续费编号"
-        ></el-table-column>
-        <el-table-column align="center" prop="name" label="团练宝单位">
-          <template slot-scope="scope">
-            {{ scope.row.period | memberEnumType }}
-          </template>
-        </el-table-column>
-        <el-table-column align="center" prop="memberNum" label="周期数">
-        </el-table-column>
-        <el-table-column
-          align="center"
-          prop="subjectName"
-          label="缴费金额(元)"
-        >
-          <template slot-scope="scope">
-            {{ scope.row.actualAmount | hasMoneyFormat }}
-          </template>
-        </el-table-column>
-        <el-table-column
-          align="center"
-          prop="type"
-          label="已缴费人数/总人数"
-        >
-          <template slot-scope="scope">
-            {{ scope.row.paymentUserNum }}/{{ scope.row.userNum }}
-          </template>
-        </el-table-column>
-        <el-table-column
-          align="center"
-          label="创建人"
-          prop="operatorName"
+      <div class="tableWrap">
+        <el-table
+          style="width: 100%"
+          :header-cell-style="{ background: '#EDEEF0', color: '#444' }"
+          :data="tableList"
         >
-        </el-table-column>
-        <el-table-column
-          align="center"
-          prop="createTime"
-          label="创建时间"
-        ></el-table-column>
-        <el-table-column
-          align="center"
-          prop="remark"
-          label="备注"
-        ></el-table-column>
-        <el-table-column align="center"
-                         label="操作">
-          <template slot-scope="scope">
-            <el-button type="text" @click="onDetail(scope.row)">详情</el-button>
-          </template>
-        </el-table-column>
-      </el-table>
-      <pagination
-        sync
-        :total.sync="rules.total"
-        :page.sync="rules.page"
-        :limit.sync="rules.limit"
-        :page-sizes="rules.page_size"
-        @pagination="getList"
-      />
+          <el-table-column
+            align="center"
+            prop="id"
+            label="续费编号"
+          ></el-table-column>
+          <el-table-column align="center" prop="name" label="团练宝单位">
+            <template slot-scope="scope">
+              {{ scope.row.period | memberEnumType }}
+            </template>
+          </el-table-column>
+          <el-table-column align="center" prop="memberNum" label="周期数">
+          </el-table-column>
+          <el-table-column
+            align="center"
+            prop="subjectName"
+            label="缴费金额(元)"
+          >
+            <template slot-scope="scope">
+              {{ scope.row.actualAmount | hasMoneyFormat }}
+            </template>
+          </el-table-column>
+          <el-table-column
+            align="center"
+            prop="type"
+            label="已缴费人数/总人数"
+          >
+            <template slot-scope="scope">
+              {{ scope.row.paymentUserNum }}/{{ scope.row.userNum }}
+            </template>
+          </el-table-column>
+          <el-table-column
+            align="center"
+            label="创建人"
+            prop="operatorName"
+          >
+          </el-table-column>
+          <el-table-column
+            align="center"
+            prop="createTime"
+            label="创建时间"
+          ></el-table-column>
+          <el-table-column
+            align="center"
+            prop="remark"
+            label="备注"
+          ></el-table-column>
+          <el-table-column align="center"
+                          label="操作">
+            <template slot-scope="scope">
+              <el-button type="text" v-if="$helpers.permission('studentCloudCoachPaymentDetails/queryPage')" @click="onDetail(scope.row)">详情</el-button>
+            </template>
+          </el-table-column>
+        </el-table>
+        <pagination
+          sync
+          :total.sync="rules.total"
+          :page.sync="rules.page"
+          :limit.sync="rules.limit"
+          :page-sizes="rules.page_size"
+          @pagination="getList"
+        />
+      </div>
     </div>
 
     <el-dialog