lex-xin 3 năm trước cách đây
mục cha
commit
80b408cef4

+ 2 - 0
src/router/index.js

@@ -504,6 +504,8 @@ export const asyncRoutes = {
   specialDeault:() => import('@/views/baseRulesManager/special.vue'),
   // 机构设置
   tenantInfoSetting:() => import('@/views/tenantSetting/tenantInfo.vue'),
+  // 机构协议管理
+  tenantInfoProtocol:() => import('@/views/tenantSetting/tenantInfoProtocol.vue'),
   // 机构交易管理
   tenantTradeManager:() => import('@/views/tenantSetting/tenantTradeManager.vue'),
   // 团练宝激活记录

+ 19 - 1
src/views/categroyManager/insideSetting/staffManager.vue

@@ -79,6 +79,13 @@
         v-permission="'employee/add'"
         >添加</el-button
       >
+
+      <el-button
+        type="primary"
+        style="margin-bottom: 20px"
+        @click="onCreateQRCode"
+        >管理端APP下载</el-button
+      >
       <!-- 列表 -->
       <div class="tableWrap">
         <el-table
@@ -588,6 +595,8 @@
         <el-button @click="submitEducation" type="primary">确 定</el-button>
       </span>
     </el-dialog>
+
+    <qr-code v-model="qrCodeStatus" title="管理端APP下载链接" :codeUrl="codeUrl" />
   </div>
 </template>
 <script>
@@ -613,6 +622,8 @@ import deepClone from "@/helpers/deep-clone";
 import Tooltip from "@/components/Tooltip/index";
 import { isvalidPhone } from "@/utils/validate";
 import handover from "./modals/handover";
+import QrCode from "@/components/QrCode/index";
+import { vaildTeachingUrl } from "@/utils/validate";
 let validPhone = (rule, value, callback) => {
   if (!value) {
     callback(new Error("请输入电话号码"));
@@ -624,7 +635,7 @@ let validPhone = (rule, value, callback) => {
 };
 export default {
   name: "staffManager",
-  components: { pagination, Tooltip, handover },
+  components: { pagination, Tooltip, handover, QrCode },
   data() {
     return {
       roleResetList: [],
@@ -633,6 +644,8 @@ export default {
       deptList: [],
       deptSmallList: [],
       postList: [],
+      qrCodeStatus: false,
+      codeUrl: null,
       educationForm: {
         targetUserId: "",
       },
@@ -747,6 +760,11 @@ export default {
       this.detail = row;
       this.handoverVisible = true;
     },
+    onCreateQRCode() {
+      // 生成报名二维码
+      this.qrCodeStatus = true;
+      this.codeUrl = vaildTeachingUrl() + "/#/manageDownload";
+    },
     onBranchCheckAll() {
       this.form.organIdLists = [];
 

+ 19 - 11
src/views/organManager/components/organInfo.vue

@@ -41,7 +41,7 @@
               <img v-if="form.logo" :src="form.logo" class="avatar" />
               <i v-else class="el-icon-plus avatar-uploader-icon"></i>
             </el-upload> -->
-            <image-cropper :options="cropperOptions" :disabled="isDisabled" :imgSize="2" accept=".png" :acceptArray="['image/png']" :imageUrl="form.logo" @crop-upload-close="cropClose" @crop-upload-success="cropSuccess" />
+            <image-cropper :options="cropperOptions" :disabled="isDisabled" :imgSize="2" accept=".png" :acceptArray="['image/png']" :imageUrl="form.logo" @crop-upload-success="cropSuccess" />
             <div
               class="tips"
               v-show="!isDisabled"
@@ -75,12 +75,12 @@
           <div style="width: 300px !important" class="ant-upload-preview">
             <el-upload
               class="avatar-uploader"
-              :class="[isDisabled || tenantInfo == 'SETTING' ? 'uploadDisabled' : null]"
+              :class="[isDisabled ? 'uploadDisabled' : null]"
               action="/api-web/uploadFile"
               accept=".png"
               :headers="headers"
               :show-file-list="false"
-              :disabled="isDisabled || tenantInfo == 'SETTING'"
+              :disabled="isDisabled"
               :on-success="handleAvatarSuccess"
               :before-upload="beforeAvatarUpload"
             >
@@ -114,12 +114,12 @@
           <div style="width: 300px !important" class="ant-upload-preview">
             <el-upload
               class="avatar-uploader"
-              :class="[isDisabled || tenantInfo == 'SETTING' ? 'uploadDisabled' : null]"
+              :class="[isDisabled ? 'uploadDisabled' : null]"
               action="/api-web/uploadFile"
               accept=".png"
               :headers="headers"
               :show-file-list="false"
-              :disabled="isDisabled || tenantInfo == 'SETTING'"
+              :disabled="isDisabled"
               :on-success="handleAvatarSuccess2"
               :before-upload="beforeAvatarUpload"
             >
@@ -187,7 +187,7 @@
       >
         <el-input
           v-model.trim="form.tsignName"
-          :disabled="isDisabled || tenantInfo == 'SETTING'"
+          :disabled="isDisabled"
           placeholder="请输入机构全称"
         ></el-input>
       </el-form-item>
@@ -267,7 +267,7 @@
       >
         <el-input
           v-model.trim="form.tsignCode"
-          :disabled="isDisabled || tenantInfo == 'SETTING'"
+          :disabled="isDisabled"
           placeholder="请输入营业执照编号"
         ></el-input>
       </el-form-item>
@@ -414,6 +414,7 @@ export default {
         corporateChops: null,
         corporateFinanceChops: null,
       },
+      originPhone: null, // 是否已存在手机号
       errorPhone: null, // 手机号存在错误信息
       payState: null,
       imageWidthM: 72,
@@ -435,6 +436,12 @@ export default {
     if (this.data) {
       this.form = { ...this.data };
       this.payState = this.data.payState;
+
+      const { phone } = this.data
+      // 判断是否已存在手机号
+      if(phone) {
+        this.originPhone = phone
+      }
     }
     // 选中默认颜色
     this.themeList.forEach(theme => {
@@ -473,10 +480,6 @@ export default {
     }
   },
   methods: {
-    //上传操作结束
-    cropClose() {
-      console.log('上传操作结束')
-    },
     //上传图片成功
     cropSuccess(data) {
       // this.imgUrl = data.data.avatar
@@ -511,6 +514,11 @@ export default {
     },
     async checkPhone() {
       const phone = this.form.phone;
+      // 判断是否是自己之前注册的手机号
+      if(phone == this.originPhone && this.originPhone) {
+        this.errorPhone = null
+        return
+      }
       try {
         const regu = /^1[3456789]\d{9}$/;
         console.log(phone, regu);

+ 226 - 0
src/views/tenantSetting/tenantInfoProtocol.vue

@@ -0,0 +1,226 @@
+<template>
+  <div class="m-container">
+    <h2>
+      <div class="squrt"></div>
+      机构协议管理
+    </h2>
+    <div class="m-core">
+      <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="orderType">
+          <el-select
+            v-model.trim="searchForm.orderType"
+            clearable
+            filterable
+            @clear="onClear('orderType')"
+            placeholder="交易类型"
+          >
+            <el-option
+              v-for="(item, key, index) in tenantStatus"
+              :key="index"
+              :label="item"
+              :value="key"
+            ></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-option label="支付失败" :value="2"></el-option>
+          </el-select>
+        </el-form-item>
+        <el-form-item prop="createTimer">
+          <el-date-picker
+            v-model.trim="searchForm.createTimer"
+            type="daterange"
+            range-separator="至"
+            start-placeholder="订单开始时间"
+            :default-time="['00:00:00', '23:59:59']"
+            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>
+      <el-button
+        type="primary"
+        style="margin-bottom: 20px"
+        @click="roleOperation('create')"
+        >新增协议</el-button
+      >
+      <!-- 列表 -->
+      <div class="tableWrap">
+        <el-table
+          :data="tableList"
+          :header-cell-style="{ background: '#EDEEF0', color: '#444' }"
+        >
+          <el-table-column align="center" label="协议编号" prop="transNo">
+          </el-table-column>
+          <el-table-column align="center" label="协议号" prop="orderNo">
+          </el-table-column>
+          <el-table-column align="center" label="协议名称" prop="createdTime">
+          </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.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>
+                <el-button
+                @click="openService(scope.row)"
+                v-permission="'tenantInfo/info'"
+                type="text"
+                >修改</el-button>
+                <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>
+    </div>
+
+    <el-dialog title="订单详情" :visible.sync="orderVisible" width="1200px">
+      <order-info />
+    </el-dialog>
+  </div>
+</template>
+<script>
+import pagination from "@/components/Pagination/index";
+import { tenantOrderRecordQueryPage } from "./api";
+import { tenantStatus } from '@/constant'
+import { dealStatus } from "@/utils/searchArray";
+import OrderInfo from './model/orderInfo'
+import { getTimes } from "@/utils";
+const initSearch = {
+  transNo: null,
+  orderNo: null,
+  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 },
+    };
+  },
+  async mounted() {
+    this.getList();
+  },
+  methods: {
+    async getList() {
+      try {
+        let { createTimer, ...reset } = this.searchForm;
+        const res = await tenantOrderRecordQueryPage({
+          ...reset,
+          ...getTimes(createTimer, ["startDate", "endDate"], "YYYY-MM-DD HH:mm:ss"),
+          page: this.pageInfo.page,
+          rows: this.pageInfo.limit,
+        });
+        this.pageInfo.total = res.total;
+        this.tableList = res.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: "已支付",
+        2: "支付失败"
+      }
+      return template[val]
+    }
+  }
+};
+</script>
+<style lang="scss" scoped>
+.courseMask .el-dialog__body {
+  padding-bottom: 0;
+}
+</style>