huangxw 10 luni în urmă
părinte
comite
9eec24a53b

+ 1 - 1
.editorconfig

@@ -6,7 +6,7 @@ root = true
 # 缩进风格,可选space、tab
 indent_style = space
 # 缩进的空格数
-indent_size = 2
+indent_size = 4
 # 设置字符集
 charset = utf-8
 # 结尾换行符,可选lf、cr、crlf

+ 43 - 0
.eslintrc.js

@@ -0,0 +1,43 @@
+module.exports = {
+  env: {
+    browser: true,
+    es2021: true,
+    node: true
+  },
+  parser: '@typescript-eslint/parser',
+  parser: 'vue-eslint-parser',
+  extends: [
+    'eslint:recommended',
+    'plugin:vue/vue3-essential',
+    'plugin:@typescript-eslint/recommended',
+    './.eslintrc-auto-import.json',
+    'plugin:prettier/recommended'
+  ],
+  parserOptions: {
+    ecmaVersion: '2020',
+    sourceType: 'module',
+    parser: '@typescript-eslint/parser'
+  },
+  plugins: ['vue', '@typescript-eslint'],
+  rules: {
+    'vue/multi-word-component-names': 'off',
+    '@typescript-eslint/no-empty-function': 'off',
+    '@typescript-eslint/no-explicit-any': 'off',
+    'vue/no-v-model-argument': 'off',
+    '@typescript-eslint/ban-types': [
+      'error',
+      {
+        // 关闭空类型检查 {}
+        extendDefaults: true,
+        types: {
+          '{}': false,
+          Function: false
+        }
+      }
+    ]
+  },
+  globals: {
+    DialogOption: 'readonly',
+    OptionType: 'readonly'
+  }
+};

+ 11 - 0
src/api/dgtmedicine/member/index.ts

@@ -85,3 +85,14 @@ export const vipLevelList = (): AxiosPromise<vipLevelVO[]> => {
     method: 'get'
   });
 };
+/**
+ * 入会审核状态统计
+ * @param id
+ */
+export const queryMemberApprovalCount = (query?: any): AxiosPromise<any> => {
+  return request({
+    url: '/dgtmedicine/member/queryMemberApprovalCount',
+    method: 'get',
+    params: query
+  });
+};

+ 24 - 0
src/assets/styles/ruoyi.scss

@@ -413,6 +413,12 @@ $colors: (
   danger: #F56C6C,
   // 会员绿
   member-green: #41C06D,
+  // 待审核
+  res-0: #E6A23C,
+  // 审核通过
+  res-1: #67C23A,
+  // 审核失败
+  res-2: #F56C6C,
 );
 @each $color, $value in $colors {
   .c-#{$color} {
@@ -436,3 +442,21 @@ $colors: (
 .border-bottom {
   border-bottom: 1px solid var(--border-color);
 }
+.over-auto {
+  overflow-y: auto;
+}
+.info-title {
+  position: relative;
+  padding-left: 20px;
+  &::before {
+      content: '';
+      position: absolute;
+      top: 0;
+      bottom: 0;
+      left: 0;
+      margin: auto;
+      background-color: var(--el-color-primary);
+      width: 2px;
+      height: 16px;
+  }
+}

+ 96 - 0
src/views/dgtmedicine/check/detail.vue

@@ -0,0 +1,96 @@
+<template>
+   <div class="p-3">
+      <div class="bg-fff flex1 ov-hd d-flex flex-cln">
+         <div class="d-flex a-c pd-16 border-bottom">
+            <div class="f-s-20 c-333 f-w-7 mr-10">会员审核</div>
+            <el-button @click="router.go(-1)" type="primary" text><el-icon>
+                  <Back />
+               </el-icon>返回上一级</el-button>
+         </div>
+         <div class="flex1 over-auto">
+            <div class="pd-16">
+               <div class="info-title f-s-16 c-333 f-w-7 mb-10">企业基本信息</div>
+               <el-descriptions :column="4">
+                  <el-descriptions-item label="企业名称:">{{ form?.cpyName || '-' }}</el-descriptions-item>
+                  <el-descriptions-item label="统一社会信用代码:">{{ form?.creditCode || '-' }}</el-descriptions-item>
+                  <el-descriptions-item label="会员级别:">{{ form?.vipLevelName || '-' }}</el-descriptions-item>
+                  <el-descriptions-item label="法人姓名:">{{ form?.legalPersonName || '-' }}</el-descriptions-item>
+                  <el-descriptions-item label="法人职务:">{{ form?.legalPersonPosition || '-' }}</el-descriptions-item>
+                  <el-descriptions-item label="法人电话:">{{ form?.legalPersonPhone || '-' }}</el-descriptions-item>
+                  <el-descriptions-item label="注册类型:">{{ form?.regType || '-' }}</el-descriptions-item>
+                  <el-descriptions-item label="主管部门:">{{ form?.department || '-' }}</el-descriptions-item>
+                  <el-descriptions-item label="总资产:">{{ form?.totalAssets || '-' }}</el-descriptions-item>
+                  <el-descriptions-item label="单位负责人:">{{ form?.contact || '-' }}</el-descriptions-item>
+                  <el-descriptions-item label="单位负责人联系电话:">{{ form?.contactTel || '-' }}</el-descriptions-item>
+                  <el-descriptions-item label="邮箱">{{ form?.email || '-' }}</el-descriptions-item>
+                  <el-descriptions-item label="单位简介:" :span="2">{{ form?.introduction || '-' }}</el-descriptions-item>
+                  <el-descriptions-item label="入会主要目的:" :span="2">{{ form?.membershipPurpose || '-'
+                  }}</el-descriptions-item>
+               </el-descriptions>
+               <el-divider />
+               <el-descriptions :column="3" direction="vertical">
+                  <el-descriptions-item label="营业执照:">
+                     <el-image class="bg-ccc" style="width: 100px; height: 100px" :src="form?.license" :zoom-rate="1.2" :max-scale="7" :min-scale="0.2"
+                     :preview-src-list="[form?.license]" fit="contain" />
+                  </el-descriptions-item>
+                  <el-descriptions-item label="法人身份证:">
+                     <el-image :zoom-rate="1.2" :max-scale="7" :min-scale="0.2"
+                        :preview-src-list="[form?.legalPersonIdFront]" class="mr-10 bg-ccc" style="width: 180px; height: 100px"
+                        :src="form?.legalPersonIdFront" fit="contain" />
+                     <el-image style="width: 180px; height: 100px" class="bg-ccc" :zoom-rate="1.2" :max-scale="7" :min-scale="0.2"
+                        :preview-src-list="[form?.legalPersonIdBack]" :src="form?.legalPersonIdBack" fit="contain" />
+                  </el-descriptions-item>
+                  <el-descriptions-item label="公司荣誉证书等资料:">
+                     <template v-for="(item, index) in form?.companyCertificate" :key="index">
+                        <el-image  class="bg-ccc mr-10" :initial-index="index" :preview-src-list="form?.companyCertificate" style="width: 100px; height: 100px" :src="item" fit="contain" />
+                     </template>
+                  </el-descriptions-item>
+               </el-descriptions>
+               <el-divider />
+               <div class="info-title f-s-16 c-333 f-w-7 mb-10">药材种植信息</div>
+               <vxe-table border :data="form?.plantingInfo" min-height="0" max-height="100%">
+                  <!-- 序号 -->
+                  <vxe-column title="序号" align="center" type="seq" width="60" />
+                  <vxe-column title="种植药材品种" align="center" field="variety" :formatter="colNoData" />
+                  <vxe-column title="种植地点" align="center" field="plantingPlace" :formatter="colNoData" />
+                  <vxe-column title="种植面积" align="center" field="plantingArea" :formatter="colNoData" />
+               </vxe-table>
+               <el-divider />
+               <div class="info-title f-s-16 c-333 f-w-7 mb-10">缴费信息</div>
+               <el-descriptions :column="4">
+                  <el-descriptions-item label="缴费类型:">{{ form?.vipLevelName || '-' }}</el-descriptions-item>
+                  <el-descriptions-item label="缴费金额:">{{ form?.paymentAmount || '-' }}元</el-descriptions-item>
+                  <el-descriptions-item label="缴费人:">{{ form?.createName || '-' }}</el-descriptions-item>
+                  <el-descriptions-item label="缴费时间:">{{ form?.createTime || '-' }}</el-descriptions-item>
+               </el-descriptions>
+            </div>
+            <div v-if="!+form?.reviewStatus" class="btn-wrap pd-30 d-flex a-c j-c">
+                <el-button @click="router.go(-1)">取消</el-button>
+                <el-button @click="showNoPass = true" type="danger">不通过</el-button>
+                <el-button @click="showPass = true" type="primary">通过</el-button>
+            </div>
+         </div>
+      </div>
+   </div>
+   <CheckPass v-if="showPass" v-model:show="showPass" :info="form" @success="router.go(-1)"></CheckPass>
+   <CheckNoPass v-if="showNoPass" v-model:show="showNoPass" :info="form" @success="router.go(-1)"></CheckNoPass>
+</template>
+
+<script setup name="Check-detail" lang="ts">
+import { getMember } from '@/api/dgtmedicine/member/index'
+import { colNoData } from '@/utils/noData'
+import { CheckPass, CheckNoPass } from '../model/index'
+const router = useRouter()
+const { query }: any = useRoute()
+const form = ref<any>({})
+const showPass = ref(false)
+const showNoPass = ref(false)
+// 获取详情
+const getDetail = async () => {
+   const { data } = await getMember(query?.id)
+   form.value = data
+}
+onMounted(() => {
+   getDetail()
+})
+</script>

+ 71 - 439
src/views/dgtmedicine/check/index.vue

@@ -3,25 +3,22 @@
     <div class="bg-fff flex1 ov-hd d-flex flex-cln" v-show="showSearch">
       <div class="pd-16 border-bottom">
         <div class="f-s-20 c-333 f-w-7 mb-10">会员列表</div>
-        <el-form :model="queryParams" ref="queryFormRef" :inline="true" label-width="68px">
+        <el-form :model="queryParams" ref="queryFormRef" :inline="true" label-width="auto">
           <el-form-item label="企业名称" prop="cpyName">
-            <el-input v-model="queryParams.cpyName" placeholder="请输入企业名称" clearable style="width: 240px" @keyup.enter="handleQuery" />
+            <el-input v-model="queryParams.cpyName" placeholder="搜企业名称关键字" clearable style="width: 180px"
+              @keyup.enter="handleQuery" />
           </el-form-item>
           <el-form-item label="申请时间段" prop="dateRange">
-            <el-date-picker
-              clearable
-              v-model="queryParams.dateRange"
-              type="daterange"
-              range-separator="至"
-              start-placeholder="开始日期"
-              end-placeholder="结束日期"
-              value-format="YYYY-MM-DD"
-              @change="handleDateRangeChange"
-            />
+            <div class="d-flex" style="width: 180px">
+              <DateRange v-model="queryParams.dateRange" v-model:start-date="queryParams.startDate"
+                v-model:end-date="queryParams.endDate"></DateRange>
+            </div>
           </el-form-item>
-          <el-form-item label="审核状态" prop="reviewStatus">
-            <el-select v-model="queryParams.reviewStatus" placeholder="请选择" clearable style="width: 240px">
-              <el-option v-for="dict in cpy_res_status" :key="dict.value" :label="dict.label" :value="dict.value" @keyup.enter="handleQuery" />
+          <el-form-item label="缴费状态" prop="paymentStatus">
+            <el-select style="width: 140px" v-model="queryParams.paymentStatus" clearable placeholder="搜有效期状态">
+              <el-option label="全部" value=""></el-option>
+              <el-option label="已缴费" value="1"></el-option>
+              <el-option label="未缴费" value="0"></el-option>
             </el-select>
           </el-form-item>
           <el-form-item>
@@ -31,344 +28,81 @@
         </el-form>
       </div>
 
-      <!-- <template #header>
-          <el-row :gutter="20" class="mb8">
-            <el-col :span="2" v-for="level in memberLevelCountList" :key="level.type">
-              <el-button type="text" @click="handleQuery(level)"
-                :style="{ fontWeight: queryParams.vipLevel === level.type ? 'bold' : 'normal', color: queryParams.vipLevel === level.type ? 'black' : 'inherit' }">{{
-                  level.name }}({{ level.num }})</el-button>
-            </el-col>
-            <right-toolbar v-model:showSearch="showSearch" @queryTable="getList"></right-toolbar>
-          </el-row>
-        </template> -->
       <div class="d-flex flex1 ov-hd flex-cln pd-16">
+        <searchTabs :list="memberLevelCountList" v-model="queryParams.reviewStatus" keyLabel="name"
+          @change="handleQuery" keyCount="num" keyValue="type"></searchTabs>
+        <div class="pd-8"></div>
         <div class="flex1 ov-hd">
           <vxe-table :loading="loading" border :data="memberList" min-height="0" max-height="100%">
-            <vxe-column title="企业名称" align="center" field="cpyName" width="220" />
-            <vxe-column title="法人姓名" align="center" field="legalPersonName" />
-            <vxe-column title="法人电话" align="center" field="legalPersonPhone" width="150" />
-            <vxe-column title="当前等级" align="center" field="vipLevel">
+            <vxe-column title="企业名称" align="center" field="cpyName" width="220" :formatter="colNoData" />
+
+            <vxe-column title="单位负责人" align="center" field="contact" width="100" :formatter="colNoData" />
+            <vxe-column title="负责人联系电话" align="center" field="contactTel" wmin-width="100" :formatter="colNoData" />
+            <vxe-column title="会员级别" align="center" field="vipLevel" width="120">
               <template #default="scope">
                 <dict-tag :value="scope.row.vipLevel" :options="vip_level" />
               </template>
             </vxe-column>
-            <vxe-column title="申请等级" align="center" field="applyLevel">
-              <template #default="scope">
-                <dict-tag :value="scope.row.applyLevel" :options="vip_level" />
-              </template>
-            </vxe-column>
-            <vxe-column title="开始时间" align="center" field="startDate" width="100">
-              <template #default="scope">
-                <span>{{ parseTime(scope.row.startDate, '{y}-{m}-{d}') }}</span>
-              </template>
-            </vxe-column>
-            <vxe-column title="结束时间" align="center" field="endDate" width="100">
-              <template #default="scope">
-                <span>{{ parseTime(scope.row.endDate, '{y}-{m}-{d}') }}</span>
-              </template>
-            </vxe-column>
-            <!-- <vxe-column label="业务类型" align="center" prop="cpyBusType" /> -->
-            <vxe-column title="审核状态" align="center" field="reviewStatus">
-              <template #default="scope">
-                <dict-tag :value="scope.row.reviewStatus" :options="cpy_res_status" />
+            <vxe-column title="缴费金额" align="center" min-width="100" :formatter="colNoData" >
+              <template #default="{ row }">
+                {{ row.paymentAmount || '-' }}元
               </template>
             </vxe-column>
-            <vxe-column title="审核信息" align="center" field="reviewMsg" />
-            <vxe-column title="审核时间" align="center" field="reviewTime" width="180">
-              <template #default="scope">
-                <span>{{ parseTime(scope.row.reviewTime, '{y}-{m}-{d} {h}:{i}:{s}') }}</span>
+            <vxe-column title="缴费状态" align="center" min-width="100" :formatter="colNoData" >
+              <template #default="{ row }">
+                {{ +row.paymentStatus ? '已缴费' : '未缴费' }}
               </template>
             </vxe-column>
-            <vxe-column title="创建时间" align="center" field="createTime" width="180">
-              <template #default="scope">
-                <span>{{ parseTime(scope.row.createTime, '{y}-{m}-{d} {h}:{i}:{s}') }}</span>
+            <vxe-column title="申请时间" align="center" field="createTime" min-width="100" :formatter="colNoData" />
+            <vxe-column title="审核状态" align="center" width="100">
+              <template #default="{ row }">
+                <!-- <dict-tag :value="scope.row.reviewStatus" :options="cpy_res_status" /> -->
+                <span :class="{ ['c-res-' + row?.reviewStatus]: true }">{{ selectDictLabel(cpy_res_status, row?.reviewStatus) }}</span>
               </template>
             </vxe-column>
-            <!-- <vxe-column label="更新时间" align="center" prop="updateTime" width="180">
-            <template #default="scope">
-              <span>{{ parseTime(scope.row.updateTime, '{y}-{m}-{d} {h}:{i}:{s}') }}</span>
-            </template>
-          </vxe-column> -->
-            <vxe-column title="操作" align="center" class-name="small-padding fixed-width">
-              <template #default="scope">
-                <el-button link type="primary" @click="showApp(scope.row)" v-if="scope.row.reviewStatus == '0'">审批</el-button>
-                <el-button link type="primary" @click="memberDetail(scope.row)" v-if="scope.row.reviewStatus != '0'">详情</el-button>
+            <vxe-column title="操作" align="center" width="100" fixed="right" class-name="small-padding fixed-width">
+              <template #default="{ row }">
+                <el-button v-if="!+row?.reviewStatus" text type="primary" @click="routeDetail(row)">审核</el-button>
+                <el-button v-else text style="color: #41C06D;"  @click="routeDetail(row)">查看</el-button>
               </template>
             </vxe-column>
           </vxe-table>
         </div>
-        <pagination v-show="total > 0" :total="total" v-model:page="queryParams.pageNum" v-model:limit="queryParams.pageSize" @pagination="getList" />
+        <pagination v-show="total > 0" :total="total" v-model:page="queryParams.pageNum"
+          v-model:limit="queryParams.pageSize" @pagination="getList" />
       </div>
     </div>
-
-    <!--审核弹窗-->
-    <el-dialog :close-on-click-modal="false" :title="dialogApproval.title" v-model="dialogApproval.visible" width="1200px" append-to-body>
-      <el-form ref="memberFormRef" :model="form" :rules="rules">
-        <el-row :gutter="20">
-          <el-col :span="8">
-            <el-form-item label="企业名称" prop="cpyName">
-              <el-text v-model="form.cpyName">{{ form.cpyName }}</el-text>
-            </el-form-item>
-          </el-col>
-          <el-col :span="8">
-            <el-form-item label="法人姓名" prop="legalPersonName">
-              <el-text>{{ form.legalPersonName }}</el-text>
-            </el-form-item>
-          </el-col>
-          <el-col :span="8">
-            <el-form-item label="法人电话" prop="legalPersonPhone">
-              <el-text>{{ form.legalPersonPhone }}</el-text>
-            </el-form-item>
-          </el-col>
-        </el-row>
-        <el-row :gutter="20">
-          <el-col :span="8">
-            <el-form-item label="法人职务" prop="legalPersonPosition">
-              <el-text>{{ form.legalPersonPosition }}</el-text>
-            </el-form-item>
-          </el-col>
-          <el-col :span="8">
-            <el-form-item label="法人身份证正面图片" prop="legalPersonIdFront">
-              <el-image
-                :src="form.legalPersonIdFront"
-                style="width: 100px; height: 100px"
-                show-progress
-                :preview-src-list="[form.legalPersonIdFront]"
-              />
-            </el-form-item>
-          </el-col>
-          <el-col :span="8">
-            <el-form-item label="法人身份证背面图片" prop="legalPersonIdBack">
-              <el-image
-                :src="form.legalPersonIdBack"
-                style="width: 100px; height: 100px"
-                show-progress
-                :preview-src-list="[form.legalPersonIdBack]"
-              />
-            </el-form-item>
-          </el-col>
-        </el-row>
-        <el-row :gutter="20">
-          <el-col :span="8">
-            <el-form-item label="申请会员等级" prop="applyLevel">
-              <dict-tag :value="form.applyLevel" :options="vip_level" />
-            </el-form-item>
-          </el-col>
-          <el-col :span="8">
-            <el-form-item label="邮箱" prop="email">
-              <el-text>{{ form.email }}</el-text>
-            </el-form-item>
-          </el-col>
-          <el-col :span="8">
-            <el-form-item label="主管部门" prop="department">
-              <el-text>{{ form.department }}</el-text>
-            </el-form-item>
-          </el-col>
-        </el-row>
-        <el-row :gutter="20">
-          <el-col :span="8">
-            <el-form-item label="总资产" prop="totalAssets">
-              <el-text>{{ form.totalAssets }}</el-text>
-            </el-form-item>
-          </el-col>
-          <el-col :span="8">
-            <el-form-item label="单位简介" prop="introduction">
-              <el-text>{{ form.introduction }}</el-text>
-            </el-form-item>
-          </el-col>
-          <el-col :span="8">
-            <el-form-item label="入会目的" prop="membershipPurpose">
-              <el-text>{{ form.membershipPurpose }}</el-text>
-            </el-form-item>
-          </el-col>
-        </el-row>
-        <el-row :gutter="20">
-          <el-col :span="8">
-            <el-form-item label="当前会员等级" prop="vipLevel">
-              <dict-tag :value="form.vipLevel" :options="vip_level" />
-            </el-form-item>
-          </el-col>
-          <el-col :span="8">
-            <el-form-item label="开始时间" prop="startDate">
-              <el-text>{{ form.startDate }}</el-text>
-            </el-form-item>
-          </el-col>
-          <el-col :span="8">
-            <el-form-item label="结束时间" prop="endDate">
-              <el-text>{{ form.endDate }}</el-text>
-            </el-form-item>
-          </el-col>
-        </el-row>
-        <el-table v-loading="loading" :data="form.plantingInfo">
-          <vxe-column label="品种名称" align="center" prop="variety" />
-          <vxe-column label="种植面积" align="center" prop="plantingArea" />
-          <vxe-column label="种植地点" align="center" prop="plantingPlace" />
-        </el-table>
-        <el-row :gutter="20">
-          <el-col>
-            <el-form-item label="荣誉证书" prop="companyCertificate">
-              <el-image
-                :src="form.companyCertificate"
-                style="width: 100px; height: 100px"
-                show-progress
-                :preview-src-list="form.companyCertificate"
-              />
-            </el-form-item>
-          </el-col>
-        </el-row>
-      </el-form>
-      <el-form ref="approvalLogFormRef" :model="approvalForm" :rules="approvalRules" label-width="80px">
-        <el-form-item label="审批类型" prop="reviewStatus">
-          <el-select v-model="approvalForm.reviewStatus" placeholder="请选择" clearable style="width: 100%" @change="showRefuse">
-            <template v-for="dict in cpy_res_status">
-              <el-option v-if="dict.value != '0'" :key="dict.value" :label="dict.label" :value="dict.value" />
-            </template>
-          </el-select>
-        </el-form-item>
-        <el-form-item label="审批理由" prop="msg" v-if="refuseShow">
-          <el-input type="textarea" v-model="approvalForm.reviewMsg" placeholder="请输入拒绝理由" />
-        </el-form-item>
-      </el-form>
-      <template #footer>
-        <div class="dialog-footer">
-          <el-button :loading="buttonLoading" type="primary" @click="confirmApp">确 定</el-button>
-          <el-button @click="cancelApp">取 消</el-button>
-        </div>
-      </template>
-    </el-dialog>
   </div>
 </template>
 
 <script setup name="Member" lang="ts">
-import { listMember, getMember, delMember, addMember, updateMember, countLevelMember } from '@/api/dgtmedicine/member';
-import { approvalMember } from '@/api/dgtmedicine/approvalLog';
+import { listMember, delMember, addMember, updateMember, countLevelMember, queryMemberApprovalCount } from '@/api/dgtmedicine/member/index';
+import { approvalMember } from '@/api/dgtmedicine/approvalLog/index';
 import { MemberVO, MemberQuery, MemberForm, MemberLevelCountVO } from '@/api/dgtmedicine/member/types';
 import { ApprovalLogQuery, ApprovalLogForm } from '@/api/dgtmedicine/approvalLog/types';
-import { useRouter } from 'vue-router';
+import { colNoData } from '@/utils/noData';
+import { DateRange, searchTabs } from '@/views/models/index';
 const router = useRouter();
 const { proxy } = getCurrentInstance() as ComponentInternalInstance;
-
 const { cpy_res_status, vip_level } = toRefs<any>(proxy?.useDict('cpy_res_status', 'vip_level'));
-
 const memberList = ref<MemberVO[]>([]);
 const memberLevelCountList = ref<MemberLevelCountVO[]>([]);
-const buttonLoading = ref(false);
 const loading = ref(true);
 const showSearch = ref(true);
-const refuseShow = ref(false);
-const ids = ref<Array<string | number>>([]);
-const single = ref(true);
-const multiple = ref(true);
 const total = ref(0);
-const approvalLogFormRef = ref<ElFormInstance>();
-
 const queryFormRef = ref<ElFormInstance>();
-const memberFormRef = ref<ElFormInstance>();
-
-const dialog = reactive<DialogOption>({
-  visible: false,
-  title: ''
-});
-
-const initFormApprovalData: ApprovalLogForm = {
-  id: undefined,
-  targetType: undefined,
-  reviewStatus: '1',
-  reviewMsg: undefined
-};
 
-const dialogApproval = reactive<DialogOption>({
-  visible: false,
-  title: ''
-});
-
-const approvalData = reactive<PageData<ApprovalLogForm, ApprovalLogQuery>>({
-  form: { ...initFormApprovalData },
+const data = reactive<any>({
   queryParams: {
     pageNum: 1,
     pageSize: 10,
-    targetType: undefined,
-    targetId: undefined,
-    res: undefined,
-    msg: undefined,
-    params: {}
+    reviewStatus: '0',
+    paymentStatus: ''
   },
   rules: {}
 });
 
-const initFormData: MemberForm = {
-  id: undefined,
-  cpyName: '',
-  legalPersonName: '',
-  legalPersonPhone: '',
-  legalPersonPosition: '',
-  legalPersonIdFront: '',
-  legalPersonIdBack: '',
-  companyCertificate: '',
-  email: '',
-  department: '',
-  totalAssets: '',
-  introduction: '',
-  regType: '',
-  membershipPurpose: '',
-  plantingInfo: [],
-  vipLevel: '',
-  startDate: '',
-  endDate: '',
-  reviewStatus: '',
-  reviewMsg: '',
-  reviewBy: '',
-  reviewTime: '',
-  partnerId: '',
-  cpyBusType: '',
-  applyLevel: ''
-};
-const data = reactive<PageData<MemberForm, MemberQuery>>({
-  form: { ...initFormData },
-  queryParams: {
-    pageNum: 1,
-    pageSize: 10,
-    cpyName: '',
-    legalPersonName: '',
-    legalPersonPhone: '',
-    legalPersonPosition: '',
-    legalPersonIdFront: '',
-    legalPersonIdBack: '',
-    companyCertificate: '',
-    email: '',
-    department: '',
-    totalAssets: '',
-    introduction: '',
-    regType: '',
-    membershipPurpose: '',
-    plantingInfo: '',
-    vipLevel: '',
-    startDate: '',
-    endDate: '',
-    reviewStatus: '',
-    reviewMsg: '',
-    reviewBy: '',
-    reviewTime: '',
-    partnerId: '',
-    cpyBusType: '',
-    applyLevel: '',
-    params: {}
-  },
-  rules: {}
-});
-
-const { queryParams, form, rules } = toRefs(data);
-const { form: approvalForm, rules: approvalRules } = toRefs(approvalData);
-
-/**动态显示审批理由 */
-const showRefuse = (res: any) => {
-  if (res == '2') {
-    refuseShow.value = true;
-    return;
-  }
-  refuseShow.value = false;
-};
-
+const { queryParams} = toRefs(data);
 /** 查询会员信息列表 */
 const getList = async () => {
   loading.value = true;
@@ -381,23 +115,11 @@ const getList = async () => {
 /** 查询会员信息列表 */
 const getMemberLevelList = async () => {
   loading.value = true;
-  const res = await countLevelMember(queryParams.value);
+  const res = await queryMemberApprovalCount();
   memberLevelCountList.value = res.data;
   loading.value = false;
 };
 
-/** 取消按钮 */
-const cancel = () => {
-  reset();
-  dialog.visible = false;
-};
-
-/** 表单重置 */
-const reset = () => {
-  form.value = { ...initFormData };
-  memberFormRef.value?.resetFields();
-};
-
 /** 搜索按钮操作 */
 const handleQuery = (level?: any) => {
   queryParams.value.pageNum = 1;
@@ -410,129 +132,39 @@ const handleQuery = (level?: any) => {
 /** 重置按钮操作 */
 const resetQuery = () => {
   queryFormRef.value?.resetFields();
+  queryParams.value.startDate = '';
+  queryParams.value.endDate = '';
   handleQuery();
 };
 
-/**审批弹框 */
-const showApp = (row: any) => {
-  approvalReset();
-  dialogApproval.visible = true;
-  approvalForm.value.id = row.id;
-  getMemberInfo(row.id);
-};
-
-/** 修改按钮操作 */
-const getMemberInfo = async (memberId: string) => {
-  reset();
-  const res = await getMember(memberId);
-  Object.assign(form.value, res.data);
-};
-
-const memberDetail = (row: any) => {
-  router.push({ path: `/szyy/member-detail`, query: { memberId: row.id } });
-};
-
-/** 处理日期范围变化 */
-const handleDateRangeChange = (value: [string, string]) => {
-  if (value && value.length === 2) {
-    queryParams.value.startDate = value[0];
-    queryParams.value.endDate = value[1];
-  } else {
-    queryParams.value.startDate = undefined;
-    queryParams.value.endDate = undefined;
-  }
-  handleQuery();
-};
-
-/** 审批表单重置 */
-const approvalReset = () => {
-  refuseShow.value = false;
-  approvalForm.value = { ...initFormApprovalData };
-  approvalLogFormRef.value?.resetFields();
-};
-
-/** 多选框选中数据 */
-const handleSelectionChange = (selection: MemberVO[]) => {
-  ids.value = selection.map((item) => item.id);
-  single.value = selection.length != 1;
-  multiple.value = !selection.length;
-};
-
-/** 新增按钮操作 */
-const handleAdd = () => {
-  reset();
-  dialog.visible = true;
-  dialog.title = '添加会员信息';
-};
-
-/** 修改按钮操作 */
-const handleUpdate = async (row?: MemberVO) => {
-  reset();
-  const _id = row?.id || ids.value[0];
-  const res = await getMember(_id);
-  Object.assign(form.value, res.data);
-  dialog.visible = true;
-  dialog.title = '修改会员信息';
-};
-
-/** 提交按钮 */
-const submitForm = () => {
-  memberFormRef.value?.validate(async (valid: boolean) => {
-    if (valid) {
-      buttonLoading.value = true;
-      if (form.value.id) {
-        await updateMember(form.value).finally(() => (buttonLoading.value = false));
-      } else {
-        await addMember(form.value).finally(() => (buttonLoading.value = false));
+const routeDetail = (row: any) => {
+  router.push({ path: `/szyy/check-detail`, query: { id: row.id } });
+};
+const deleteItem = async (row: any) => {
+  console.log(row);
+  ElMessageBox({
+    title: '删除提示',
+    cancelButtonText: '取消',
+    confirmButtonText: '确认删除',
+    showCancelButton: true,
+    confirmButtonClass: 'el-button--danger',
+    message: h('p', null, [
+      h('div', null, `确认要删除企业:${row.cpyName} 吗?`),
+      h('div', null, [h('span', null, '注意:'), h('span', { style: 'color: #F56C6C' }, '删除后,该企业将不再是协会的会员单位,请谨慎操作!')])
+    ]),
+    callback: async (action: string) => {
+      if (action === 'confirm') {
+        const res = await delMember(row.id);
+        if (res) {
+          ElMessage.success('删除成功');
+          getList();
+        }
       }
-      proxy?.$modal.msgSuccess('修改成功');
-      dialog.visible = false;
-      await getList();
     }
   });
 };
-
-/**取消审批弹框 */
-const cancelApp = () => {
-  approvalReset();
-  dialogApproval.visible = false;
-};
-
-/**审批弹框 */
-const confirmApp = () => {
-  approvalLogFormRef.value?.validate(async (valid: boolean) => {
-    if (valid) {
-      buttonLoading.value = true;
-      await approvalMember(approvalForm.value).finally(() => (buttonLoading.value = false));
-      proxy?.$modal.msgSuccess('操作成功');
-      dialogApproval.visible = false;
-      getList();
-    }
-  });
-};
-
-/** 删除按钮操作 */
-const handleDelete = async (row?: MemberVO) => {
-  const _ids = row?.id || ids.value;
-  await proxy?.$modal.confirm('是否确认删除会员信息编号为"' + _ids + '"的数据项?').finally(() => (loading.value = false));
-  await delMember(_ids);
-  proxy?.$modal.msgSuccess('删除成功');
-  await getList();
-};
-
-/** 导出按钮操作 */
-const handleExport = () => {
-  proxy?.download(
-    'dgtmedicine/member/export',
-    {
-      ...queryParams.value
-    },
-    `member_${new Date().getTime()}.xlsx`
-  );
-};
-
 onMounted(() => {
   getList();
   getMemberLevelList();
 });
-</script>
+</script>

+ 2 - 1
src/views/dgtmedicine/member/index.vue

@@ -62,7 +62,7 @@
             </vxe-column>
             <vxe-column title="有效期至" align="center" field="endDate" width="140" :formatter="colNoData" />
             <vxe-column title="入会时间" align="center" field="startDate" wmin-width="100" :formatter="colNoData" />
-            <vxe-column title="操作" width="330" fixed="right" class-name="small-padding fixed-width">
+            <vxe-column title="操作" width="330" align="center" fixed="right" class-name="small-padding fixed-width">
               <template #default="{ row }">
                 <el-button text type="primary" @click="memberDetail(row)">详情</el-button>
                 <span></span>
@@ -134,6 +134,7 @@ const data = reactive<any>({
     pageSize: 10,
     vipLevel: '',
     paymentStatus: '1',
+    reviewStatus: '1',
     vipEnable: ''
   },
   rules: {}

+ 69 - 0
src/views/dgtmedicine/model/CheckNoPass.vue

@@ -0,0 +1,69 @@
+<template>
+    <vxe-modal v-model="dialogVisible" :title="title" show-zoom resize show-footer destroy-on-close transfer @hide="close" :width="width">
+        <template #default>
+           <div>
+              是否确认将企业 <span class="c-primary">{{ props.info?.cpyName }}</span>
+           </div>
+           <div>审核为不通过!请填写不通过原因</div>
+           <el-form ref="formRef" :model="form" :rules="rules" label-width="auto" hide-required-asterisk>
+                <el-form-item  prop="reviewMsg">
+                    <el-input type="textarea" :rows="3" maxlength="50" v-model="form.reviewMsg" placeholder="请填写不通过原因…" clearable />
+                </el-form-item>
+            </el-form>
+        </template>
+        <template #footer>
+            <el-button @click="close">取消</el-button>
+            <el-button type="danger" @click="submitForm">确认不通过</el-button>
+        </template>
+    </vxe-modal>
+</template>
+
+<script setup name="CheckPass" lang="ts">
+import { approvalMember } from '@/api/dgtmedicine/approvalLog/index';
+import { uploadInvoice } from '@/api/dgtmedicine/vipPayment/index';
+import { propTypes } from '@/utils/propTypes';
+import { FormInstance } from 'element-plus';
+const emit = defineEmits(['update:show', 'close', 'success']);
+const props = defineProps({
+    show: propTypes.bool.def(false),
+    title: propTypes.string.def('审核通过'),
+    width: propTypes.number.def(400),
+    info: propTypes.any.def(null),
+});
+const { proxy } = getCurrentInstance() as ComponentInternalInstance;
+const dialogVisible = ref(false);
+const form = ref<any>({
+    reviewStatus: '2',
+    reviewMsg: ''
+});
+const rules = reactive({
+    reviewMsg: [{ required: true, message: '请填写不通过原因', trigger: 'change' }],
+})
+const formRef = ref<FormInstance>();
+const close = () => {
+    formRef.value?.resetFields();
+    emit('update:show', false);
+    emit('close', false);
+};
+const submitForm = async () => {
+    try {
+        await formRef.value?.validate();
+        const res = await approvalMember({ ...form.value, id: props.info?.id });
+        if (res) {
+            proxy.$modal.msgSuccess('审核不通过成功!')
+            close();
+            emit('success', true);
+        }
+    } catch (error) {
+        console.error(error);
+    }
+};
+
+watch(
+    () => props.show,
+    (val) => {
+        dialogVisible.value = val;
+    },
+    { immediate: true }
+);
+</script>

+ 62 - 0
src/views/dgtmedicine/model/CheckPass.vue

@@ -0,0 +1,62 @@
+<template>
+    <vxe-modal v-model="dialogVisible" :title="title" show-zoom resize show-footer destroy-on-close transfer @hide="close" :width="width">
+        <template #default>
+           <div>
+              是否确认将企业 <span class="c-primary">{{ props.info?.cpyName }}</span>审核为通过?
+           </div>
+        </template>
+        <template #footer>
+            <el-button @click="close">取消</el-button>
+            <el-button type="primary" @click="submitForm">确认通过</el-button>
+        </template>
+    </vxe-modal>
+</template>
+
+<script setup name="CheckPass" lang="ts">
+import { approvalMember } from '@/api/dgtmedicine/approvalLog/index';
+import { uploadInvoice } from '@/api/dgtmedicine/vipPayment/index';
+import { propTypes } from '@/utils/propTypes';
+import { FormInstance } from 'element-plus';
+const emit = defineEmits(['update:show', 'close', 'success']);
+const props = defineProps({
+    show: propTypes.bool.def(false),
+    title: propTypes.string.def('审核通过'),
+    width: propTypes.number.def(400),
+    info: propTypes.any.def(null),
+});
+const { proxy } = getCurrentInstance() as ComponentInternalInstance;
+const dialogVisible = ref(false);
+const form = ref<any>({
+    reviewStatus: '1'
+});
+const rules = reactive({
+   
+})
+const formRef = ref<FormInstance>();
+const close = () => {
+    // formRef.value?.resetFields();
+    emit('update:show', false);
+    emit('close', false);
+};
+const submitForm = async () => {
+    try {
+        // await formRef.value?.validate();
+        const res = await approvalMember({ ...form.value, id: props.info?.id });
+        if (res) {
+            proxy.$modal.msgSuccess('审核通过成功!')
+            close();
+            emit('success', true);
+        }
+    } catch (error) {
+        console.error(error);
+    }
+};
+
+watch(
+    () => props.show,
+    (val) => {
+        dialogVisible.value = val;
+    },
+    { immediate: true }
+);
+</script>

+ 3 - 1
src/views/dgtmedicine/model/index.ts

@@ -1,2 +1,4 @@
 // 上传发票组件
-export { default as uploadInvoiceForm } from './uploadInvoiceForm.vue'; // 上传发票
+export { default as uploadInvoiceForm } from './uploadInvoiceForm.vue'; // 上传发票
+export { default as CheckPass } from './CheckPass.vue'; // 审核为通过弹框
+export { default as CheckNoPass } from './CheckNoPass.vue'; // 审核为不通过弹框

+ 1 - 3
src/views/dgtmedicine/model/uploadInvoiceForm.vue

@@ -14,7 +14,7 @@
     </vxe-modal>
 </template>
 
-<script setup name="EditLine" lang="ts">
+<script setup name="uploadInvoiceForm" lang="ts">
 import { uploadInvoice } from '@/api/dgtmedicine/vipPayment/index';
 import { propTypes } from '@/utils/propTypes';
 import { FormInstance } from 'element-plus';
@@ -24,8 +24,6 @@ const props = defineProps({
     title: propTypes.string.def('上传发票'),
     width: propTypes.number.def(560),
     info: propTypes.any.def(null),
-    lineId: propTypes.string.def(''),
-    dict: propTypes.any.def({}),
 });
 const { proxy } = getCurrentInstance() as ComponentInternalInstance;
 const dialogVisible = ref(false);