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

Merge branch 'wuguojie' into liuheng

刘恒 1 год назад
Родитель
Сommit
5b9105e059

+ 6 - 0
.editorconfig

@@ -7,3 +7,9 @@ indent_size = 2 # 一个 tab 用 2 个空格代替
 end_of_line = lf # 换行符使用 unix 的换行符 \n
 end_of_line = lf # 换行符使用 unix 的换行符 \n
 insert_final_newline = true # 去掉每行末尾的空格
 insert_final_newline = true # 去掉每行末尾的空格
 trim_trailing_whitespace = true # 文件末尾都加一个空行
 trim_trailing_whitespace = true # 文件末尾都加一个空行
+charset = utf-8
+indent_style = space
+indent_size = 2
+end_of_line = lf
+insert_final_newline = true
+trim_trailing_whitespace = true

+ 1 - 1
.env.development

@@ -7,7 +7,7 @@ VITE_APP_TITLE = 掌柜运营平台
 VITE_APP_API_BASEURL = http://192.168.0.253:8001  #田智
 VITE_APP_API_BASEURL = http://192.168.0.253:8001  #田智
 # VITE_APP_API_BASEURL = http://192.168.0.55:8001  #董鑫
 # VITE_APP_API_BASEURL = http://192.168.0.55:8001  #董鑫
 # VITE_APP_API_BASEURL = http://192.168.0.106:8001  #屈晨
 # VITE_APP_API_BASEURL = http://192.168.0.106:8001  #屈晨
-# VITE_APP_API_BASEURL = http://192.168.0.59:8001  #徐强
+#VITE_APP_API_BASEURL = http://192.168.0.59:8001  #徐强
 
 
 # 调试工具,可设置 eruda 或 vconsole,如果不需要开启则留空
 # 调试工具,可设置 eruda 或 vconsole,如果不需要开启则留空
 VITE_APP_DEBUG_TOOL =
 VITE_APP_DEBUG_TOOL =

+ 8 - 4
src/api/index.ts

@@ -14,12 +14,15 @@ import operationApi from './modules/operation.ts'
 import menuApi from './modules/menu.ts'
 import menuApi from './modules/menu.ts'
 import commonApi from "./modules/common.ts";
 import commonApi from "./modules/common.ts";
 import teamApi from "@/api/modules/team.ts";
 import teamApi from "@/api/modules/team.ts";
-import representativeApi from "@/api/modules/representative.ts"
-import contentApi from "@/api/modules/content.ts"
+
 import advertisementApi from "@/api/modules/advertisement.ts"
 import advertisementApi from "@/api/modules/advertisement.ts"
+import representativeApi from "@/api/modules/representative.ts";
+import contentApi from "@/api/modules/content.ts";
 // import { useRouter } from 'vue-router'
 // import { useRouter } from 'vue-router'
 // const router = useRouter()
 // const router = useRouter()
 import router from "@/router"
 import router from "@/router"
+import lotteryApi from '@/api/modules/lottery.ts';
+
 const axiosInstance:ApiInstance = axios.create({
 const axiosInstance:ApiInstance = axios.create({
   baseURL: (import.meta.env.DEV && import.meta.env.VITE_OPEN_PROXY === 'true') ? '/proxy/' : import.meta.env.VITE_APP_API_BASEURL,
   baseURL: (import.meta.env.DEV && import.meta.env.VITE_OPEN_PROXY === 'true') ? '/proxy/' : import.meta.env.VITE_APP_API_BASEURL,
   timeout: 1000 * 60,
   timeout: 1000 * 60,
@@ -70,7 +73,7 @@ axiosInstance.interceptors.response.use(
         // router.push({
         // router.push({
         //   path:"/login"
         //   path:"/login"
         // })
         // })
-    
+
         // console.log(localStorage.getItem('token'))
         // console.log(localStorage.getItem('token'))
         Message({
         Message({
           message: '登录信息已过期,请重新登录!!!',
           message: '登录信息已过期,请重新登录!!!',
@@ -113,6 +116,7 @@ const api = {
   teamApi: teamApi(axiosInstance),
   teamApi: teamApi(axiosInstance),
   representativeApi: representativeApi(axiosInstance),
   representativeApi: representativeApi(axiosInstance),
   contentApi:contentApi(axiosInstance),
   contentApi:contentApi(axiosInstance),
-  advertisementApi:advertisementApi(axiosInstance)
+  advertisementApi:advertisementApi(axiosInstance),
+  lotteryApi: lotteryApi(axiosInstance),
 }
 }
 export default api
 export default api

+ 52 - 0
src/api/modules/lottery.ts

@@ -0,0 +1,52 @@
+import { ApiInstance } from '../type'
+
+export interface AddActivity {
+  actName: string,
+  actMethod: string, // 1 九宫格 2 大转盘
+  actStartTime: string,
+  actEndTime: string,
+  actDept: string,
+  deptIds: string[],
+  id?: string
+}
+export interface GetActivityList {
+  actName?: string,
+  actStatus?: string
+}
+
+export interface AwardList {
+  awardType?: string,
+  cashType?: string,
+  awardName?: string,
+  fixedAmount?: number,
+  minAmount?: number,
+  maxAmount?: number,
+  awardImg?: string
+}
+export interface AddActivityAward {
+  awardList: AwardList[],
+  activityId: string
+}
+
+export interface GetActivityRecord {
+  pages: number,
+  size: number,
+  salesman?: string,
+  createTimeStart?: string,
+  createTimeEnd?: string,
+  awardName?: string,
+  awardType?: string
+}
+
+const lotteryApi = (axiosInstance: ApiInstance) => ({
+  addActivity: (data: AddActivity) => axiosInstance.post('/activity/addActivity', data),
+  getActivityList: (data: GetActivityList) => axiosInstance.post('/activity/getActivityList', data),
+  addActivityAward: (data: AddActivityAward) => axiosInstance.post('/activity/addActivityAward', data),
+  getActivity: (data: { id: string }) => axiosInstance.post('/activity/getActivity', data),
+  updateActivity: (data: AddActivity) => axiosInstance.post('/activity/updateActivity', data),
+  deleteActivity: (data: { id: string }) => axiosInstance.post('/activity/deleteActivity', data),
+  endActivity: (data: { id: string }) => axiosInstance.post('/activity/endActivity', data),
+  getActivityRecord: (data: GetActivityRecord) => axiosInstance.post('/activity/getActivityRecord', data)
+})
+
+export default lotteryApi

+ 5 - 1
src/api/modules/operation.ts

@@ -74,6 +74,10 @@ export interface OperationIsEnable {
 export interface OperationEdit extends AddOperation {
 export interface OperationEdit extends AddOperation {
   id: string
   id: string
 }
 }
+export interface GetUser {
+  id: string,
+  typeAttr?: number
+}
 // 业务员管理相关接口
 // 业务员管理相关接口
 const operationApi = (axiosInstance: ApiInstance) => ({
 const operationApi = (axiosInstance: ApiInstance) => ({
   addOperation: (data: AddOperation) => axiosInstance.post('/userInfo/add', data), // 新赠
   addOperation: (data: AddOperation) => axiosInstance.post('/userInfo/add', data), // 新赠
@@ -90,7 +94,7 @@ const operationApi = (axiosInstance: ApiInstance) => ({
     leaderId: string,
     leaderId: string,
     getAll: number
     getAll: number
   }) => axiosInstance.post('/userInfo/batchLeader', data), // 设置负责人
   }) => axiosInstance.post('/userInfo/batchLeader', data), // 设置负责人
-  getUser: () => axiosInstance.post('/userInfo/getUser', { typeAttr: 2 }), // 获取管理人/推荐人
+  getUser: (data: GetUser) => axiosInstance.post('/userInfo/getUser', data), // 获取管理人/推荐人
   addBankCard: (data: AddBankCard) => axiosInstance.post('/userInfo/addBankCard', data), // 添加银行卡
   addBankCard: (data: AddBankCard) => axiosInstance.post('/userInfo/addBankCard', data), // 添加银行卡
   salesmanAuthSuccess: (data: { userInfoId: string }) => axiosInstance.post('/userInfo/salesmanAuthSuccess', data), // 审核通过
   salesmanAuthSuccess: (data: { userInfoId: string }) => axiosInstance.post('/userInfo/salesmanAuthSuccess', data), // 审核通过
   salesmanAuthFailed: (data: {
   salesmanAuthFailed: (data: {

+ 1 - 2
src/api/modules/role.ts

@@ -4,8 +4,7 @@ interface roleData {
   desc: string;
   desc: string;
   system: string,
   system: string,
   permsId: number[],
   permsId: number[],
-  perms: string[],
-  [property:string]:any,
+  perms: string[]
 }
 }
 const roleApi = (axiosInstance: ApiInstance) => ({
 const roleApi = (axiosInstance: ApiInstance) => ({
   // 新增角色
   // 新增角色

BIN
src/assets/images/jiugongge.png


BIN
src/assets/images/zhuanpan.png


+ 1 - 1
src/assets/styles/globals.css

@@ -281,4 +281,4 @@ textarea {
   justify-content: flex-start;
   justify-content: flex-start;
 }
 }
 
 
-/* 消息提示弹窗 */
+/* 消息提示弹窗 */

+ 0 - 1
src/layouts/components/Menu/index.vue

@@ -30,7 +30,6 @@ const isMenuPopup = computed<MenuInjection['isMenuPopup']>(() => {
 
 
 // 解析传入的 menu 数据,并保存到 items 和 subMenus 对象中
 // 解析传入的 menu 数据,并保存到 items 和 subMenus 对象中
 function initItems(menu: MenuProps['menu'], parentPaths: string[] = []) {
 function initItems(menu: MenuProps['menu'], parentPaths: string[] = []) {
-  console.log(menu)
   menu.forEach((item) => {
   menu.forEach((item) => {
     const index = item.path ?? JSON.stringify(item)
     const index = item.path ?? JSON.stringify(item)
     if (item.children) {
     if (item.children) {

+ 0 - 1
src/main.ts

@@ -43,7 +43,6 @@ app.use(pinia)
 app.use(router)
 app.use(router)
 app.use(VueCropper)
 app.use(VueCropper)
 app.use(ui)
 app.use(ui)
-
 directive(app)
 directive(app)
 if (icons.isOfflineUse) {
 if (icons.isOfflineUse) {
   for (const info of icons.collections) {
   for (const info of icons.collections) {

+ 3 - 3
src/router/guards.ts

@@ -77,12 +77,12 @@ function setupRoutes(router: Router) {
         routeStore.flatRoutes.forEach((route) => {
         routeStore.flatRoutes.forEach((route) => {
 
 
           if (!/^(?:https?:|mailto:|tel:)/.test(route.path)) {
           if (!/^(?:https?:|mailto:|tel:)/.test(route.path)) {
-            
+
             removeRoutes.push(router.addRoute(route as RouteRecordRaw))
             removeRoutes.push(router.addRoute(route as RouteRecordRaw))
           }
           }
         })
         })
         if (settingsStore.settings.app.routeBaseOn !== 'filesystem') {
         if (settingsStore.settings.app.routeBaseOn !== 'filesystem') {
-     
+
           routeStore.flatSystemRoutes.forEach((route) => {
           routeStore.flatSystemRoutes.forEach((route) => {
             removeRoutes.push(router.addRoute(route as RouteRecordRaw))
             removeRoutes.push(router.addRoute(route as RouteRecordRaw))
           })
           })
@@ -99,7 +99,7 @@ function setupRoutes(router: Router) {
         }else{
         }else{
           next()
           next()
         }
         }
-       
+
       }
       }
     }
     }
     else {
     else {

+ 55 - 0
src/router/modules/marketing.ts

@@ -0,0 +1,55 @@
+import type { RouteRecordRaw } from 'vue-router'
+
+const Layout = () => import('@/layouts/index.vue')
+
+const routes: RouteRecordRaw = {
+  path: '/marketingManagement',
+  component: Layout,
+  redirect: '/marketingManagement/lottery',
+  name: 'MarketingManagement',
+  meta: {
+    title: '营销工具',
+  },
+  children: [
+    // {
+    //   path: '/operationDetail',
+    //   name: 'OperationDetail',
+    //   component: () => import('@/views/operationManagement/operationDetail.vue'),
+    //   meta: {
+    //     title: '业务员详情',
+    //     menu: false,
+    //   },
+    // },
+    {
+      path: 'lottery',
+      name: 'Lottery',
+      component: () => import('@/views/marketingManagement/lottery.vue'),
+      meta: {
+        title: '抽奖活动',
+      },
+    },
+    {
+      path: 'configurate',
+      name: 'Configurate',
+      component: () => import('@/views/marketingManagement/configurate.vue'),
+      meta: {
+        title: '抽奖活动',
+        menu: false,
+        auth: []
+      },
+      children: []
+    },
+    {
+      path: 'record',
+      name: 'Record',
+      component: () => import('@/views/marketingManagement/record.vue'),
+      meta: {
+        title: '抽奖记录',
+        auth: []
+      },
+      children: []
+    },
+  ],
+}
+
+export default routes

+ 9 - 1
src/router/routes.ts

@@ -8,6 +8,7 @@ import representative from "./modules/representative";
 import operationManagement from "./modules/operation";
 import operationManagement from "./modules/operation";
 import personnel from "./modules/personnel";
 import personnel from "./modules/personnel";
 import content from "./modules/content"
 import content from "./modules/content"
+import marketingManagement from "./modules/marketing.ts";
 // import {  } from "@/store/modules/user";
 // import {  } from "@/store/modules/user";
 // 固定路由(默认路由
 // 固定路由(默认路由
 // console.log(useUserStore)
 // console.log(useUserStore)
@@ -88,6 +89,13 @@ const asyncRoutes: Route.recordMainRaw[] = [
     },
     },
     children: [operationManagement],
     children: [operationManagement],
   },
   },
+  {
+    meta: {
+      title: '营销管理',
+      icon: "i-uim:box",
+    },
+    children: [marketingManagement],
+  },
   {
   {
     meta: {
     meta: {
       title: "代办事项",
       title: "代办事项",
@@ -102,7 +110,7 @@ const asyncRoutes: Route.recordMainRaw[] = [
     },
     },
     children: [content],
     children: [content],
   },
   },
-  
+
   // {
   // {
   //   meta: {
   //   meta: {
   //     title: "租户运营",
   //     title: "租户运营",

+ 0 - 1
src/views/login.vue

@@ -209,4 +209,3 @@ const formType = ref<"login" | "register" | "resetPassword">("login");
   opacity: 0;
   opacity: 0;
 }
 }
 </style>
 </style>
-

+ 593 - 0
src/views/marketingManagement/configurate.vue

@@ -0,0 +1,593 @@
+<template>
+  <div class="configurate">
+    <div class="steps">
+      <el-steps style="width: 800px" :active="active" finish-status="success" simple>
+        <el-step title="配置基本信息" />
+        <el-step title="配置奖品" />
+        <el-step title="配置完成" />
+      </el-steps>
+    </div>
+    <div class="content" v-if="active===0">
+      <el-row :gutter="20" style="height: 100%">
+        <el-col :span="4" class="image">
+          <img v-if="basicForm.actMethod=='2'" src="@/assets/images/zhuanpan.png" />
+          <img v-else src="@/assets/images/jiugongge.png" />
+        </el-col>
+        <el-col :span="20">
+          <el-descriptions title="基本信息">
+            <el-descriptions-item>
+              <el-form ref="BasicFormRef" :model="basicForm" :rules="basicRules">
+                <el-row :gutter="20">
+                  <el-col :span="12">
+                    <el-form-item label="活动名称" prop="actName">
+                      <el-input v-model="basicForm.actName" placeholder="输入活动名称"></el-input>
+                    </el-form-item>
+                  </el-col>
+                  <el-col :span="12">
+                    <el-form-item label="抽奖方式" prop="actMethod">
+                      <el-radio-group v-model="basicForm.actMethod">
+                        <el-radio-button label="大转盘" value="2"></el-radio-button>
+                        <el-radio-button label="九宫格" value="1"></el-radio-button>
+                      </el-radio-group>
+                    </el-form-item>
+                  </el-col>
+                </el-row>
+                <el-row :gutter="20">
+                  <el-col :span="12">
+                    <el-form-item label="开始时间" prop="actStartTime">
+                      <el-date-picker
+                        v-model="basicForm.actStartTime"
+                        type="date"
+                        placeholder="请选择"
+                        format="YYYY-MM-DD"
+                        value-format="YYYY-MM-DD"
+                        style="width: 100%"
+                      />
+                    </el-form-item>
+                  </el-col>
+                  <el-col :span="12">
+                    <el-form-item label="结束时间" prop="actEndTime">
+                      <el-date-picker
+                        v-model="basicForm.actEndTime"
+                        type="date"
+                        placeholder="请选择"
+                        format="YYYY-MM-DD"
+                        value-format="YYYY-MM-DD"
+                        :disabled-date="disabledDate"
+                        style="width: 100%"
+                      />
+                    </el-form-item>
+                  </el-col>
+                </el-row>
+                <el-row :gutter="20">
+                  <el-col :span="12">
+                    <el-form-item label="所属机构" prop="actDept">
+                      <el-cascader
+                        clearable
+                        v-model="basicForm.actDept"
+                        :options="option"
+                        :props="cascaderProps"
+                        style="width: 100%"
+                        placeholder="选择机构"
+                        filterable
+                      ></el-cascader>
+                    </el-form-item>
+                  </el-col>
+                </el-row>
+              </el-form>
+            </el-descriptions-item>
+          </el-descriptions>
+          <el-divider />
+          <el-descriptions title="参与限制">
+            <el-descriptions-item>
+              <div>
+                <a>参与机构</a>&nbsp;&nbsp;&nbsp;
+                <el-button link type="primary" @click="selectDeptData">
+                  选择
+                </el-button>
+              </div>
+              <el-table
+                :data="deptData"
+                height="330"
+              >
+                <el-table-column label="机构" prop="name"></el-table-column>
+                <el-table-column label="操作" width="150">
+                  <template #default="scope">
+                    <el-button link type="primary" @click="deleteDeptData(scope)">
+                      删除
+                    </el-button>
+                  </template>
+                </el-table-column>
+              </el-table>
+            </el-descriptions-item>
+          </el-descriptions>
+          <div class="btns">
+            <el-button plain @click="cancelFirst">取消</el-button>
+            <el-button type="primary" @click="confirmFirst(BasicFormRef)">下一步</el-button>
+          </div>
+        </el-col>
+      </el-row>
+    </div>
+    <div class="content" v-if="active===1">
+      <el-row :gutter="20" style="height: 100%">
+        <el-col :span="4" class="image">
+          <img v-if="basicForm.actMethod=='2'" src="@/assets/images/zhuanpan.png" />
+          <img v-else src="@/assets/images/jiugongge.png" />
+        </el-col>
+        <el-col :span="20">
+          <el-descriptions title="奖品配置" style="height: 650px;">
+            <el-descriptions-item>
+              <el-tabs v-model="activeName" class="demo-tabs" @tab-click="handleClick">
+                <el-tab-pane v-for="(item, index) in gifts" :label="item.tab.label" :name="item.tab.name" :key="index">
+                  <el-form :model="item.form" label-width="70">
+                    <el-form-item label="奖品分类" prop="type">
+                      <el-radio-group v-model="item.form.awardType">
+                        <el-radio value="1">现金</el-radio>
+                        <el-radio value="2">增值</el-radio>
+                      </el-radio-group>
+                      <div v-if="item.form.awardType=='1'" style="display: flex; align-items: center; margin-left: 20px;">
+                        <span>面值类型:</span>
+                        <el-select v-model="item.form.awardCashType" style="width: 150px;">
+                          <el-option label="固定面值" value="1"></el-option>
+                          <el-option label="区间面值" value="2"></el-option>
+                        </el-select>
+                      </div>
+                    </el-form-item>
+                    <el-form-item label="奖品名称" prop="name">
+                      <el-input v-model="item.form.awardName" placeholder="请输入"></el-input>
+                    </el-form-item>
+                    <el-form-item label="现金面值" prop="money" v-if="item.form.awardType=='1'">
+                      <el-input v-if="item.form.awardCashType == '1'" v-model="item.form.awardFixedAmount" placeholder="请输入"></el-input>
+                      <div v-else style="display: flex; align-items: center">
+                        <el-input v-model="item.form.awardMinAmount" placeholder="请输入"></el-input>
+                        &nbsp;至&nbsp;
+                        <el-input v-model="item.form.awardMaxAmount" placeholder="请输入"></el-input>
+                      </div>
+                    </el-form-item>
+                    <el-form-item label="奖品图" prop="image">
+                      <el-upload v-if="item.form.imageUrl" style="display: inline" :auto-upload="false" :show-file-list="false" accept=".png, .jpg, .jpeg" @change="uploadImage($event, item)">
+                        <img class="imageUrl" :src="item.form.imageUrl" />
+                      </el-upload>
+                      <el-upload v-else style="display: inline" :auto-upload="false" :show-file-list="false" accept=".png, .jpg, .jpeg" @change="uploadImage($event, item)">
+                        <el-icon class="btn-icon"><Plus /></el-icon>
+                      </el-upload>
+                    </el-form-item>
+                  </el-form>
+                </el-tab-pane>
+              </el-tabs>
+            </el-descriptions-item>
+          </el-descriptions>
+          <div class="btns">
+            <el-button plain @click="cancelSecond">取消</el-button>
+            <el-button type="primary" @click="confirmSecond(BasicFormRef)">下一步</el-button>
+          </div>
+        </el-col>
+      </el-row>
+    </div>
+    <div class="content" v-if="active===2 || active===3">
+      <div class="result">
+        <el-result
+          icon="success"
+          title="奖品配置完成!"
+        >
+          <template #extra>
+            <el-button type="primary" @click="back">返回</el-button>
+          </template>
+        </el-result>
+      </div>
+    </div>
+    <el-dialog
+      v-model="selectDeptShow"
+      title="参与机构选择"
+      width="600"
+    >
+      <el-input
+        v-model="filterText"
+        style="width: 240px"
+        placeholder="输入名称"
+        :prefix-icon="Search"
+      />
+      <el-tree
+        ref="treeRef"
+        class="filter-tree"
+        show-checkbox
+        node-key="id"
+        :data="option"
+        :props="defaultProps"
+        :check-strictly="true"
+        :default-expand-all="true"
+        :filter-node-method="filterNode"
+        @check="getCheckedNodes"
+      />
+      <template #footer>
+        <el-button plain @click="cancelCheckDept">取消</el-button>
+        <el-button type="primary" @click="confirmCheckDept">确认</el-button>
+      </template>
+    </el-dialog>
+  </div>
+</template>
+
+<script setup lang="ts">
+import { ref } from 'vue'
+import type { FormRules, FormInstance, ElTree } from "element-plus";
+import { Search } from '@element-plus/icons-vue'
+import api from '@/api'
+import {ElMessage, ElMessageBox} from "element-plus";
+import { useRouter, useRoute } from 'vue-router'
+
+const router = useRouter()
+const route = useRoute()
+
+let active = ref(0)
+
+const BasicFormRef = ref<FormInstance>()
+
+let basicForm = ref({
+  deptIds: [],
+  actMethod: '2'
+})
+const basicRules = ref<FormRules>({
+  actName: [
+    { required: true, trigger: "blur", message: "请填写活动名称" }
+  ],
+  actMethod: [
+    { required: true, trigger: "change", message: "请选择抽奖方式" }
+  ],
+  actStartTime: [
+    { required: true, trigger: "blur", message: "请选择开始时间" }
+  ],
+  actEndTime: [
+    { required: true, trigger: "blur", message: "请选择结束时间" }
+  ],
+  actDept: [
+    { required: true, trigger: "change", message: "请选择所属机构" }
+  ]
+})
+
+const disabledDate = (time: Date) => {
+  return time.getTime() < Date.now()
+}
+
+let deptData = ref([])
+
+let activeName = ref('1')
+let gifts = ref([
+  {
+    tab: {
+      label: '奖品1',
+      name: '1'
+    },
+    form: {
+      awardType: '1',
+      awardCashType: '1'
+    }
+  },{
+    tab: {
+      label: '奖品2',
+      name: '2'
+    },
+    form: {
+      awardType: '1',
+      awardCashType: '1'
+    }
+  }
+])
+
+const handleClick = (tab, event) => {
+
+}
+// 机构
+let option = ref([])
+const cascaderProps = {
+  value: 'id',
+  label: 'name',
+  children: 'children'
+}
+const institutionList = () => {
+  api.institutionApi.institutionList({ name: '', system: '' }).then(res => {
+    if(res?.code == 200) {
+      option.value = res.data
+    } else {
+      ElMessage({
+        message: res.msg,
+        type: 'warning'
+      })
+    }
+  })
+}
+
+// 第一步取消
+const cancelFirst = () => {
+
+}
+const confirmFirst = async (BasicFormRef: FormInstance) => {
+  if(!BasicFormRef) {
+    BasicFormRef.resetFields()
+    return
+  }
+  await BasicFormRef.validate((valid) => {
+    if(valid) {
+      if(basicForm.value.deptIds.length>0) {
+        active.value = 1
+      } else {
+        ElMessage({
+          message: '请勾选参与机构!',
+          type: 'warning'
+        })
+      }
+    } else {
+      ElMessage({
+        message: '请正确填写相关信息!',
+        type: 'warning'
+      })
+    }
+  })
+}
+
+const uploadImage = async (file, item) => {
+  let files = file.raw
+  const params = new FormData(); // 声明formData数据类型
+  params.append("file", files);
+  params.append("type", "image");
+  const { code, data, msg } = await api.commonApi.fileUpload(params)
+  if(code == 200) {
+    item.form.awardImg = data.id
+    item.form.imageUrl = data.downloadUrl
+  }
+}
+
+const cancelSecond = () => {
+  active.value = 0
+}
+const confirmSecond = (BasicFormRef: FormInstance) => {
+  let awardList = gifts.value.map((item) => {
+    if(item.form.awardCashType == '1') {
+      return {
+        awardId: item.form.id?item.form.id:null,
+        awardType: item.form.awardType,
+        awardCashType: item.form.awardCashType,
+        awardName: item.form.awardName,
+        awardFixedAmount: item.form.awardFixedAmount,
+        awardImg: item.form.awardImg,
+      }
+    } else {
+      return {
+        awardId: item.form.id?item.form.id:null,
+        awardType: item.form.awardType,
+        awardCashType: item.form.awardCashType,
+        awardName: item.form.awardName,
+        awardMinAmount: item.form.awardMinAmount,
+        awardMaxAmount: item.form.awardMaxAmount,
+        awardImg: item.form.awardImg,
+      }
+    }
+  })
+  let formData = {...basicForm.value}
+  if(basicForm.value.actDept.length != 1&&typeof basicForm.value.actDept != 'string') {
+    formData.actDept = basicForm.value.actDept[basicForm.value.actDept.length-1]
+  }
+  formData.awardList = awardList
+  console.log(789, formData)
+  if(route.query.id) {
+    api.lotteryApi.updateActivity(formData).then(res => {
+      if(res.code == 200) {
+        ElMessage({
+          message: res.msg,
+          type: 'success'
+        })
+        active.value = 3
+      } else {
+        ElMessage({
+          message: res.msg,
+          type: 'warning'
+        })
+      }
+    })
+  } else {
+    api.lotteryApi.addActivity(formData).then(res => {
+      if(res.code == 200) {
+        ElMessage({
+          message: res.msg,
+          type: 'success'
+        })
+        active.value = 3
+      } else {
+        ElMessage({
+          message: res.msg,
+          type: 'warning'
+        })
+      }
+      BasicFormRef.resetFields()
+    })
+  }
+  // api.lotteryApi.addActivityAward({
+  //   awardList: awardList,
+  //   activityId: activityId.value
+  // }).then(res => {
+  //   if(res.code == 200) {
+  //     ElMessage({
+  //       message: res.msg,
+  //       type: 'success'
+  //     })
+  //     active.value = 3
+  //   } else {
+  //     ElMessage({
+  //       message: res.msg,
+  //       type: 'warning'
+  //     })
+  //   }
+  // })
+}
+
+// 回显相关数据
+let editData = ref(null)
+let checkedDeptIds = ref([])
+let checkedDeptData = ref([])
+
+const initEdit = (id) => {
+  api.lotteryApi.getActivity({ id: id }).then(res => {
+    if(res.code == 200) {
+      editData.value = {...res.data}
+      basicForm.value = {...editData.value}
+      checkedDeptIds.value = res.data.deptIds
+      checkedDeptData.value = res.data.deptData
+      deptData.value = checkedDeptData.value
+      if(res.data.awardList&&res.data.awardList.length>0) {
+        gifts.value.forEach((item, index) => {
+          item.form = res.data.awardList[index]
+        })
+      }
+    } else {
+      ElMessage({
+        message: res.msg,
+        type: 'warning'
+      })
+    }
+  })
+}
+
+// 参与机构数选择弹框
+let selectDeptShow = ref(false)
+let filterText = ref('')
+const treeRef = ref<InstanceType<typeof ElTree>>()
+const defaultProps = {
+  children: 'children',
+  label: 'name',
+}
+watch(filterText, (val) => {
+  treeRef.value!.filter(val)
+})
+const selectDeptData = () => {
+  selectDeptShow.value = true
+  nextTick(() => {
+    treeRef.value!.setCheckedKeys([...basicForm.value.deptIds], true)
+  })
+}
+const deleteDeptData = (scope) => {
+  ElMessageBox({
+    title: '删除机构',
+    message: '确定要删除该机构吗?',
+    type: 'warning',
+    showCancelButton: true,
+    confirmButtonText: '确定',
+    cancelButtonText: '取消',
+  }).then(( action ) => {
+    if(action === 'confirm') {
+      let arr = deptData.value.filter(item => item.id != scope.row.id)
+      let brr = basicForm.value.deptIds.filter(item => item != scope.row.id)
+      checkedDeptData.value = [...arr]
+      checkedDeptIds.value = [...brr]
+      basicForm.value.deptIds = [...checkedDeptIds.value]
+      deptData.value = [...checkedDeptData.value]
+      console.log(123, basicForm.value.deptIds)
+      console.log(456, deptData.value)
+    }
+  }).catch(( action ) => {
+
+  })
+}
+const filterNode = (value: string, data: any) => {
+  if (!value) return true
+  return data.name.includes(value)
+}
+const getCheckedNodes = (a, b) => {
+  checkedDeptIds.value = [...b.checkedKeys]
+  checkedDeptData.value = [...b.checkedNodes]
+}
+
+const cancelCheckDept = () => {
+  selectDeptShow.value = false
+  checkedDeptIds.value = [...basicForm.value.deptIds]
+  checkedDeptData.value = [...deptData.value]
+  // if(route.query.id) {
+  //   selectDeptShow.value = false
+  //   checkedDeptIds.value = [...basicForm.value.deptIds]
+  //   checkedDeptData.value = [...deptData.value]
+  // } else {
+  //   checkedDeptIds.value = []
+  //   checkedDeptData.value = []
+  //   basicForm.value.deptIds = []
+  //   deptData.value = []
+  // }
+}
+const confirmCheckDept = () => {
+  selectDeptShow.value = false
+  basicForm.value.deptIds = [...checkedDeptIds.value]
+  deptData.value = [...checkedDeptData.value]
+}
+
+const back = () => {
+  router.push({
+    path: '/marketingManagement/lottery'
+  })
+}
+
+onMounted(() => {
+  institutionList()
+  if(route.query.id) {
+    initEdit(route.query.id)
+  }
+})
+
+</script>
+
+<style scoped lang="scss">
+.configurate{
+  width: calc(100% - 40px);
+  margin: 20px;
+  background: white;
+  .steps{
+    width: 100%;
+    display: flex;
+    align-content: center;
+    justify-content: center;
+  }
+  .content{
+    height: 688px;
+    .image{
+      display: flex;
+      align-items: center;
+      justify-content: center;
+      img{
+        width: calc(100% - 20px);
+        height: 70%;
+      }
+    }
+    .btns{
+      display: flex;
+      align-items: center;
+      justify-content: center;
+    }
+    .imageUrl{
+      width: 100px;
+      height: 100px;
+      border-radius: 5px;
+    }
+    .btn-icon{
+      border: 1px solid #ccc;
+      width: 100px;
+      height: 100px;
+      font-size: 30px;
+      color: #ccc;
+      border-radius: 5px;
+    }
+    .result{
+      width: 100%;
+      height: 100%;
+      display: flex;
+      align-items: center;
+      justify-content: center;
+    }
+  }
+  :deep(.el-steps--simple) {
+    background: none;
+  }
+  :deep(.el-step__head.is-success) {
+    color: #00a0f4;
+    border-color: #00a0f4;
+  }
+  :deep(.el-step__title.is-success) {
+    color: #00a0f4;
+  }
+}
+</style>

+ 231 - 0
src/views/marketingManagement/lottery.vue

@@ -0,0 +1,231 @@
+<template>
+  <div class="lottery">
+    <el-form class="form" :model="form">
+      <el-row :gutter="20">
+        <el-col :span="8">
+          <el-form-item label="活动名称">
+            <el-input v-model="form.actName" placeholder="请输入标题查找" clearable></el-input>
+          </el-form-item>
+        </el-col>
+        <el-col :span="8">
+          <el-form-item label="活动状态">
+            <el-select v-model="form.actStatus" placeholder="请选择活动状态" clearable>
+              <el-option label="未开始" value="1" key="1"></el-option>
+              <el-option label="进行中" value="2" key="2"></el-option>
+              <el-option label="已结束" value="3" key="3"></el-option>
+            </el-select>
+          </el-form-item>
+        </el-col>
+        <el-col :span="8">
+          <el-button type="primary" @click="search">查询</el-button>
+          <el-button type="primary" plain @click="reset">重置</el-button>
+        </el-col>
+      </el-row>
+    </el-form>
+    <el-button class="publish" type="primary" icon="Position" @click="createActive">发布新活动</el-button>
+    <el-table
+      :data="tableData"
+      height="580"
+      style="width: 100%"
+    >
+      <el-table-column prop="actName" label="活动信息" width="300"></el-table-column>
+      <el-table-column prop="actStartTime" label="开始时间" width="200"></el-table-column>
+      <el-table-column prop="actEndTime" label="结束时间" width="200"></el-table-column>
+      <el-table-column prop="actMethod" label="抽奖方式" width="150">
+        <template #default="scope">
+          {{ scope.row.actMethod == '1'?'九宫格':scope.row.actMethod == '2'?'大转盘':'' }}
+        </template>
+      </el-table-column>
+      <el-table-column prop="actDept" label="所属机构" width="300"></el-table-column>
+      <el-table-column prop="f" label="参与范围" width="300"></el-table-column>
+      <el-table-column prop="g" label="参与用户" width="150"></el-table-column>
+      <el-table-column prop="actStatus" label="状态" width="150">
+        <template #default="scope">
+          {{ scope.row.actStatus == '1'?'未开始':scope.row.actStatus == '2'?'进行中':scope.row.actStatus == '3'?'已结束':'' }}
+        </template>
+      </el-table-column>
+      <el-table-column fixed="right" label="操作" width="150">
+        <template #default="scope">
+          <div style="display: flex; align-content: center; justify-content: center">
+            <el-button link type="primary" size="small" @click="edit(scope)">
+              编辑
+            </el-button>
+            <el-dropdown
+              placement="bottom"
+              trigger="click"
+              @command="tableDataCommand(scope, $event)"
+            >
+              <el-button link type="primary" size="small">更多</el-button>
+              <template #dropdown>
+                <el-dropdown-menu>
+                  <el-dropdown-item command="删除">删除</el-dropdown-item>
+                  <el-dropdown-item command="结束活动" v-if="scope.row.actStatus == '2'">结束活动</el-dropdown-item>
+                </el-dropdown-menu>
+              </template>
+            </el-dropdown>
+          </div>
+        </template>
+      </el-table-column>
+    </el-table>
+    <div style="display: flex; justify-content: center; margin-top: 15px">
+      <el-pagination
+        v-model:current-page="currentPage"
+        v-model:page-size="pageSize"
+        :page-sizes="[10, 20, 30, 40]"
+        layout="total, sizes, prev, pager, next, jumper"
+        :total="total"
+        @size-change="handleSizeChange"
+        @current-change="handleCurrentChange"
+      />
+    </div>
+  </div>
+</template>
+
+<script setup lang="ts">
+import { ref } from 'vue'
+import {ElMessage, ElMessageBox} from "element-plus";
+import { useRouter } from 'vue-router'
+import api from '@/api'
+
+const router = useRouter()
+
+// 搜索条件
+let form = ref({})
+
+// 列表数据
+let tableData = ref([{
+  a:'1111'
+}])
+// 更多
+const tableDataCommand = (scope, e) => {
+  switch (e) {
+    case '删除':
+      ElMessageBox({
+        title: '删除活动',
+        message: '确定要删除该活动吗?',
+        type: 'warning',
+        showCancelButton: true,
+        confirmButtonText: '确定删除',
+        cancelButtonText: '取消',
+      }).then(( action ) => {
+        if(action === 'confirm') {
+          api.lotteryApi.deleteActivity({ id: scope.row.id }).then(res => {
+            if(res.code == 200) {
+              ElMessage({
+                message: res.msg,
+                type: 'success'
+              })
+              initData()
+            } else {
+              ElMessage({
+                message: res.msg,
+                type: 'warning'
+              })
+            }
+          })
+        }
+      }).catch(( action ) => {
+
+      })
+      break;
+    case '结束活动':
+      ElMessageBox({
+        title: '结束活动',
+        message: '结束后,参与机构的活动将结束,不可抽奖,请确认是否结束?',
+        type: 'warning',
+        showCancelButton: true,
+        confirmButtonText: '确定结束',
+        cancelButtonText: '取消',
+      }).then(( action ) => {
+        if(action === 'confirm') {
+          api.lotteryApi.endActivity({ id: scope.row.id }).then(res => {
+            if(res.code == 200) {
+              ElMessage({
+                message: res.msg,
+                type: 'success'
+              })
+              initData()
+            } else {
+              ElMessage({
+                message: res.msg,
+                type: 'warning'
+              })
+            }
+          })
+        }
+      }).catch(( action ) => {
+
+      })
+  }
+}
+
+// 分页数据
+let currentPage = ref(1)
+let pageSize = ref(10)
+let total = ref(0)
+const handleSizeChange = (pageSize) => {
+  pageSize.value = pageSize
+}
+const handleCurrentChange = (page) => {
+  currentPage.value = page
+}
+
+const createActive = () => {
+  router.push({
+    path: '/marketingManagement/configurate'
+  })
+}
+
+const initData = () => {
+  api.lotteryApi.getActivityList({
+    ...form.value,
+    pages: currentPage.value,
+    size: pageSize.value
+  }).then(res => {
+    if(res.code == 200) {
+      tableData.value = res.data.records
+      total.value = res.data.total
+    } else {
+      ElMessage({
+        message: res.msg,
+        type: 'warning'
+      })
+    }
+  })
+}
+
+const search = () => {
+  currentPage.value = 1
+  pageSize.value = 10
+  initData()
+}
+const reset = () => {
+  form.value = {}
+  currentPage.value = 1
+  pageSize.value = 10
+  initData()
+}
+const edit = (scope) => {
+  router.push({
+    path: '/marketingManagement/configurate',
+    query: {
+      id: scope.row.id
+    }
+  })
+}
+
+onMounted(() => {
+  initData()
+})
+
+</script>
+
+<style scoped lang="scss">
+.lottery {
+  width: calc(100% - 40px);
+  margin: 20px;
+  .publish{
+    margin-bottom: 20px;
+  }
+}
+</style>

+ 158 - 0
src/views/marketingManagement/record.vue

@@ -0,0 +1,158 @@
+<template>
+  <div class="record">
+    <el-form :model="form" label-width="100">
+      <el-row :gutter="20">
+        <el-col :span="8">
+          <el-form-item label="业务员信息">
+            <el-input v-model="form.salesman" placeholder="请输入"></el-input>
+          </el-form-item>
+        </el-col>
+        <el-col :span="8">
+          <el-form-item label="抽奖时间">
+            <el-date-picker
+              v-model="form.time"
+              type="daterange"
+              range-separator="至"
+              start-placeholder="开始时间"
+              end-placeholder="结束时间"
+              format="YYYY-MM-DD"
+              value-format="YYYY-MM-DD"
+              @change="timeChange"
+            />
+          </el-form-item>
+        </el-col>
+        <el-col :span="8">
+          <el-form-item label="奖品类型">
+            <el-select v-model="form.awardType">
+              <el-option label="现金" value="1"></el-option>
+              <el-option label="增值服务" value="2"></el-option>
+            </el-select>
+          </el-form-item>
+        </el-col>
+      </el-row>
+      <el-row :gutter="20">
+        <el-col :span="8">
+          <el-form-item label="奖品名称">
+            <el-input v-model="form.awardName" placeholder="请输入"></el-input>
+          </el-form-item>
+        </el-col>
+        <el-col :span="8">
+          <el-form-item label="中奖结果">
+            <el-select v-model="form.awardResult">
+              <el-option label="结果1" value="1"></el-option>
+            </el-select>
+          </el-form-item>
+        </el-col>
+        <el-col :span="8">
+          <el-button type="primary" @click="search">查询</el-button>
+          <el-button type="primary" plain @click="reset">重置</el-button>
+        </el-col>
+      </el-row>
+    </el-form>
+    <p>
+      <el-button type="primary">导出数据</el-button>
+    </p>
+    <el-table
+      :data="tableData"
+      height="580"
+      style="width: 100%"
+    >
+      <el-table-column type="selection" width="55"></el-table-column>
+      <el-table-column prop="name" label="业务员" ></el-table-column>
+      <el-table-column prop="mobile" label="手机号" ></el-table-column>
+      <el-table-column prop="deptName" label="归属机构" ></el-table-column>
+      <el-table-column prop="createTime" label="抽奖时间" ></el-table-column>
+      <el-table-column prop="e" label="中奖结果" ></el-table-column>
+      <el-table-column prop="awardType" label="奖品类型" >
+        <template #default="scope">
+          {{ scope.row.awardType=='1'?'现金':'增值服务' }}
+        </template>
+      </el-table-column>
+      <el-table-column prop="awardName" label="奖品名称" ></el-table-column>
+      <el-table-column prop="h" label="中奖数量" ></el-table-column>
+    </el-table>
+    <div style="display: flex; justify-content: center; margin-top: 15px">
+      <el-pagination
+        v-model:current-page="currentPage"
+        v-model:page-size="pageSize"
+        :page-sizes="[10, 20, 30, 40]"
+        layout="total, sizes, prev, pager, next, jumper"
+        :total="total"
+        @size-change="handleSizeChange"
+        @current-change="handleCurrentChange"
+      />
+    </div>
+  </div>
+</template>
+
+<script setup lang="ts">
+import { ref } from 'vue'
+import api from '@/api'
+import { ElMessage } from "element-plus";
+
+let form = ref({})
+// 列表数据
+let tableData = ref([])
+
+// 分页数据
+let currentPage = ref(1)
+let pageSize = ref(10)
+let total = ref(0)
+const handleSizeChange = (pageSize) => {
+  pageSize.value = pageSize
+  initData()
+}
+const handleCurrentChange = (page) => {
+  currentPage.value = page
+  initData()
+}
+const timeChange = (e) => {
+  if(e) {
+    form.value.createTimeStart = e[0]
+    form.value.createTimeEnd = e[1]
+  } else {
+    form.value.createTimeStart = ''
+    form.value.createTimeEnd = ''
+  }
+}
+const initData = () => {
+  api.lotteryApi.getActivityRecord({
+    pages: currentPage.value,
+    size: pageSize.value,
+    ...form.value
+  }).then(res => {
+    if(res.code == 200) {
+      tableData.value = res.data.records
+      total.value = res.data.total
+    } else {
+      ElMessage({
+        message: res.msg,
+        type: 'warning'
+      })
+    }
+  })
+}
+const search = () => {
+  currentPage.value = 1
+  pageSize.value = 10
+  initData()
+}
+const reset = () => {
+  form.value = {}
+  currentPage.value = 1
+  pageSize.value = 10
+  initData()
+}
+
+onMounted(() => {
+  initData();
+})
+</script>
+
+<style scoped lang="scss">
+.record{
+  width: 100%;
+  padding: 20px;
+  background: white;
+}
+</style>

+ 7 - 1
src/views/operationManagement/channel.vue

@@ -17,7 +17,7 @@
             </el-dropdown>
             </el-dropdown>
           </div>
           </div>
         </div>
         </div>
-        <el-button class="add-btn" icon="plus" @click="addTeamShow = true">添加团队</el-button>
+        <el-button class="add-btn" icon="plus" @click="addTeamDraw">添加团队</el-button>
       </el-col>
       </el-col>
       <el-col :span="20">
       <el-col :span="20">
         <el-row :gutter="20">
         <el-row :gutter="20">
@@ -275,6 +275,12 @@ const treeNodeCommend = (item, e) => {
       break;
       break;
   }
   }
 }
 }
+const addTeamDraw = () => {
+  addTeamShow.value = true
+  nextTick(() => {
+    AddTeamRef.value.teamForm.attribute = 2
+  })
+}
 const closeAddTeamDialog = (type) => {
 const closeAddTeamDialog = (type) => {
   addTeamShow.value = false
   addTeamShow.value = false
   initTeam()
   initTeam()

+ 0 - 2
src/views/operationManagement/modules/addCard.vue

@@ -61,7 +61,6 @@ let props = defineProps<{
 }>()
 }>()
 const emits = defineEmits(['closeDialog'])
 const emits = defineEmits(['closeDialog'])
 watch(() => props.userInfo, (newVal, oldVal) => {
 watch(() => props.userInfo, (newVal, oldVal) => {
-  console.log(123123123, newVal, oldVal)
   bankForm.value = newVal
   bankForm.value = newVal
 }, { deep: true });
 }, { deep: true });
 
 
@@ -103,7 +102,6 @@ const uploadImage = async (file) => {
   params.append("file", files);
   params.append("file", files);
   params.append("type", "image");
   params.append("type", "image");
   const { code, data, msg } = await api.commonApi.fileUpload(params)
   const { code, data, msg } = await api.commonApi.fileUpload(params)
-  console.log(123, data)
   if(code == 200) {
   if(code == 200) {
     bankForm.value.imageUrl = data.downloadUrl
     bankForm.value.imageUrl = data.downloadUrl
     bankForm.value.attachment = data.id
     bankForm.value.attachment = data.id

+ 203 - 49
src/views/operationManagement/modules/addOperation.vue

@@ -12,20 +12,24 @@
             <el-row :gutter="20">
             <el-row :gutter="20">
               <el-col :span="10">
               <el-col :span="10">
                 <el-form-item prop="typeAttr" label="业务员类型">
                 <el-form-item prop="typeAttr" label="业务员类型">
-                  <el-select v-model="operationForm.typeAttr" placeholder="请选择业务员类型">
-                    <el-option key="1" value="1" label="前线人员"></el-option>
+                  <el-select v-model="operationForm.typeAttr" placeholder="请选择业务员类型" @change="typeAttrChange">
+                    <el-option key="1" value="6" label="个代"></el-option>
+                    <el-option key="2" value="8" label="渠道"></el-option>
+                    <el-option key="3" value="5" label="团队"></el-option>
+                    <el-option key="4" value="7" label="电销组"></el-option>
+                    <!--<el-option key="1" value="1" label="前线人员"></el-option>
                     <el-option key="2" value="2" label="后线人员"></el-option>
                     <el-option key="2" value="2" label="后线人员"></el-option>
                     <el-option key="3" value="3" label="合伙人"></el-option>
                     <el-option key="3" value="3" label="合伙人"></el-option>
                     <el-option key="4" value="4" label="工作室管理员"></el-option>
                     <el-option key="4" value="4" label="工作室管理员"></el-option>
-                    <el-option key="5" value="5" label="团队长"></el-option>
+                    <el-option key="5" value="5" label="团队"></el-option>
                     <el-option key="6" value="6" label="个代"></el-option>
                     <el-option key="6" value="6" label="个代"></el-option>
                     <el-option key="7" value="7" label="电销"></el-option>
                     <el-option key="7" value="7" label="电销"></el-option>
-                    <el-option key="8" value="8" label="渠道"></el-option>
+                    <el-option key="8" value="8" label="渠道"></el-option>-->
                   </el-select>
                   </el-select>
                 </el-form-item>
                 </el-form-item>
               </el-col>
               </el-col>
               <el-col :span="10">
               <el-col :span="10">
-                <el-form-item prop="deptId" label="所属团队">
+                <el-form-item prop="deptId" label="所属团队" v-if="operationForm.typeAttr!='6'">
                   <el-select v-model="operationForm.organizationId" placeholder="请选择所属团队" @change="deptChange">
                   <el-select v-model="operationForm.organizationId" placeholder="请选择所属团队" @change="deptChange">
                     <el-option v-for="item in teamList" :key="item.id" :value="item.id" :label="item.name"></el-option>
                     <el-option v-for="item in teamList" :key="item.id" :value="item.id" :label="item.name"></el-option>
                   </el-select>
                   </el-select>
@@ -35,25 +39,25 @@
             <el-row :gutter="20">
             <el-row :gutter="20">
               <el-col :span="10">
               <el-col :span="10">
                 <el-form-item prop="name" label="姓名">
                 <el-form-item prop="name" label="姓名">
-                  <el-input v-model="operationForm.name" placeholder="请填写姓名"></el-input>
+                  <el-input v-model="operationForm.name" placeholder="请填写姓名" maxlength="20"></el-input>
                 </el-form-item>
                 </el-form-item>
               </el-col>
               </el-col>
               <el-col :span="10">
               <el-col :span="10">
                 <el-form-item prop="mobile" label="手机号">
                 <el-form-item prop="mobile" label="手机号">
-                  <el-input v-model="operationForm.mobile" placeholder="请填写手机号"></el-input>
+                  <el-input type="number" oninput="if(value.length>11)value=value.slice(0,11)" v-model="operationForm.mobile" placeholder="请填写手机号"></el-input>
                 </el-form-item>
                 </el-form-item>
               </el-col>
               </el-col>
             </el-row>
             </el-row>
             <el-row :gutter="20">
             <el-row :gutter="20">
               <el-col :span="10">
               <el-col :span="10">
                 <el-form-item prop="organization" label="所属机构">
                 <el-form-item prop="organization" label="所属机构">
-                  <el-input disabled v-model="operationForm.organization"></el-input>
-<!--                  <el-cascader style="width: 100%" v-model="operationForm.organization" placeholder="请选择所属机构" :options="option" :props="cascaderProps"></el-cascader>-->
+                  <el-input v-if="operationForm.typeAttr!='6'" disabled v-model="operationForm.organization"></el-input>
+                  <el-cascader v-else style="width: 100%" v-model="operationForm.organization" placeholder="请选择所属机构" :options="deptOption" :props="optionProps"></el-cascader>
                 </el-form-item>
                 </el-form-item>
               </el-col>
               </el-col>
               <el-col :span="10">
               <el-col :span="10">
                 <el-form-item prop="identity" label="证件号">
                 <el-form-item prop="identity" label="证件号">
-                  <el-input v-model="operationForm.identity" placeholder="请填写证号"></el-input>
+                  <el-input v-model="operationForm.identity" placeholder="请填写身份证号"></el-input>
                 </el-form-item>
                 </el-form-item>
               </el-col>
               </el-col>
             </el-row>
             </el-row>
@@ -66,6 +70,7 @@
                     placeholder="请选择"
                     placeholder="请选择"
                     format="YYYY-MM-DD"
                     format="YYYY-MM-DD"
                     value-format="YYYY-MM-DD"
                     value-format="YYYY-MM-DD"
+                    :disabled-date="disabledDateStart"
                     style="width: 100%"
                     style="width: 100%"
                   />
                   />
                 </el-form-item>
                 </el-form-item>
@@ -78,6 +83,7 @@
                     placeholder="请选择"
                     placeholder="请选择"
                     format="YYYY-MM-DD"
                     format="YYYY-MM-DD"
                     value-format="YYYY-MM-DD"
                     value-format="YYYY-MM-DD"
+                    :disabled-date="disabledDateEnd"
                     style="width: 100%"
                     style="width: 100%"
                   />
                   />
                 </el-form-item>
                 </el-form-item>
@@ -107,7 +113,7 @@
               <el-col :span="10">
               <el-col :span="10">
                 <el-form-item prop="referrerId" label="推荐人">
                 <el-form-item prop="referrerId" label="推荐人">
                   <el-select v-model="operationForm.referrerId" filterable placeholder="请选择推荐人" @change="(e) => {operationForm.referrerNumber = e}">
                   <el-select v-model="operationForm.referrerId" filterable placeholder="请选择推荐人" @change="(e) => {operationForm.referrerNumber = e}">
-                    <el-option v-for="(item, index) in userList" :key="item.id" :value="item.id" :label="item.name"></el-option>
+                    <el-option v-for="(item, index) in recommendList" :key="item.id" :value="item.id" :label="item.name"></el-option>
                   </el-select>
                   </el-select>
                 </el-form-item>
                 </el-form-item>
               </el-col>
               </el-col>
@@ -123,7 +129,7 @@
       <el-descriptions title="资料附件">
       <el-descriptions title="资料附件">
         <el-descriptions-item>
         <el-descriptions-item>
           <template #default>
           <template #default>
-            <el-form-item prop="" label="身份证(人像面)" label-width="150">
+            <el-form-item prop="IDCardFront" label="身份证(人像面)" label-width="150">
               <el-upload action="" v-if="!IDCardFront" :auto-upload="false" :show-file-list="false" accept=".png, .jpg, .jpeg" @change="uploadImage($event, 1)">
               <el-upload action="" v-if="!IDCardFront" :auto-upload="false" :show-file-list="false" accept=".png, .jpg, .jpeg" @change="uploadImage($event, 1)">
                 <el-button link type="primary">上传</el-button>
                 <el-button link type="primary">上传</el-button>
               </el-upload>
               </el-upload>
@@ -134,12 +140,12 @@
                     <el-icon class="btn-icon"><Upload /></el-icon>
                     <el-icon class="btn-icon"><Upload /></el-icon>
                   </el-upload>
                   </el-upload>
                   <el-icon class="btn-icon" @click="imageView(1)"><View /></el-icon>
                   <el-icon class="btn-icon" @click="imageView(1)"><View /></el-icon>
-                  <el-icon class="btn-icon"><Download /></el-icon>
-                  <el-icon class="btn-icon"><Delete /></el-icon>
+                  <el-icon class="btn-icon" @click="downloadImage(1)"><Download /></el-icon>
+                  <el-icon class="btn-icon" @click="deleteImage(1)"><Delete /></el-icon>
                 </div>
                 </div>
               </div>
               </div>
             </el-form-item>
             </el-form-item>
-            <el-form-item prop="" label="身份证(国徽面)" label-width="150">
+            <el-form-item prop="IDCardBack" label="身份证(国徽面)" label-width="150">
               <el-upload v-if="!IDCardBack" :auto-upload="false"  :show-file-list="false" accept=".png, .jpg, .jpeg" @change="uploadImage($event, 2)">
               <el-upload v-if="!IDCardBack" :auto-upload="false"  :show-file-list="false" accept=".png, .jpg, .jpeg" @change="uploadImage($event, 2)">
                 <el-button link type="primary">上传</el-button>
                 <el-button link type="primary">上传</el-button>
               </el-upload>
               </el-upload>
@@ -150,8 +156,8 @@
                     <el-icon class="btn-icon"><Upload /></el-icon>
                     <el-icon class="btn-icon"><Upload /></el-icon>
                   </el-upload>
                   </el-upload>
                   <el-icon class="btn-icon" @click="imageView(2)"><View /></el-icon>
                   <el-icon class="btn-icon" @click="imageView(2)"><View /></el-icon>
-                  <el-icon class="btn-icon"><Download /></el-icon>
-                  <el-icon class="btn-icon"><Delete /></el-icon>
+                  <el-icon class="btn-icon" @click="downloadImage(2)"><Download /></el-icon>
+                  <el-icon class="btn-icon" @click="deleteImage(2)"><Delete /></el-icon>
                 </div>
                 </div>
               </div>
               </div>
             </el-form-item>
             </el-form-item>
@@ -166,8 +172,8 @@
                     <el-icon class="btn-icon"><Upload /></el-icon>
                     <el-icon class="btn-icon"><Upload /></el-icon>
                   </el-upload>
                   </el-upload>
                   <el-icon class="btn-icon" @click="imageView(3)"><View /></el-icon>
                   <el-icon class="btn-icon" @click="imageView(3)"><View /></el-icon>
-                  <el-icon class="btn-icon"><Download /></el-icon>
-                  <el-icon class="btn-icon"><Delete /></el-icon>
+                  <el-icon class="btn-icon" @click="downloadImage(3)"><Download /></el-icon>
+                  <el-icon class="btn-icon" @click="deleteImage(3)"><Delete /></el-icon>
                 </div>
                 </div>
               </div>
               </div>
             </el-form-item>
             </el-form-item>
@@ -374,8 +380,8 @@
                     <el-icon class="btn-icon"><Upload /></el-icon>
                     <el-icon class="btn-icon"><Upload /></el-icon>
                   </el-upload>
                   </el-upload>
                   <el-icon class="btn-icon" @click="imageView(4)"><View /></el-icon>
                   <el-icon class="btn-icon" @click="imageView(4)"><View /></el-icon>
-                  <el-icon class="btn-icon"><Download /></el-icon>
-                  <el-icon class="btn-icon"><Delete /></el-icon>
+                  <el-icon class="btn-icon" @click="downloadImage(4)"><Download /></el-icon>
+                  <el-icon class="btn-icon" @click="deleteImage(4)"><Delete /></el-icon>
                 </div>
                 </div>
               </div>
               </div>
             </el-form-item>
             </el-form-item>
@@ -390,8 +396,8 @@
                     <el-icon class="btn-icon"><Upload /></el-icon>
                     <el-icon class="btn-icon"><Upload /></el-icon>
                   </el-upload>
                   </el-upload>
                   <el-icon class="btn-icon" @click="imageView(5)"><View /></el-icon>
                   <el-icon class="btn-icon" @click="imageView(5)"><View /></el-icon>
-                  <el-icon class="btn-icon"><Download /></el-icon>
-                  <el-icon class="btn-icon"><Delete /></el-icon>
+                  <el-icon class="btn-icon" @click="downloadImage(5)"><Download /></el-icon>
+                  <el-icon class="btn-icon" @click="deleteImage(5)"><Delete /></el-icon>
                 </div>
                 </div>
               </div>
               </div>
             </el-form-item>
             </el-form-item>
@@ -406,8 +412,8 @@
                     <el-icon class="btn-icon"><Upload /></el-icon>
                     <el-icon class="btn-icon"><Upload /></el-icon>
                   </el-upload>
                   </el-upload>
                   <el-icon class="btn-icon" @click="imageView(6)"><View /></el-icon>
                   <el-icon class="btn-icon" @click="imageView(6)"><View /></el-icon>
-                  <el-icon class="btn-icon"><Download /></el-icon>
-                  <el-icon class="btn-icon"><Delete /></el-icon>
+                  <el-icon class="btn-icon" @click="downloadImage(6)"><Download /></el-icon>
+                  <el-icon class="btn-icon" @click="deleteImage(6)"><Delete /></el-icon>
                 </div>
                 </div>
               </div>
               </div>
             </el-form-item>
             </el-form-item>
@@ -422,8 +428,8 @@
                     <el-icon class="btn-icon"><Upload /></el-icon>
                     <el-icon class="btn-icon"><Upload /></el-icon>
                   </el-upload>
                   </el-upload>
                   <el-icon class="btn-icon" @click="imageView(7)"><View /></el-icon>
                   <el-icon class="btn-icon" @click="imageView(7)"><View /></el-icon>
-                  <el-icon class="btn-icon"><Download /></el-icon>
-                  <el-icon class="btn-icon"><Delete /></el-icon>
+                  <el-icon class="btn-icon" @click="downloadImage(7)"><Download /></el-icon>
+                  <el-icon class="btn-icon" @click="deleteImage(7)"><Delete /></el-icon>
                 </div>
                 </div>
               </div>
               </div>
             </el-form-item>
             </el-form-item>
@@ -526,7 +532,7 @@ const operationRules = ref<FormRules>({
   mobile: [
   mobile: [
     { required: true, trigger: "blur", message: "请填写手机号" },
     { required: true, trigger: "blur", message: "请填写手机号" },
     {
     {
-      pattern: /^1[34578][0-9]{9}$/,
+      pattern: /^1[0-9]{10}$/,
       message: '请填写正确的手机号',
       message: '请填写正确的手机号',
       trigger: 'blur'
       trigger: 'blur'
     }
     }
@@ -549,17 +555,23 @@ const operationRules = ref<FormRules>({
     { required: true, trigger: "change", message: "请选择证件有效期止" }
     { required: true, trigger: "change", message: "请选择证件有效期止" }
   ],
   ],
   leaderId: [
   leaderId: [
-    { required: true, trigger: "change", message: "请选择管理人" }
+    { required: true, trigger: "blur", message: "请选择管理人" }
   ],
   ],
   leaderNumber: [
   leaderNumber: [
     { required: true, trigger: "blur", message: "请填写管理人工号" }
     { required: true, trigger: "blur", message: "请填写管理人工号" }
   ],
   ],
   referrerId: [
   referrerId: [
-    { required: true, trigger: "change", message: "请选择推荐人" }
+    { required: true, trigger: "blur", message: "请选择推荐人" }
   ],
   ],
   referrerNumber: [
   referrerNumber: [
     { required: true, trigger: "blur", message: "请填写推荐人工号" }
     { required: true, trigger: "blur", message: "请填写推荐人工号" }
   ],
   ],
+  IDCardFront: [
+    { required: true, trigger: "change", message: "请上传身份(人像面)" }
+  ],
+  IDCardBack: [
+    { required: true, trigger: "change", message: "请上传身份(国徽面)" }
+  ],
   bankCardId: [
   bankCardId: [
     {
     {
       pattern: /^([1-9]{1})(\d{15}|\d{16}|\d{18})$/,
       pattern: /^([1-9]{1})(\d{15}|\d{16}|\d{18})$/,
@@ -607,6 +619,14 @@ let dimission = ref('')
 let imageShow = ref(false)
 let imageShow = ref(false)
 let imageUrl = ref('')
 let imageUrl = ref('')
 
 
+// 限制证件日期
+const disabledDateStart = (time: Date) => {
+  return time.getTime() > new Date()
+}
+const disabledDateEnd = (time: Date) => {
+  return time.getTime() < new Date(operationForm.value.identityTimeStart)
+}
+
 // 编辑时初始化数据
 // 编辑时初始化数据
 // 编辑的id
 // 编辑的id
 let editId = ref('')
 let editId = ref('')
@@ -636,14 +656,6 @@ const initEditData = (id) => {
           let applicantImg = formData.fileList.find(item => item.fileType == 'applicant')
           let applicantImg = formData.fileList.find(item => item.fileType == 'applicant')
           let salaryTable = formData.fileList.find(item => item.fileType == 'salary')
           let salaryTable = formData.fileList.find(item => item.fileType == 'salary')
           let leaveTable = formData.fileList.find(item => item.fileType == 'leave')
           let leaveTable = formData.fileList.find(item => item.fileType == 'leave')
-          console.log('图片', formData.fileList)
-          console.log('身份证1', sfz1)
-          console.log('身份证2', sfz1)
-          console.log('展业资格证', qualification)
-          console.log('劳务合同', contract)
-          console.log('应聘表', applicant)
-          console.log('定薪表', salaryTable)
-          console.log('离职表', leaveTable)
           if(sfz1) {
           if(sfz1) {
             operationForm.value.sfz1 = sfz1.id
             operationForm.value.sfz1 = sfz1.id
             IDCardFrontName.value = sfz1.fileName
             IDCardFrontName.value = sfz1.fileName
@@ -682,7 +694,7 @@ const initEditData = (id) => {
         }
         }
         operationForm.value.address = address
         operationForm.value.address = address
         getUser(operationForm.value.deptId)
         getUser(operationForm.value.deptId)
-        console.log(123123123, operationForm.value)
+        getRecommend(operationForm.value.deptId)
       } else {
       } else {
         ElMessage({
         ElMessage({
           message: res.msg,
           message: res.msg,
@@ -779,10 +791,92 @@ const imageView = (type) => {
       break;
       break;
   }
   }
 }
 }
+
+// 图片下载
+const download = (url, name) => {
+  let image = new Image();
+  // 解决跨域 Canvas 污染问题
+  image.setAttribute("crossOrigin", "anonymous");
+  image.onload = function () {
+    let canvas = document.createElement("canvas");
+    canvas.width = image.width;
+    canvas.height = image.height;
+    let context = canvas.getContext("2d");
+    context.drawImage(image, 0, 0, image.width, image.height);
+    let url = canvas.toDataURL("image/png"); //得到图片的base64编码数据
+    let a = document.createElement("a"); // 生成一个a元素
+    let event = new MouseEvent("click"); // 创建一个单击事件
+    a.download = name; // 设置图片名称
+    a.href = url; // 将生成的URL设置为a.href属性
+    a.dispatchEvent(event); // 触发a的单击事件
+  }
+  image.src = url
+}
+const downloadImage = (type) => {
+  switch (type) {
+    case 1:
+      download(IDCardFront.value,IDCardFrontName.value)
+      break;
+    case 2:
+      download(IDCardBack.value,IDCardBackName.value)
+      break;
+    case 3:
+      download(certification.value,certificationName.value)
+      break;
+    case 4:
+      download(contract.value,contractName.value)
+      break;
+    case 5:
+      download(applicant.value,applicantName.value)
+      break;
+    case 6:
+      download(decidePay.value,decidePayName.value)
+      break;
+    case 7:
+      download(dimission.value,dimissionName.value)
+      break;
+  }
+}
+// 图片删除
+const deleteImage = (type) => {
+  switch (type) {
+    case 1:
+      IDCardFront.value = ''
+      IDCardFrontName.value = ''
+      break;
+    case 2:
+      IDCardBack.value = ''
+      IDCardBackName.value = ''
+      break;
+    case 3:
+      certification.value = ''
+      certificationName.value = ''
+      break;
+    case 4:
+      contract.value = ''
+      contractName.value = ''
+      break;
+    case 5:
+      applicant.value = ''
+      applicantName.value = ''
+      break;
+    case 6:
+      decidePay.value = ''
+      decidePayName.value = ''
+      break;
+    case 7:
+      dimission.value = ''
+      dimissionName.value = ''
+      break;
+  }
+}
 // 管理人/推荐人
 // 管理人/推荐人
 let userList = ref([])
 let userList = ref([])
+let recommendList = ref([])
 const getUser = (id) => {
 const getUser = (id) => {
-  api.operationApi.getUser(id).then(res => {
+  api.operationApi.getUser({
+    id: id
+  }).then(res => {
     if(res?.code == 200) {
     if(res?.code == 200) {
       userList.value = res.data
       userList.value = res.data
     } else {
     } else {
@@ -793,6 +887,21 @@ const getUser = (id) => {
     }
     }
   })
   })
 }
 }
+const getRecommend = (id) => {
+  api.operationApi.getUser({
+    id: id,
+    typeAttr: 2
+  }).then(res => {
+    if(res?.code == 200) {
+      recommendList.value = res.data
+    } else {
+      ElMessage({
+        message: res.msg,
+        type: 'warning'
+      })
+    }
+  })
+}
 // 确定
 // 确定
 const onSubmit = async (OperationFormRef: FormInstance, type: number) => {
 const onSubmit = async (OperationFormRef: FormInstance, type: number) => {
   if(!OperationFormRef) {
   if(!OperationFormRef) {
@@ -949,15 +1058,27 @@ const getArea = () => {
 
 
 // 团队数据
 // 团队数据
 let teamList = ref([])
 let teamList = ref([])
-const getTeamList = async () => {
-  const { code, data, msg } = await api.teamApi.teamList({})
-  if(code == 200) {
-    teamList.value = data
-  } else {
-    ElMessage({
-      message: msg,
-      type: 'warning'
+const typeAttrChange = async (e) => {
+  operationForm.value.organization = ''
+  operationForm.value.leaderId = ''
+  operationForm.value.leaderNumber = ''
+  operationForm.value.referrerId = ''
+  operationForm.value.referrerNumber = ''
+  if(e != '6') {
+    const { code, data, msg } = await api.teamApi.teamList({
+      attribute: e,
+      param: ''
     })
     })
+    if(code == 200) {
+      teamList.value = data
+    } else {
+      ElMessage({
+        message: msg,
+        type: 'warning'
+      })
+    }
+  } else {
+    institutionList();
   }
   }
 }
 }
 const deptChange = (e) => {
 const deptChange = (e) => {
@@ -965,6 +1086,7 @@ const deptChange = (e) => {
   operationForm.value.organization = obj.deptName
   operationForm.value.organization = obj.deptName
   operationForm.value.deptId = obj.deptId
   operationForm.value.deptId = obj.deptId
   getUser(obj.deptId)
   getUser(obj.deptId)
+  getRecommend(obj.deptId)
 }
 }
 
 
 // 初始化银行数据
 // 初始化银行数据
@@ -982,10 +1104,30 @@ const initBankCard = () => {
   })
   })
 }
 }
 
 
+let deptOption = ref([])
+const optionProps = {
+  value: 'id',
+  label: 'name',
+  children: 'children',
+  checkStrictly: true,
+}
+// 获取机构数据
+const institutionList = () => {
+  api.institutionApi.institutionList({ name: '', system: '' }).then(res => {
+    if(res?.code == 200) {
+      deptOption.value = res.data
+    } else {
+      ElMessage({
+        message: res.msg,
+        type: 'warning'
+      })
+    }
+  })
+}
+
 onMounted(() => {
 onMounted(() => {
   initInfo()
   initInfo()
   getArea()
   getArea()
-  getTeamList()
   initBankCard()
   initBankCard()
 })
 })
 
 
@@ -1043,4 +1185,16 @@ defineExpose({
     border-radius: 5px;
     border-radius: 5px;
   }
   }
 }
 }
+:deep(.el-input__inner[type=number]::-webkit-outer-spin-button) {
+  -webkit-appearance: none;
+  margin: 0;
+}
+:deep(.el-input__inner[type=number]::-webkit-inner-spin-button) {
+  -webkit-appearance: none;
+  margin: 0;
+}
+:deep(.el-input__inner[type=number]) {
+  -moz-appearance: textfield;
+}
+
 </style>
 </style>

+ 7 - 4
src/views/operationManagement/modules/addTeam.vue

@@ -75,7 +75,6 @@ let isEdit = ref(false)
 const initEdit = (data, bool) => {
 const initEdit = (data, bool) => {
   isEdit.value = bool
   isEdit.value = bool
   teamForm.value = data
   teamForm.value = data
-  console.log(1111111, teamForm.value.deptId)
   institutionList()
   institutionList()
   getUser(data.deptId)
   getUser(data.deptId)
 }
 }
@@ -85,7 +84,8 @@ let option = ref([])
 const cascaderProps = {
 const cascaderProps = {
   value: 'id',
   value: 'id',
   label: 'name',
   label: 'name',
-  children: 'children'
+  children: 'children',
+  checkStrictly: true,
 }
 }
 // 获取机构数据
 // 获取机构数据
 const institutionList = () => {
 const institutionList = () => {
@@ -108,7 +108,9 @@ const deptIdChange = (e) => {
 // 管理人
 // 管理人
 let userList = ref([])
 let userList = ref([])
 const getUser = (id) => {
 const getUser = (id) => {
-  api.operationApi.getUser(id).then(res => {
+  api.operationApi.getUser({
+    id: id
+  }).then(res => {
     if(res?.code == 200) {
     if(res?.code == 200) {
       userList.value = res.data
       userList.value = res.data
     } else {
     } else {
@@ -191,7 +193,8 @@ onMounted(() => {
 })
 })
 
 
 defineExpose({
 defineExpose({
-  initEdit
+  initEdit,
+  teamForm
 })
 })
 
 
 </script>
 </script>

+ 0 - 1
src/views/operationManagement/modules/allocation.vue

@@ -116,7 +116,6 @@ const institutionList = () => {
   })
   })
 }
 }
 const handleNodeClick = (data) => {
 const handleNodeClick = (data) => {
-  console.log(data)
   initUser(data.id)
   initUser(data.id)
 }
 }
 const filterNode = (value: string, data: any) => {
 const filterNode = (value: string, data: any) => {

+ 14 - 6
src/views/operationManagement/operation.vue

@@ -20,10 +20,18 @@
         <el-col :span="8">
         <el-col :span="8">
           <el-form-item label="类型" class="formItem">
           <el-form-item label="类型" class="formItem">
             <el-select clearable v-model="form.typeAttr">
             <el-select clearable v-model="form.typeAttr">
-              <el-option key="1" value="0" label="个代"></el-option>
-              <el-option key="2" value="1" label="渠道"></el-option>
-              <el-option key="3" value="2" label="团队"></el-option>
-              <el-option key="4" value="3" label="电销组"></el-option>
+              <el-option key="1" value="6" label="个代"></el-option>
+              <el-option key="2" value="8" label="渠道"></el-option>
+              <el-option key="3" value="5" label="团队"></el-option>
+              <el-option key="4" value="7" label="电销组"></el-option>
+<!--              <el-option key="1" value="1" label="前线人员"></el-option>
+              <el-option key="2" value="2" label="后线人员"></el-option>
+              <el-option key="3" value="3" label="合伙人"></el-option>
+              <el-option key="4" value="4" label="工作室管理员"></el-option>
+              <el-option key="5" value="5" label="团队"></el-option>
+              <el-option key="6" value="6" label="个代"></el-option>
+              <el-option key="7" value="7" label="电销"></el-option>
+              <el-option key="8" value="8" label="渠道"></el-option>-->
             </el-select>
             </el-select>
           </el-form-item>
           </el-form-item>
         </el-col>
         </el-col>
@@ -102,7 +110,7 @@
       <el-table-column label="工号" prop="userId" width="200"></el-table-column>
       <el-table-column label="工号" prop="userId" width="200"></el-table-column>
       <el-table-column label="类型" prop="typeAttr" width="100">
       <el-table-column label="类型" prop="typeAttr" width="100">
         <template #default="scope">
         <template #default="scope">
-          {{ scope.row.typeAttr == '0'?'个代':scope.row.typeAttr == '1'?'渠道':scope.row.typeAttr == '2'?'团队':scope.row.typeAttr == '3'?'电销组': '' }}
+          {{ scope.row.typeAttr == '6'?'个代':scope.row.typeAttr == '8'?'渠道':scope.row.typeAttr == '5'?'团队':scope.row.typeAttr == '7'?'电销组': '' }}
         </template>
         </template>
       </el-table-column>
       </el-table-column>
       <el-table-column label="归属" prop="organizationName" width="200"></el-table-column>
       <el-table-column label="归属" prop="organizationName" width="200"></el-table-column>
@@ -219,7 +227,7 @@ const organizationChange = (e) => {
 let form = ref<OperationSearch>({
 let form = ref<OperationSearch>({
   salesman: '',
   salesman: '',
   deptId: '',
   deptId: '',
-  typeAttr: '1',
+  typeAttr: '',
   deptName: '',
   deptName: '',
   status: '',
   status: '',
   isEnable: '',
   isEnable: '',

+ 7 - 1
src/views/operationManagement/team.vue

@@ -17,7 +17,7 @@
             </el-dropdown>
             </el-dropdown>
           </div>
           </div>
         </div>
         </div>
-        <el-button class="add-btn" icon="plus" @click="addTeamShow = true">添加团队</el-button>
+        <el-button class="add-btn" icon="plus" @click="addTeamDraw">添加团队</el-button>
       </el-col>
       </el-col>
       <el-col :span="20">
       <el-col :span="20">
         <el-row :gutter="20">
         <el-row :gutter="20">
@@ -275,6 +275,12 @@ const treeNodeCommend = (item, e) => {
       break;
       break;
   }
   }
 }
 }
+const addTeamDraw = () => {
+  addTeamShow.value = true
+  nextTick(() => {
+    AddTeamRef.value.teamForm.attribute = 1
+  })
+}
 const closeAddTeamDialog = (type) => {
 const closeAddTeamDialog = (type) => {
   addTeamShow.value = false
   addTeamShow.value = false
   initTeam()
   initTeam()

+ 7 - 1
src/views/operationManagement/telemarketing.vue

@@ -17,7 +17,7 @@
             </el-dropdown>
             </el-dropdown>
           </div>
           </div>
         </div>
         </div>
-        <el-button class="add-btn" icon="plus" @click="addTeamShow = true">添加团队</el-button>
+        <el-button class="add-btn" icon="plus" @click="addTeamDraw">添加团队</el-button>
       </el-col>
       </el-col>
       <el-col :span="20">
       <el-col :span="20">
         <el-row :gutter="20">
         <el-row :gutter="20">
@@ -275,6 +275,12 @@ const treeNodeCommend = (item, e) => {
       break;
       break;
   }
   }
 }
 }
+const addTeamDraw = () => {
+  addTeamShow.value = true
+  nextTick(() => {
+    AddTeamRef.value.teamForm.attribute = 3
+  })
+}
 const closeAddTeamDialog = (type) => {
 const closeAddTeamDialog = (type) => {
   addTeamShow.value = false
   addTeamShow.value = false
   initTeam()
   initTeam()