dev_review
yujialong 6 months ago
parent 56565ded13
commit 0ba3475f1f
  1. 10
      .prettierrc
  2. 995
      src/utils/api.js
  3. 702
      src/views/customer/AddCustomer.vue
  4. 151
      src/views/customer/customer.vue
  5. 240
      src/views/match/add/index.vue
  6. 525
      src/views/match/add/step1.vue
  7. 282
      src/views/match/add/step2.vue
  8. 251
      src/views/match/add/step3.vue
  9. 309
      src/views/match/manage/abnormalTeam.vue
  10. 22
      src/views/match/manage/index.vue
  11. 350
      src/views/match/manage/matchInfo.vue
  12. 269
      src/views/user/User.vue

@ -1,6 +1,6 @@
{ {
"tabWidth": 4, "tabWidth": 2,
"singleQuote": true, "singleQuote": true,
"trailingComma": "none", "trailingComma": "none",
"printWidth": 140 "printWidth": 140
} }

@ -4,500 +4,503 @@ const { uploadURL, apiBaseURL: host } = Setting
const jumpApi = Setting.isDev ? `http://121.37.12.51/` : Setting.isPro ? `https://judgment.huorantech.cn/` : `http://121.37.12.51/` const jumpApi = Setting.isDev ? `http://121.37.12.51/` : Setting.isPro ? `https://judgment.huorantech.cn/` : `http://121.37.12.51/`
export default { export default {
logins: `users/users/user/login`, //登录 logins: `users/users/user/login`, //登录
verification: `${host}users/users/user/captcha`,// 验证码图片 保留host verification: `${host}users/users/user/captcha`,// 验证码图片 保留host
bindPhoneOrEmail: `users/users/userAccount/bindPhoneOrEmail`,// 绑定手机 bindPhoneOrEmail: `users/users/userAccount/bindPhoneOrEmail`,// 绑定手机
sendPhoneOrEmailCode: `users/users/userAccount/sendPhoneOrEmailCode`,// 手机验证码 sendPhoneOrEmailCode: `users/users/userAccount/sendPhoneOrEmailCode`,// 手机验证码
getUserRolesPermissionMenu: `users/users/user-role/getUserRolesPermissionMenu`, getUserRolesPermissionMenu: `users/users/user-role/getUserRolesPermissionMenu`,
deleteProfile : `users/users/userInfo/deleteProfile`, deleteProfile: `users/users/userInfo/deleteProfile`,
refreshPageNotification : `nakadai/message/refreshPageNotification`, refreshPageNotification: `nakadai/message/refreshPageNotification`,
heartbeatDetection : `nakadai/message/heartbeatDetection`, heartbeatDetection: `nakadai/message/heartbeatDetection`,
// 阿里云文件/视频管理 // 阿里云文件/视频管理
getPlayAuth: `${uploadURL}oss/manage/getPlayAuth`, // 获取播放凭证 getPlayAuth: `${uploadURL}oss/manage/getPlayAuth`, // 获取播放凭证
staffTemplate: `https://occupationlab.com/template/%E6%89%B9%E9%87%8F%E5%AF%BC%E5%85%A5%E5%91%98%E5%B7%A5%E6%A8%A1%E6%9D%BF.xlsx`, // 后台账号模板 staffTemplate: `https://occupationlab.com/template/%E6%89%B9%E9%87%8F%E5%AF%BC%E5%85%A5%E5%91%98%E5%B7%A5%E6%A8%A1%E6%9D%BF.xlsx`, // 后台账号模板
competionPersonTemplate: `https://huoran.oss-cn-shenzhen.aliyuncs.com/%E4%B8%AD%E5%8F%B0%E4%B8%AA%E4%BA%BA%E8%B5%9B%E6%8A%A5%E5%90%8D%E4%BA%BA%E5%91%98%E5%AF%BC%E5%85%A5%E6%A8%A1%E6%9D%BF.xlsx`, // 中台个人报名人员模板 competionPersonTemplate: `https://huoran.oss-cn-shenzhen.aliyuncs.com/%E4%B8%AD%E5%8F%B0%E4%B8%AA%E4%BA%BA%E8%B5%9B%E6%8A%A5%E5%90%8D%E4%BA%BA%E5%91%98%E5%AF%BC%E5%85%A5%E6%A8%A1%E6%9D%BF.xlsx`, // 中台个人报名人员模板
competionTeamTemplate: `https://huoran.oss-cn-shenzhen.aliyuncs.com/%E4%B8%AD%E5%8F%B0%E5%9B%A2%E9%98%9F%E8%B5%9B%E6%8A%A5%E5%90%8D%E4%BA%BA%E5%91%98%E5%AF%BC%E5%85%A5%E6%A8%A1%E6%9D%BF.xlsx`, // 中台团队报名人员模板 competionTeamTemplate: `https://huoran.oss-cn-shenzhen.aliyuncs.com/%E4%B8%AD%E5%8F%B0%E5%9B%A2%E9%98%9F%E8%B5%9B%E6%8A%A5%E5%90%8D%E4%BA%BA%E5%91%98%E5%AF%BC%E5%85%A5%E6%A8%A1%E6%9D%BF.xlsx`, // 中台团队报名人员模板
checkEmailOrPhone: `occupationlab/occupationlab/architecture/checkEmailOrPhone`, // 新增学生前:校验手机号或者邮箱 checkEmailOrPhone: `occupationlab/occupationlab/architecture/checkEmailOrPhone`, // 新增学生前:校验手机号或者邮箱
checkWorkNumOrAccount: `occupationlab/occupationlab/architecture/checkWorkNumOrAccount`, // 新增/编辑学生前:校验学号或者学生账号 checkWorkNumOrAccount: `occupationlab/occupationlab/architecture/checkWorkNumOrAccount`, // 新增/编辑学生前:校验学号或者学生账号
// 订单管理 // 订单管理
orderAdd: `nakadai/nakadai/order/add`,// 订单添加 orderAdd: `nakadai/nakadai/order/add`,// 订单添加
orderDelete: `nakadai/nakadai/order/delete`,// 删除定单 orderDelete: `nakadai/nakadai/order/delete`,// 删除定单
orderDetail: `nakadai/nakadai/order/get`,// 订单详情 orderDetail: `nakadai/nakadai/order/get`,// 订单详情
orderList: `nakadai/nakadai/order/list`,// 订单列表 orderList: `nakadai/nakadai/order/list`,// 订单列表
orderUpdate: `nakadai/nakadai/order/update`,// 订单更新 orderUpdate: `nakadai/nakadai/order/update`,// 订单更新
renew: `nakadai/nakadai/orderOther/renew`,// 续费信息管理-post renew: `nakadai/nakadai/orderOther/renew`,// 续费信息管理-post
ship: `nakadai/nakadai/orderOther/ship`,// 处理时的订单发货管理-post ship: `nakadai/nakadai/orderOther/ship`,// 处理时的订单发货管理-post
bulkShipping: `nakadai/nakadai/orderOther/bulkShipping`, bulkShipping: `nakadai/nakadai/orderOther/bulkShipping`,
getOrderOtherTime: `nakadai/nakadai/orderOther/getOrderOtherTime`, getOrderOtherTime: `nakadai/nakadai/orderOther/getOrderOtherTime`,
refreshCache: `data/data/myDate/refreshCache`, refreshCache: `data/data/myDate/refreshCache`,
getPartnerTeamRates: `nakadai/nakadai/partner-team/getPartnerTeamRates`, getPartnerTeamRates: `nakadai/nakadai/partner-team/getPartnerTeamRates`,
// 客户管理 // 客户管理
delCustomers: `nakadai/nakadai/customer/delCustomers`, delCustomers: `nakadai/nakadai/customer/delCustomers`,
updateCustomer: `nakadai/nakadai/customer/updateCustomer`, updateCustomer: `nakadai/nakadai/customer/updateCustomer`,
addCustomer: `nakadai/nakadai/customer/addCustomer`, addCustomer: `nakadai/nakadai/customer/addCustomer`,
queryCustomer: `nakadai/nakadai/customer/queryCustomer`, queryCustomer: `nakadai/nakadai/customer/queryCustomer`,
queryCustomerDetails: `nakadai/nakadai/customer/queryCustomerDetails`, queryCustomerDetails: `nakadai/nakadai/customer/queryCustomerDetails`,
saveOrUpdate: `data/data/role/saveOrUpdate`, saveOrUpdate: `data/data/role/saveOrUpdate`,
doAssign: `data/data/permission/doAssign`, doAssign: `data/data/permission/doAssign`,
updateCustomerByRoleId: `nakadai/nakadai/customer/updateCustomerByRoleId`, updateCustomerByRoleId: `nakadai/nakadai/customer/updateCustomerByRoleId`,
checkEmailOrPhone: `nakadai/nakadai/customer/checkEmailOrPhone`, // 新增客户前:校验手机号或者邮箱 checkEmailOrPhone: `nakadai/nakadai/customer/checkEmailOrPhone`, // 新增客户前:校验手机号或者邮箱
getProductsSubscribedByCustomers: `nakadai/nakadai/customer/getProductsSubscribedByCustomers`, getProductsSubscribedByCustomers: `nakadai/nakadai/customer/getProductsSubscribedByCustomers`,
orderBulkDisableEnable: `nakadai/nakadai/orderOther/orderBulkDisableEnable`, orderBulkDisableEnable: `nakadai/nakadai/orderOther/orderBulkDisableEnable`,
exportSubscribedRecords: `nakadai/nakadai/order/exportSubscribedRecords`, exportSubscribedRecords: `nakadai/nakadai/order/exportSubscribedRecords`,
addNewCustomersByOneself: `nakadai/nakadai/school/addNewCustomersByOneself`, addNewCustomersByOneself: `nakadai/nakadai/school/addNewCustomersByOneself`,
exportClient: `${host}nakadai/nakadai/customer/exportClient`, exportClient: `${host}nakadai/nakadai/customer/exportClient`,
customerSettingsList: `nakadai/nakadai/customer/customerSettingsList`, customerSettingsList: `nakadai/nakadai/customer/customerSettingsList`,
clientSettingsEditClient: `nakadai/nakadai/customer/clientSettingsEditClient`, clientSettingsEditClient: `nakadai/nakadai/customer/clientSettingsEditClient`,
delClientsOrSchools: `nakadai/nakadai/school/delClientsOrSchools`, delClientsOrSchools: `nakadai/nakadai/school/delClientsOrSchools`,
editClientsOrSchools: `nakadai/nakadai/school/editClientsOrSchools`, editClientsOrSchools: `nakadai/nakadai/school/editClientsOrSchools`,
userManagementList: `users/users/userAccount/userManagementList`,
resetPwdCustomer: `nakadai/nakadai/customer/resetPwd`,
queryCustomerIsExists: `nakadai/nakadai/customer/queryCustomerIsExists`, resetPwdCustomer: `nakadai/nakadai/customer/resetPwd`,
updateEnabled: `nakadai/nakadai/customer/updateEnabled`, queryCustomerIsExists: `nakadai/nakadai/customer/queryCustomerIsExists`,
queryCustomerIndustryClass: `nakadai/nakadai/hrIndustryClass/queryIndustryClass`, updateEnabled: `nakadai/nakadai/customer/updateEnabled`,
queryCustomerIndustry: `nakadai/nakadai/hrIndustry/queryIndustry`, queryCustomerIndustryClass: `nakadai/nakadai/hrIndustryClass/queryIndustryClass`,
querySchoolData: `nakadai/nakadai/school/querySchool`, queryCustomerIndustry: `nakadai/nakadai/hrIndustry/queryIndustry`,
getAListOfClientBusinessManagers: `nakadai/nakadai/customer/getAListOfClientBusinessManagers`, querySchoolData: `nakadai/nakadai/school/querySchool`,
getBusinessManagerOrder: `nakadai/nakadai/customer/getBusinessManagerOrder`, getAListOfClientBusinessManagers: `nakadai/nakadai/customer/getAListOfClientBusinessManagers`,
getBusinessManagerOrder: `nakadai/nakadai/customer/getBusinessManagerOrder`,
// 用户管理
delUserAccounts: `users/users/userAccount/delUserAccounts`, // 用户管理
queryUserInfoDetails: `users/users/userAccount/queryUserInfoDetails`, delUserAccountsByNakadai: `users/users/userAccount/delUserAccountsByNakadai`,
personalFile: `users/users/userAccount/personalFile`, queryUserInfoDetails: `users/users/userAccount/queryUserInfoDetails`,
personalFile: `users/users/userAccount/personalFile`,
queryUserInfoList: `users/users/userAccount/queryUserInfoList`,
resetPwd: `users/users/userAccount/resetPwd`, queryUserInfoList: `users/users/userAccount/queryUserInfoList`,
selectAccountDetail: `users/users/userAccount/selectAccountDetail`, resetPwd: `users/users/userAccount/resetPwd`,
selectUserSysBind: `users/users/userAccount/selectUserSysBind`, selectAccountDetail: `users/users/userAccount/selectAccountDetail`,
updatePersonCenter: `users/users/userAccount/updatePersonCenter`, selectUserSysBind: `users/users/userAccount/selectUserSysBind`,
updateUserAvatars: `${host}users/users/userAccount/updateUserAvatars`, updatePersonCenter: `users/users/userAccount/updatePersonCenter`,
userInfo: `users/users/userAccount/userInfo`, updateUserAvatars: `${host}users/users/userAccount/updateUserAvatars`,
unbindMobilePhone: `users/users/userAccount/unbindMobilePhone`, userInfo: `users/users/userAccount/userInfo`,
updateAccountEnable: `users/users/userAccount/updateAccountEnable`, unbindMobilePhone: `users/users/userAccount/unbindMobilePhone`,
updateAccountAllEnable: `users/users/userAccount/updateAccountAllEnable`, updateAccountEnable: `users/users/userAccount/updateAccountEnable`,
examinePassword: `users/users/userAccount/examinePassword`, updateAccountAllEnable: `users/users/userAccount/updateAccountAllEnable`,
viewUserDetailsforNakadai: `users/users/userAccount/viewUserDetailsforNakadai`, examinePassword: `users/users/userAccount/examinePassword`,
oneClickEnableVerification: `users/users/userAccount/oneClickEnableVerification`, viewUserDetailsforNakadai: `users/users/userAccount/viewUserDetailsforNakadai`,
getValueModule: `nakadai/nakadai/valueModuleManagement/getValueModule`, oneClickEnableVerification: `users/users/userAccount/oneClickEnableVerification`,
getValueModule: `nakadai/nakadai/valueModuleManagement/getValueModule`,
queryServiceConfig: `nakadai/nakadai/serviceConfiguration/getAllService`, //查询服务配置
// 项目管理 queryServiceConfig: `nakadai/nakadai/serviceConfiguration/getAllService`, //查询服务配置
avgValues: `occupationlab/occupationlab/projectManage/avgValues`, // 平均分分配值 // 项目管理
deleteProjectManage: `occupationlab/occupationlab/projectManage/deleteProjectManage`, // 新增项目管理 avgValues: `occupationlab/occupationlab/projectManage/avgValues`, // 平均分分配值
getProjectBySystemId: `occupationlab/occupationlab/projectManage/getProjectBySystemId`, // 根据系统id获取全部项目 deleteProjectManage: `occupationlab/occupationlab/projectManage/deleteProjectManage`, // 新增项目管理
queryNameIsExist: `occupationlab/occupationlab/projectManage/queryNameIsExist`, // 新增/编辑项目管理名称判重 getProjectBySystemId: `occupationlab/occupationlab/projectManage/getProjectBySystemId`, // 根据系统id获取全部项目
queryProjectManage: `occupationlab/occupationlab/projectManage/queryProjectManage`, // 项目管理列表(分页、筛选) queryNameIsExist: `occupationlab/occupationlab/projectManage/queryNameIsExist`, // 新增/编辑项目管理名称判重
updateIsOpen: `occupationlab/occupationlab/projectManage/updateIsOpen`, // 更新开启状态 queryProjectManage: `occupationlab/occupationlab/projectManage/queryProjectManage`, // 项目管理列表(分页、筛选)
getProjectDetail: `occupationlab/occupationlab/projectManage/getProjectDetail`, // 根据项目id查询详情 updateIsOpen: `occupationlab/occupationlab/projectManage/updateIsOpen`, // 更新开启状态
saveProjectDraft: `occupationlab/occupationlab/projectManage/saveProjectDraft`, // 新增项目管理 getProjectDetail: `occupationlab/occupationlab/projectManage/getProjectDetail`, // 根据项目id查询详情
addProjectManage: `occupationlab/occupationlab/projectManage/addProjectManage`, // 新增项目管理 saveProjectDraft: `occupationlab/occupationlab/projectManage/saveProjectDraft`, // 新增项目管理
updateProjectManage: `occupationlab/occupationlab/projectManage/updateProjectManage`, // 修改项目管理 addProjectManage: `occupationlab/occupationlab/projectManage/addProjectManage`, // 新增项目管理
editProjectDraft: `occupationlab/occupationlab/projectManage/editProjectDraft`, // 修改项目管理 updateProjectManage: `occupationlab/occupationlab/projectManage/updateProjectManage`, // 修改项目管理
copyProjectManage: `occupationlab/occupationlab/projectManage/copyProjectManage`, // 复制项目管理 editProjectDraft: `occupationlab/occupationlab/projectManage/editProjectDraft`, // 修改项目管理
// 判分点 copyProjectManage: `occupationlab/occupationlab/projectManage/copyProjectManage`, // 复制项目管理
getBcJudgmentPoint: `${jumpApi}judgment/judgment/bcJudgmentPoint/getBcJudgmentPoint`, // 获取编程类判分点列表(分页) // 判分点
getLcJudgmentPoint: `${jumpApi}judgment/judgment/lcJudgmentPoint/queryAllJudgmentPoint`, // 获取流程类判分点列表(分页) getBcJudgmentPoint: `${jumpApi}judgment/judgment/bcJudgmentPoint/getBcJudgmentPoint`, // 获取编程类判分点列表(分页)
addProjectJudgment: `occupationlab/occupationlab/projectJudgment/addProjectJudgment`, // 添加项目管理、判分点中间表 getLcJudgmentPoint: `${jumpApi}judgment/judgment/lcJudgmentPoint/queryAllJudgmentPoint`, // 获取流程类判分点列表(分页)
updateProjectJudgment: `occupationlab/occupationlab/projectJudgment/updateProjectJudgment`, // 判分点中间表批量更新 addProjectJudgment: `occupationlab/occupationlab/projectJudgment/addProjectJudgment`, // 添加项目管理、判分点中间表
deleteProjectJudgment: `occupationlab/occupationlab/projectJudgment/deleteProjectJudgment`, // 判分点中间表批量删除 updateProjectJudgment: `occupationlab/occupationlab/projectJudgment/updateProjectJudgment`, // 判分点中间表批量更新
// 系统后台 deleteProjectJudgment: `occupationlab/occupationlab/projectJudgment/deleteProjectJudgment`, // 判分点中间表批量删除
deleteModelClass: `nakadai/nakadai/model/reference/deleteModelClass`, // 系统后台
modelClassList: `nakadai/nakadai/model/reference/modelClassList`, deleteModelClass: `nakadai/nakadai/model/reference/deleteModelClass`,
saveReferenceCategory: `nakadai/nakadai/model/reference/saveReferenceCategory`, modelClassList: `nakadai/nakadai/model/reference/modelClassList`,
updateModelClass: `nakadai/nakadai/model/reference/updateModelClass`, saveReferenceCategory: `nakadai/nakadai/model/reference/saveReferenceCategory`,
checkIsShowBySystemId: `nakadai/nakadai/model/reference/checkIsShowBySystemId`, updateModelClass: `nakadai/nakadai/model/reference/updateModelClass`,
modifyIsShowState: `nakadai/nakadai/model/reference/modifyIsShowState`, checkIsShowBySystemId: `nakadai/nakadai/model/reference/checkIsShowBySystemId`,
editProvinceCity: `nakadai/nakadai/partner-team/editProvinceCity`, modifyIsShowState: `nakadai/nakadai/model/reference/modifyIsShowState`,
editPartnerTeamRates: `nakadai/nakadai/partner-team/editPartnerTeamRates`, editProvinceCity: `nakadai/nakadai/partner-team/editProvinceCity`,
teamPartnerList: `nakadai/nakadai/partnerAccount/teamPartnerList`, editPartnerTeamRates: `nakadai/nakadai/partner-team/editPartnerTeamRates`,
teamPartnerList: `nakadai/nakadai/partnerAccount/teamPartnerList`,
delModelInfoBySystemId: `nakadai/nakadai/model/reference/demo/delModelInfoBySystemId`,
deleteReferenceDemo: `nakadai/nakadai/model/reference/demo/deleteReferenceDemo`, delModelInfoBySystemId: `nakadai/nakadai/model/reference/demo/delModelInfoBySystemId`,
referenceFindById: `nakadai/nakadai/model/reference/demo/findById`, deleteReferenceDemo: `nakadai/nakadai/model/reference/demo/deleteReferenceDemo`,
saveReferenceDemo: `nakadai/nakadai/model/reference/demo/saveReferenceDemo`, referenceFindById: `nakadai/nakadai/model/reference/demo/findById`,
referenceDemoList: `nakadai/nakadai/model/reference/demo/referenceDemoList`, saveReferenceDemo: `nakadai/nakadai/model/reference/demo/saveReferenceDemo`,
getAllModelList: `nakadai/nakadai/model/reference/demo/getAllModelList`, referenceDemoList: `nakadai/nakadai/model/reference/demo/referenceDemoList`,
synchronizationMdel: `nakadai/nakadai/model/reference/demo/synchronizationMdel`, getAllModelList: `nakadai/nakadai/model/reference/demo/getAllModelList`,
synchronizationMdel: `nakadai/nakadai/model/reference/demo/synchronizationMdel`,
deleteSourceModelCategory: `nakadai/nakadai/model/category/deleteSourceModelCategory`,
categorySave: `nakadai/nakadai/model/category/save`, deleteSourceModelCategory: `nakadai/nakadai/model/category/deleteSourceModelCategory`,
sourceModelClassification: `nakadai/nakadai/model/category/sourceModelClassification`, categorySave: `nakadai/nakadai/model/category/save`,
updateSourceModelCategory: `nakadai/nakadai/model/category/updateSourceModelCategory`, sourceModelClassification: `nakadai/nakadai/model/category/sourceModelClassification`,
updateSourceModelCategory: `nakadai/nakadai/model/category/updateSourceModelCategory`,
bulkDisable: `nakadai/nakadai/model/demo/bulkDisable`,
deleteSysModelDemo: `nakadai/nakadai/model/demo/deleteSysModelDemo`, bulkDisable: `nakadai/nakadai/model/demo/bulkDisable`,
modelFindById: `nakadai/nakadai/model/demo/findById`, deleteSysModelDemo: `nakadai/nakadai/model/demo/deleteSysModelDemo`,
saveSysModelDemo: `nakadai/nakadai/model/demo/saveSysModelDemo`, modelFindById: `nakadai/nakadai/model/demo/findById`,
sysModelDemoList: `nakadai/nakadai/model/demo/sysModelDemoList`, saveSysModelDemo: `nakadai/nakadai/model/demo/saveSysModelDemo`,
updateSysModelDemo: `nakadai/nakadai/model/demo/updateSysModelDemo`, sysModelDemoList: `nakadai/nakadai/model/demo/sysModelDemoList`,
runPythonCode: `nakadai/nakadai/model/demo/runPythonCode`, updateSysModelDemo: `nakadai/nakadai/model/demo/updateSysModelDemo`,
getAllModelListBySys: `nakadai/nakadai/model/demo/getAllModelListBySys`, runPythonCode: `nakadai/nakadai/model/demo/runPythonCode`,
InstitutionSourceModel: `nakadai/nakadai/model/demo/InstitutionSourceModel`, getAllModelListBySys: `nakadai/nakadai/model/demo/getAllModelListBySys`,
disableModelDemo: `nakadai/nakadai/model/demo/disabledEvents`, InstitutionSourceModel: `nakadai/nakadai/model/demo/InstitutionSourceModel`,
copyTheModelToTheNakadai: `nakadai/nakadai/model/demo/copyTheModelToTheNakadai`, disableModelDemo: `nakadai/nakadai/model/demo/disabledEvents`,
builtInModelButtonDisplayByNakadai: `nakadai/nakadai/model/demo/builtInModelButtonDisplayByNakadai`, copyTheModelToTheNakadai: `nakadai/nakadai/model/demo/copyTheModelToTheNakadai`,
builtInModelState: `nakadai/nakadai/model/demo/builtInModelState`, builtInModelButtonDisplayByNakadai: `nakadai/nakadai/model/demo/builtInModelButtonDisplayByNakadai`,
modelRedis: `nakadai/nakadai/model/demo/getRedisCache`, builtInModelState: `nakadai/nakadai/model/demo/builtInModelState`,
modelRedis: `nakadai/nakadai/model/demo/getRedisCache`,
// 课程管理三级联查
courseDiscipline: `nakadai/nakadai/subject/courseDiscipline`, //课程学科类别 // 课程管理三级联查
courseProfessionalClass: `nakadai/nakadai/subject/courseProfessionalClass`, //课程专业类 courseDiscipline: `nakadai/nakadai/subject/courseDiscipline`, //课程学科类别
courseProfessional: `nakadai/nakadai/subject/courseProfessional`, //课程专业 courseProfessionalClass: `nakadai/nakadai/subject/courseProfessionalClass`, //课程专业类
//课程管理 courseProfessional: `nakadai/nakadai/subject/courseProfessional`, //课程专业
curriculumList: `nakadai/nakadai/curriculum/curriculumList`, //课程列表 //课程管理
createCurriculum: `nakadai/nakadai/curriculum/createCurriculum`, //创建课程 curriculumList: `nakadai/nakadai/curriculum/curriculumList`, //课程列表
curriculumDetail: `nakadai/nakadai/curriculum/curriculumDetail`, //课程详情 createCurriculum: `nakadai/nakadai/curriculum/createCurriculum`, //创建课程
modifyCourse: `nakadai/nakadai/curriculum/modifyCourse`, //编辑课程 curriculumDetail: `nakadai/nakadai/curriculum/curriculumDetail`, //课程详情
delCourse: `nakadai/nakadai/curriculum/delCourse`, //单个、批量删除课程 modifyCourse: `nakadai/nakadai/curriculum/modifyCourse`, //编辑课程
isShelves: `nakadai/nakadai/curriculum/isShelves`, //上下架课程 delCourse: `nakadai/nakadai/curriculum/delCourse`, //单个、批量删除课程
getInternalProjectBySystemId: `occupationlab/occupationlab/projectManage/getInternalProjectBySystemId`, //根据系统id、项目权限获取系统内置项目 isShelves: `nakadai/nakadai/curriculum/isShelves`, //上下架课程
checkConfig: `nakadai/nakadai/curriculum/checkConfig`, getInternalProjectBySystemId: `occupationlab/occupationlab/projectManage/getInternalProjectBySystemId`, //根据系统id、项目权限获取系统内置项目
deleteCoursePrompt: `nakadai/nakadai/curriculum/deleteCoursePrompt`, checkConfig: `nakadai/nakadai/curriculum/checkConfig`,
// 课程章节管理 deleteCoursePrompt: `nakadai/nakadai/curriculum/deleteCoursePrompt`,
addChapter: `nakadai/nakadai/curriculum/chapter/addChapter`, //添加章节 // 课程章节管理
editChapter: `nakadai/nakadai/curriculum/chapter/editChapter`, //修改章节 addChapter: `nakadai/nakadai/curriculum/chapter/addChapter`, //添加章节
deleteChapter: `nakadai/nakadai/curriculum/chapter/deleteChapter`, //根据id删除章节 editChapter: `nakadai/nakadai/curriculum/chapter/editChapter`, //修改章节
queryChaptersAndSubsections: `nakadai/nakadai/curriculum/chapter/queryChaptersAndSubsections`, //根据课程id查询章节小节,树状结构 deleteChapter: `nakadai/nakadai/curriculum/chapter/deleteChapter`, //根据id删除章节
reorder: `nakadai/nakadai/curriculum/chapter/reorder`, //编辑排序 queryChaptersAndSubsections: `nakadai/nakadai/curriculum/chapter/queryChaptersAndSubsections`, //根据课程id查询章节小节,树状结构
// 课程小节管理 reorder: `nakadai/nakadai/curriculum/chapter/reorder`, //编辑排序
addSubsection: `nakadai/nakadai/curriculum/subsection/addSubsection`, //添加小节 // 课程小节管理
deleteSubsection: `nakadai/nakadai/curriculum/subsection/deleteSubsection`, //根据id删除小节 addSubsection: `nakadai/nakadai/curriculum/subsection/addSubsection`, //添加小节
editSubsection: `nakadai/nakadai/curriculum/subsection/editSubsection`, //修改小节 deleteSubsection: `nakadai/nakadai/curriculum/subsection/deleteSubsection`, //根据id删除小节
getSubsection: `nakadai/nakadai/curriculum/subsection/getSubsection`, //根据小节id获取预览文件地址 editSubsection: `nakadai/nakadai/curriculum/subsection/editSubsection`, //修改小节
getSubsection: `nakadai/nakadai/curriculum/subsection/getSubsection`, //根据小节id获取预览文件地址
// 理论课程
delTheoreticalCourse: `occupationlab/occupationlab/theoreticalCourse/batchDeletion`, // 理论课程
findTheoreticalCourse: `occupationlab/occupationlab/theoreticalCourse/findById`, delTheoreticalCourse: `occupationlab/occupationlab/theoreticalCourse/batchDeletion`,
listTheoreticalCourse: `occupationlab/occupationlab/theoreticalCourse/pageConditionalQueryCourse`, findTheoreticalCourse: `occupationlab/occupationlab/theoreticalCourse/findById`,
saveTheoreticalCourse: `occupationlab/occupationlab/theoreticalCourse/save`, listTheoreticalCourse: `occupationlab/occupationlab/theoreticalCourse/pageConditionalQueryCourse`,
updateTheoreticalCourse: `occupationlab/occupationlab/theoreticalCourse/update`, saveTheoreticalCourse: `occupationlab/occupationlab/theoreticalCourse/save`,
disabledTheoreticalCourse: `occupationlab/occupationlab/theoreticalCourse/disabledEvents`, updateTheoreticalCourse: `occupationlab/occupationlab/theoreticalCourse/update`,
checkRepeatTheoreticalCourse: `occupationlab/occupationlab/theoreticalCourse/checkRepeat`, disabledTheoreticalCourse: `occupationlab/occupationlab/theoreticalCourse/disabledEvents`,
getRedisCache: `occupationlab/occupationlab/theoreticalCourse/getRedisCache`, checkRepeatTheoreticalCourse: `occupationlab/occupationlab/theoreticalCourse/checkRepeat`,
getSchoolsByProvince: `nakadai/nakadai/school/getSchoolsByProvince`, getRedisCache: `occupationlab/occupationlab/theoreticalCourse/getRedisCache`,
// 理论课程分类管理 getSchoolsByProvince: `nakadai/nakadai/school/getSchoolsByProvince`,
checkRepeatClassification: `occupationlab/occupationlab/theoreticalCourseClassification/checkRepeat`, // 理论课程分类管理
delClassification: `occupationlab/occupationlab/theoreticalCourseClassification/batchDeletion`, checkRepeatClassification: `occupationlab/occupationlab/theoreticalCourseClassification/checkRepeat`,
findClassification: `occupationlab/occupationlab/theoreticalCourseClassification/findById`, delClassification: `occupationlab/occupationlab/theoreticalCourseClassification/batchDeletion`,
listClassification: `occupationlab/occupationlab/theoreticalCourseClassification/pagingQuery`, findClassification: `occupationlab/occupationlab/theoreticalCourseClassification/findById`,
saveClassification: `occupationlab/occupationlab/theoreticalCourseClassification/save`, listClassification: `occupationlab/occupationlab/theoreticalCourseClassification/pagingQuery`,
updateClassification: `occupationlab/occupationlab/theoreticalCourseClassification/update`, saveClassification: `occupationlab/occupationlab/theoreticalCourseClassification/save`,
queryAllCategoriesOfSchools: `occupationlab/occupationlab/theoreticalCourseClassification/queryAllCategoriesOfSchools`, updateClassification: `occupationlab/occupationlab/theoreticalCourseClassification/update`,
// 课程章节管理 queryAllCategoriesOfSchools: `occupationlab/occupationlab/theoreticalCourseClassification/queryAllCategoriesOfSchools`,
addChapterTheoretical: `occupationlab/occupationlab/theoreticalCourseChapter/addChapter`, // 课程章节管理
chapterReorderTheoretical: `occupationlab/occupationlab/theoreticalCourseChapter/chapterReorder`, addChapterTheoretical: `occupationlab/occupationlab/theoreticalCourseChapter/addChapter`,
deleteChapterTheoretical: `occupationlab/occupationlab/theoreticalCourseChapter/deleteChapter`, chapterReorderTheoretical: `occupationlab/occupationlab/theoreticalCourseChapter/chapterReorder`,
editChapterTheoretical: `occupationlab/occupationlab/theoreticalCourseChapter/editChapter`, deleteChapterTheoretical: `occupationlab/occupationlab/theoreticalCourseChapter/deleteChapter`,
queryChaptersTheoretical: `occupationlab/occupationlab/theoreticalCourseChapter/queryChaptersAndSubsections`, editChapterTheoretical: `occupationlab/occupationlab/theoreticalCourseChapter/editChapter`,
reorderTheoretical: `occupationlab/occupationlab/theoreticalCourseChapter/reorder`, queryChaptersTheoretical: `occupationlab/occupationlab/theoreticalCourseChapter/queryChaptersAndSubsections`,
// 课程小节管理 reorderTheoretical: `occupationlab/occupationlab/theoreticalCourseChapter/reorder`,
addSubsectionTheoretical: `occupationlab/occupationlab/theoreticalCourseSubsection/addSubsection`, // 添加小节 // 课程小节管理
deleteSubsectionTheoretical: `occupationlab/occupationlab/theoreticalCourseSubsection/deleteSubsection`, // 根据id删除小节 addSubsectionTheoretical: `occupationlab/occupationlab/theoreticalCourseSubsection/addSubsection`, // 添加小节
editSubsectionTheoretical: `occupationlab/occupationlab/theoreticalCourseSubsection/editSubsection`, // 修改小节 deleteSubsectionTheoretical: `occupationlab/occupationlab/theoreticalCourseSubsection/deleteSubsection`, // 根据id删除小节
getSubsectionTheoretical: `occupationlab/occupationlab/theoreticalCourseSubsection/getSubsection`, // 根据小节id获取预览文件地址 editSubsectionTheoretical: `occupationlab/occupationlab/theoreticalCourseSubsection/editSubsection`, // 修改小节
getSubsectionTheoretical: `occupationlab/occupationlab/theoreticalCourseSubsection/getSubsection`, // 根据小节id获取预览文件地址
// 栏目管理
addColumn: `occupationlab/occupationlab/information/column/addColumn`, // 栏目管理
deleteColumn: `occupationlab/occupationlab/information/column/deleteColumn`, addColumn: `occupationlab/occupationlab/information/column/addColumn`,
editColumn: `occupationlab/occupationlab/information/column/editColumn`, deleteColumn: `occupationlab/occupationlab/information/column/deleteColumn`,
queryAllColumns: `occupationlab/occupationlab/information/column/queryAllColumns`, editColumn: `occupationlab/occupationlab/information/column/editColumn`,
columnReorder: `occupationlab/occupationlab/information/column/reorder`, queryAllColumns: `occupationlab/occupationlab/information/column/queryAllColumns`,
// 内容管理 columnReorder: `occupationlab/occupationlab/information/column/reorder`,
addArticle: `occupationlab/occupationlab/information/article/addArticle`, // 内容管理
deleteArticles: `occupationlab/occupationlab/information/article/deleteArticles`, addArticle: `occupationlab/occupationlab/information/article/addArticle`,
editArticle: `occupationlab/occupationlab/information/article/editArticle`, deleteArticles: `occupationlab/occupationlab/information/article/deleteArticles`,
enableArticle: `occupationlab/occupationlab/information/article/enableArticle`, editArticle: `occupationlab/occupationlab/information/article/editArticle`,
getArticle: `occupationlab/occupationlab/information/article/getArticle`, enableArticle: `occupationlab/occupationlab/information/article/enableArticle`,
getArticles: `occupationlab/occupationlab/information/article/getArticles`, getArticle: `occupationlab/occupationlab/information/article/getArticle`,
queryArticleByCondition: `occupationlab/occupationlab/information/article/queryArticleByCondition`, getArticles: `occupationlab/occupationlab/information/article/getArticles`,
articleSort: `occupationlab/occupationlab/information/article/articleSort`, queryArticleByCondition: `occupationlab/occupationlab/information/article/queryArticleByCondition`,
articleSort: `occupationlab/occupationlab/information/article/articleSort`,
queryProvince: `nakadai/nakadai/province/queryProvince`, //查询省份
queryCity: `nakadai/nakadai/city/queryCity`, //查询城市 queryProvince: `nakadai/nakadai/province/queryProvince`, //查询省份
queryCity: `nakadai/nakadai/city/queryCity`, //查询城市
queryCourseDiscipline: `nakadai/nakadai/subject/courseDiscipline`, //查询课程学科
queryCourseProfessionalClass: `nakadai/nakadai/subject/courseProfessionalClass`, //查询专业类 queryCourseDiscipline: `nakadai/nakadai/subject/courseDiscipline`, //查询课程学科
queryCourseProfessional: `nakadai/nakadai/subject/courseProfessional`, //查询专业 queryCourseProfessionalClass: `nakadai/nakadai/subject/courseProfessionalClass`, //查询专业类
queryCourseProfessional: `nakadai/nakadai/subject/courseProfessional`, //查询专业
// 数据管理
getIdQueryTable: `data/data/table/getIdQueryTable`, // 数据管理
getTableByClassification: `data/data/table/getTableByClassification`, getIdQueryTable: `data/data/table/getIdQueryTable`,
getTableByCondition: `data/data/table/getTableByCondition`, getTableByClassification: `data/data/table/getTableByClassification`,
originalList: `data/data/table/originalList`, getTableByCondition: `data/data/table/getTableByCondition`,
originalListById: `data/data/table/originalListById`, originalList: `data/data/table/originalList`,
saveCategory: `data/data/table/saveCategory`, originalListById: `data/data/table/originalListById`,
saveTable: `data/data/table/saveTable`, saveCategory: `data/data/table/saveCategory`,
updateCategory: `data/data/table/updateCategory`, saveTable: `data/data/table/saveTable`,
deleteCategory: `data/data/table/deleteCategory`, updateCategory: `data/data/table/updateCategory`,
deleteTable: `data/data/table/deleteTable`, deleteCategory: `data/data/table/deleteCategory`,
previewData: `data/data/preview`, deleteTable: `data/data/table/deleteTable`,
staticPreview: `data/data/staticPreview`, previewData: `data/data/preview`,
editTableName: `data/data/table/editTableName`, staticPreview: `data/data/staticPreview`,
updateTableCommit: `data/data/updateTableCommit`, editTableName: `data/data/table/editTableName`,
getLevel: `data/data/category/getLevel`, updateTableCommit: `data/data/updateTableCommit`,
getAllTableInfoByCategoryId: `data/data/product/getAllTableInfoByCategoryId`, getLevel: `data/data/category/getLevel`,
getAllTableInfoByCategoryId: `data/data/product/getAllTableInfoByCategoryId`,
// 产品管理
deleteProduct: `data/data/product/delete`, // 产品管理
findById: `data/data/product/findById`, deleteProduct: `data/data/product/delete`,
listByEntity: `data/data/product/listByEntity`, findById: `data/data/product/findById`,
saveProduct: `data/data/product/save`, listByEntity: `data/data/product/listByEntity`,
updateProduct: `data/data/product/update`, saveProduct: `data/data/product/save`,
saveRecord: `data/data/dataRecord/saveRecord`, updateProduct: `data/data/product/update`,
getAllTableIdBycategoryId: `data/data/product/getAllTableIdBycategoryId`, saveRecord: `data/data/dataRecord/saveRecord`,
deleteDataPrompt: `data/data/product/deleteDataPrompt`, getAllTableIdBycategoryId: `data/data/product/getAllTableIdBycategoryId`,
deleteDataPrompt: `data/data/product/deleteDataPrompt`,
// 关键词
addKeyword: `data/data/keyword/addKeyword`, // 关键词
deleteKeyword: `data/data/keyword/deleteKeyword`, addKeyword: `data/data/keyword/addKeyword`,
getKeywordByCategoryId: `data/data/keyword/getKeywordByCategoryId`, deleteKeyword: `data/data/keyword/deleteKeyword`,
getKeywordByCategoryId: `data/data/keyword/getKeywordByCategoryId`,
// 后台账号
deleteArch: `nakadai/nakadai/staffAccountArchitecture/delete`, // 后台账号
saveArch: `nakadai/nakadai/staffAccountArchitecture/save`, deleteArch: `nakadai/nakadai/staffAccountArchitecture/delete`,
treeListArch: `nakadai/nakadai/staffAccountArchitecture/treeList`, saveArch: `nakadai/nakadai/staffAccountArchitecture/save`,
updateArch: `nakadai/nakadai/staffAccountArchitecture/update`, treeListArch: `nakadai/nakadai/staffAccountArchitecture/treeList`,
delStaff: `nakadai/nakadai/backstageStaff/delStaff`, updateArch: `nakadai/nakadai/staffAccountArchitecture/update`,
modifyStaff: `nakadai/nakadai/backstageStaff/modifyStaff`, delStaff: `nakadai/nakadai/backstageStaff/delStaff`,
saveStaff: `nakadai/nakadai/backstageStaff/saveStaff`, modifyStaff: `nakadai/nakadai/backstageStaff/modifyStaff`,
staffDetail: `nakadai/nakadai/backstageStaff/staffDetail`, saveStaff: `nakadai/nakadai/backstageStaff/saveStaff`,
staffList: `nakadai/nakadai/backstageStaff/staffList`, staffDetail: `nakadai/nakadai/backstageStaff/staffDetail`,
importStaff: `${host}nakadai/nakadai/backstageStaff/importStaff`, staffList: `nakadai/nakadai/backstageStaff/staffList`,
exportFailure: `${host}nakadai/nakadai/backstageStaff/exportFailure`, importStaff: `${host}nakadai/nakadai/backstageStaff/importStaff`,
exportFailure: `${host}nakadai/nakadai/backstageStaff/exportFailure`,
// 角色管理
batchRemove: `users/users/role/batchRemove`, //批量删除角色 // 角色管理
checkRoleIsExist: `users/users/role/checkRoleIsExist`, //判断该角色是否存在 batchRemove: `users/users/role/batchRemove`, //批量删除角色
delRoleByAccountId: `users/users/role/delRoleByAccountId`, //删除某用户下的某个角色 checkRoleIsExist: `users/users/role/checkRoleIsExist`, //判断该角色是否存在
roleList: `users/users/role/list`, //角色分页列表查询 delRoleByAccountId: `users/users/role/delRoleByAccountId`, //删除某用户下的某个角色
obtainDetails: `users/users/role/obtainDetails`, //获取角色详情 roleList: `users/users/role/list`, //角色分页列表查询
saveOrUpdate: `users/users/role/saveOrUpdate`, //新增或更新角色 obtainDetails: `users/users/role/obtainDetails`, //获取角色详情
queryAllMenus: `users/users/permission/queryAllMenus`, //查询所有菜单 saveOrUpdate: `users/users/role/saveOrUpdate`, //新增或更新角色
getSupplierList: `users/users/supplier/getSupplierList`, queryAllMenus: `users/users/permission/queryAllMenus`, //查询所有菜单
getSupplierListByRole: `users/users/supplier/getSupplierListByRole`, getSupplierList: `users/users/supplier/getSupplierList`,
getSupplierListByRole: `users/users/supplier/getSupplierListByRole`,
// 日志管理
logAdd: `nakadai/nakadai/log/add`, // 日志管理
logDel: `nakadai/nakadai/log/delete`, logAdd: `nakadai/nakadai/log/add`,
logGet: `nakadai/nakadai/log/get`, logDel: `nakadai/nakadai/log/delete`,
logManagementList: `nakadai/nakadai/log/logManagementList`, logGet: `nakadai/nakadai/log/get`,
platformLogList: `nakadai/nakadai/log/platformLogList`, logManagementList: `nakadai/nakadai/log/logManagementList`,
listUpdate: `nakadai/nakadai/log/update`, platformLogList: `nakadai/nakadai/log/platformLogList`,
checkRepeat: `nakadai/nakadai/log/checkRepeat`, listUpdate: `nakadai/nakadai/log/update`,
logWithdrawal: `nakadai/nakadai/log/logWithdrawal`, checkRepeat: `nakadai/nakadai/log/checkRepeat`,
logWithdrawal: `nakadai/nakadai/log/logWithdrawal`,
sysLogs: `occupationlab/sys/logs`,
sysLogs: `occupationlab/sys/logs`,
// 合伙人
deleteParner: `nakadai/nakadai/partnerClassification/delete`, // 合伙人
saveParner: `nakadai/nakadai/partnerClassification/save`, deleteParner: `nakadai/nakadai/partnerClassification/delete`,
listParner: `nakadai/nakadai/partnerClassification/treeList`, saveParner: `nakadai/nakadai/partnerClassification/save`,
updateParner: `nakadai/nakadai/partnerClassification/update`, listParner: `nakadai/nakadai/partnerClassification/treeList`,
updateParner: `nakadai/nakadai/partnerClassification/update`,
delPartnerAccount: `nakadai/nakadai/partnerAccount/delPartnerAccount`,
modifyPartnerAccount: `nakadai/nakadai/partnerAccount/modifyPartnerAccount`, delPartnerAccount: `nakadai/nakadai/partnerAccount/delPartnerAccount`,
partnerAccountDetail: `nakadai/nakadai/partnerAccount/partnerAccountDetail`, modifyPartnerAccount: `nakadai/nakadai/partnerAccount/modifyPartnerAccount`,
partnerAccountList: `nakadai/nakadai/partnerAccount/partnerAccountList`, partnerAccountDetail: `nakadai/nakadai/partnerAccount/partnerAccountDetail`,
savePartnerAccount: `nakadai/nakadai/partnerAccount/savePartnerAccount`, partnerAccountList: `nakadai/nakadai/partnerAccount/partnerAccountList`,
generateInvitationCode: `nakadai/nakadai/partnerAccount/generateInvitationCode`, savePartnerAccount: `nakadai/nakadai/partnerAccount/savePartnerAccount`,
generationQrCode: `nakadai/nakadai/partnerAccount/generationQrCode`, generateInvitationCode: `nakadai/nakadai/partnerAccount/generateInvitationCode`,
queryUserInfoByPhone: `nakadai/nakadai/partner-team/queryUserInfoByPhone`, generationQrCode: `nakadai/nakadai/partnerAccount/generationQrCode`,
getAllTeam: `nakadai/nakadai/partnerClassification/getAllTeam`, queryUserInfoByPhone: `nakadai/nakadai/partner-team/queryUserInfoByPhone`,
partnerRemoval: `nakadai/nakadai/partnerAccount/partnerRemoval`, getAllTeam: `nakadai/nakadai/partnerClassification/getAllTeam`,
generateTransferCode: `nakadai/nakadai/partnerAccount/generateTransferCode`, partnerRemoval: `nakadai/nakadai/partnerAccount/partnerRemoval`,
transferAdmin: `nakadai/nakadai/partnerAccount/transferAdmin`, generateTransferCode: `nakadai/nakadai/partnerAccount/generateTransferCode`,
transferTeam: `nakadai/nakadai/partnerAccount/transferTeam`, transferAdmin: `nakadai/nakadai/partnerAccount/transferAdmin`,
partnerAccountMergeList: `nakadai/nakadai/partnerAccount/partnerAccountMergeList`, transferTeam: `nakadai/nakadai/partnerAccount/transferTeam`,
partnerAccountMergeList: `nakadai/nakadai/partnerAccount/partnerAccountMergeList`,
// 赛事
CompetitionPageConditionQueryByNakadai: `competition/competition/management/competitionPageConditionQueryByNakadai`, // 赛事
addCompetition: `competition/competition/management/addCompetition`, CompetitionPageConditionQueryByNakadai: `competition/competition/management/competitionPageConditionQueryByNakadai`,
batchDeleteCompetition: `competition/competition/management/batchDeleteCompetition`, addCompetition: `competition/competition/management/addCompetition`,
checkTheStatusOfTheCompetition: `competition/competition/management/checkTheStatusOfTheCompetition`, batchDeleteCompetition: `competition/competition/management/batchDeleteCompetition`,
disabledEventsCompetition: `competition/competition/management/disabledEvents`, checkTheStatusOfTheCompetition: `competition/competition/management/checkTheStatusOfTheCompetition`,
editCompetition: `competition/competition/management/editCompetition`, disabledEventsCompetition: `competition/competition/management/disabledEvents`,
getCompetition: `competition/competition/management/getCompetition`, editCompetition: `competition/competition/management/editCompetition`,
getProjectAssessmentByCompetition: `occupationlab/occupationlab/projectManage/getProjectAssessmentByCompetition`, getCompetition: `competition/competition/management/getCompetition`,
publishCompetition: `competition/competition/management/publishCompetition`, getProjectAssessmentByCompetition: `occupationlab/occupationlab/projectManage/getProjectAssessmentByCompetition`,
detailsOfCompetitionStage: `competition/competition/management/detailsOfCompetitionStage`, publishCompetition: `competition/competition/management/publishCompetition`,
entryInformation: `competition/competition/team/entryInformation`, detailsOfCompetitionStage: `competition/competition/management/detailsOfCompetitionStage`,
getRedisCacheCompetition: `competition/competition/management/getRedisCache`, entryInformation: `competition/competition/team/entryInformation`,
copyCompetition: `competition/competition/management/copyCompetition`, getRedisCacheCompetition: `competition/competition/management/getRedisCache`,
checkCustomerBySchool: `competition/competition/team/checkCustomerBySchool`, copyCompetition: `competition/competition/management/copyCompetition`,
updateEventAllocationRecord: `competition/competitionAutomaticAllocationRecord/updateEventAllocationRecord`, checkCustomerBySchool: `competition/competition/team/checkCustomerBySchool`,
editWhetherPopUpsAppear: `competition/competitionAutomaticAllocationRecord/editWhetherPopUpsAppear`, updateEventAllocationRecord: `competition/competitionAutomaticAllocationRecord/updateEventAllocationRecord`,
automaticAllocation: `competition/competition/automaticAllocation/automaticAllocation`, editWhetherPopUpsAppear: `competition/competitionAutomaticAllocationRecord/editWhetherPopUpsAppear`,
automaticAllocation: `competition/competition/automaticAllocation/automaticAllocation`,
// 赛事内容 checkTeamStatus: `competition/teamAbnormalInformation/checkTeamStatus`,
addCompetitionContent: `competition/competition/content/addCompetitionContent`, queryAbnormalTeam: `competition/teamAbnormalInformation/queryAbnormalTeam`,
editCompetitionContent: `competition/competition/content/editCompetitionContent`,
getCompetitionContent: `competition/competition/content/getCompetitionContent`, // 赛事内容
// 赛事附件 addCompetitionContent: `competition/competition/content/addCompetitionContent`,
delComAnnex: `competition/competition/annex/delete`, editCompetitionContent: `competition/competition/content/editCompetitionContent`,
saveComAnnex: `competition/competition/annex/save`, getCompetitionContent: `competition/competition/content/getCompetitionContent`,
updateComAnnex: `competition/competition/annex/update`, // 赛事附件
// 赛事公告附件 delComAnnex: `competition/competition/annex/delete`,
delAnnex: `competition/competition/announcementAnnex/delete`, saveComAnnex: `competition/competition/annex/save`,
saveAnnex: `competition/competition/announcementAnnex/save`, updateComAnnex: `competition/competition/annex/update`,
updateAnnex: `competition/competition/announcementAnnex/update`, // 赛事公告附件
viewAttachments: `competition/competition/announcementAnnex/viewAttachments`, delAnnex: `competition/competition/announcementAnnex/delete`,
// 赛事规则 saveAnnex: `competition/competition/announcementAnnex/save`,
addCompetitionRule: `competition/competition/rule/addCompetitionRule`, updateAnnex: `competition/competition/announcementAnnex/update`,
editCompetitionRule: `competition/competition/rule/editCompetitionRule`, viewAttachments: `competition/competition/announcementAnnex/viewAttachments`,
getCompetitionRule: `competition/competition/rule/getCompetitionRule`, // 赛事规则
queryCompetitionStageBySetupId: `competition/competition/stage/queryCompetitionStageBySetupId`, addCompetitionRule: `competition/competition/rule/addCompetitionRule`,
// 竞赛进展 editCompetitionRule: `competition/competition/rule/editCompetitionRule`,
addCompetitionProgress: `competition/competition/progress/addCompetitionProgress`, getCompetitionRule: `competition/competition/rule/getCompetitionRule`,
deleteCompetitionProgress: `competition/competition/progress/deleteCompetitionProgress`, queryCompetitionStageBySetupId: `competition/competition/stage/queryCompetitionStageBySetupId`,
editCompetitionProgress: `competition/competition/progress/editCompetitionProgress`, // 竞赛进展
getCompetitionProgress: `competition/competition/progress/getCompetitionProgress`, addCompetitionProgress: `competition/competition/progress/addCompetitionProgress`,
// 报名人员 deleteCompetitionProgress: `competition/competition/progress/deleteCompetitionProgress`,
addCompetitionRegistration: `competition/competition/registration/addCompetitionRegistration`, editCompetitionProgress: `competition/competition/progress/editCompetitionProgress`,
cancelRegistration: `competition/competition/registration/cancelRegistration`, getCompetitionProgress: `competition/competition/progress/getCompetitionProgress`,
disableContests: `competition/competition/registration/disableContests`, // 报名人员
disableRegistration: `competition/competition/registration/disableRegistration`, addCompetitionRegistration: `competition/competition/registration/addCompetitionRegistration`,
excelExport: `${host}competition/competition/registration/excelExport`, cancelRegistration: `competition/competition/registration/cancelRegistration`,
exportDataInBatches: `${host}competition/competition/registration/exportDataInBatches`, disableContests: `competition/competition/registration/disableContests`,
queryRegistrationByCondition: `competition/competition/registration/queryRegistrationByCondition`, disableRegistration: `competition/competition/registration/disableRegistration`,
searchTeam: `competition/competition/team/searchTeam`, excelExport: `${host}competition/competition/registration/excelExport`,
joinCompetitionTeam: `competition/competition/team/joinCompetitionTeam`, exportDataInBatches: `${host}competition/competition/registration/exportDataInBatches`,
addCompetitionTeam: `competition/competition/team/addCompetitionTeam`, queryRegistrationByCondition: `competition/competition/registration/queryRegistrationByCondition`,
studentAccountApplication: `users/users/register/studentAccountApplication`, searchTeam: `competition/competition/team/searchTeam`,
checkPhoneOrEmailExist: `users/users/userInfo/checkPhoneOrEmailExist`, joinCompetitionTeam: `competition/competition/team/joinCompetitionTeam`,
editCompetitionTeam: `competition/competition/team/editCompetitionTeam`, addCompetitionTeam: `competition/competition/team/addCompetitionTeam`,
addAnAdvisor: `competition/competition/teamInstructor/addAnAdvisor`, studentAccountApplication: `users/users/register/studentAccountApplication`,
deleteAnAdvisor: `competition/competition/teamInstructor/deleteAnAdvisor`, checkPhoneOrEmailExist: `users/users/userInfo/checkPhoneOrEmailExist`,
captainOfTransfer: `competition/competition/team/captainOfTransfer`, editCompetitionTeam: `competition/competition/team/editCompetitionTeam`,
removeTheLine: `competition/competition/team/removeTheLine`, addAnAdvisor: `competition/competition/teamInstructor/addAnAdvisor`,
stageSelectParticipants: `competition/competition/teamParticipant/stageSelectParticipants`, deleteAnAdvisor: `competition/competition/teamInstructor/deleteAnAdvisor`,
updateUser: `users/users/userInfo/updateUser`, captainOfTransfer: `competition/competition/team/captainOfTransfer`,
enquireAboutSchoolStudents: `users/users/userAccount/enquireAboutSchoolStudents`, removeTheLine: `competition/competition/team/removeTheLine`,
cancelParticipant: `competition/competition/teamParticipant/cancelParticipant`, stageSelectParticipants: `competition/competition/teamParticipant/stageSelectParticipants`,
schoolsInCompetitionArea: `competition/competition/range/schoolsInCompetitionArea`, updateUser: `users/users/userInfo/updateUser`,
batchDeleteApplicants: `competition/competition/registration/batchDeleteApplicants`, enquireAboutSchoolStudents: `users/users/userAccount/enquireAboutSchoolStudents`,
deleteAllData: `competition/competition/registration/deleteAllData`, cancelParticipant: `competition/competition/teamParticipant/cancelParticipant`,
batchImportPersonalData: `${host}competition/competition/registration/batchImportPersonalData`, schoolsInCompetitionArea: `competition/competition/range/schoolsInCompetitionArea`,
batchImportTeamData: `${host}competition/competition/registration/batchImportTeamData`, batchDeleteApplicants: `competition/competition/registration/batchDeleteApplicants`,
TeamDataExportFailure: `${host}competition/competition/registration/exportFailure`, deleteAllData: `competition/competition/registration/deleteAllData`,
// 赛事公告 batchImportPersonalData: `${host}competition/competition/registration/batchImportPersonalData`,
addAnnouncement: `competition/competition/announcement/addAnnouncement`, batchImportTeamData: `${host}competition/competition/registration/batchImportTeamData`,
amendmentAnnouncement: `competition/competition/announcement/amendmentAnnouncement`, TeamDataExportFailure: `${host}competition/competition/registration/exportFailure`,
deleteAnnouncement: `competition/competition/announcement/deleteAnnouncement`, // 赛事公告
disableAnnouncement: `competition/competition/announcement/disableAnnouncement`, addAnnouncement: `competition/competition/announcement/addAnnouncement`,
queryAnnouncementByCompetitionId: `competition/competition/announcement/queryAnnouncementByCompetitionId`, amendmentAnnouncement: `competition/competition/announcement/amendmentAnnouncement`,
queryAnnouncementDetails: `competition/competition/announcement/queryAnnouncementDetails`, deleteAnnouncement: `competition/competition/announcement/deleteAnnouncement`,
saveAnnouncementAnnex: `competition/competition/announcementAnnex/save`, disableAnnouncement: `competition/competition/announcement/disableAnnouncement`,
// 赛事成绩 queryAnnouncementByCompetitionId: `competition/competition/announcement/queryAnnouncementByCompetitionId`,
batchDeleteContestGrade: `competition/competition/performance/batchDeleteContestGrade`, queryAnnouncementDetails: `competition/competition/announcement/queryAnnouncementDetails`,
batchImportGrades: `${host}competition/competition/performance/batchImportGrades`, saveAnnouncementAnnex: `competition/competition/announcementAnnex/save`,
exportExperimentalResultsInBatch: `${host}competition/competition/performance/exportExperimentalResultsInBatch`, // 赛事成绩
performanceExportFailure: `${host}competition/competition/performance/exportFailure`, batchDeleteContestGrade: `competition/competition/performance/batchDeleteContestGrade`,
rankExportFailure: `${host}competition/competition/rank/exportFailure`, batchImportGrades: `${host}competition/competition/performance/batchImportGrades`,
batchImportRanking: `${host}competition/competition/rank/batchImportRanking`, exportExperimentalResultsInBatch: `${host}competition/competition/performance/exportExperimentalResultsInBatch`,
stageGradeManagementList: `competition/competition/performance/stageGradeManagementList`, performanceExportFailure: `${host}competition/competition/performance/exportFailure`,
stageRaceRanking: `competition/competition/rank/stageRaceRanking`, rankExportFailure: `${host}competition/competition/rank/exportFailure`,
overallStandingsInThePointsRace: `competition/competition/rank/overallStandingsInThePointsRace`, batchImportRanking: `${host}competition/competition/rank/batchImportRanking`,
publishRanking: `competition/competition/rank/publishRanking`, stageGradeManagementList: `competition/competition/performance/stageGradeManagementList`,
stageTeamScoreDetails: `competition/competition/rank/stageTeamScoreDetails`, stageRaceRanking: `competition/competition/rank/stageRaceRanking`,
multipleStageTeamScoreDetails: `competition/competition/rank/multipleStageTeamScoreDetails`, overallStandingsInThePointsRace: `competition/competition/rank/overallStandingsInThePointsRace`,
detailsOfTotalTeamScores: `competition/competition/rank/detailsOfTotalTeamScores`, publishRanking: `competition/competition/rank/publishRanking`,
cancelRanking: `competition/competition/rank/cancelRanking`, stageTeamScoreDetails: `competition/competition/rank/stageTeamScoreDetails`,
reportDetail: `occupationlab/occupationlab/achievement/reportDetail`, multipleStageTeamScoreDetails: `competition/competition/rank/multipleStageTeamScoreDetails`,
deleteLastPublication: `competition/competition/rank/deleteLastPublication`, detailsOfTotalTeamScores: `competition/competition/rank/detailsOfTotalTeamScores`,
whetherToPublish: `competition/competition/rank/whetherToPublish`, cancelRanking: `competition/competition/rank/cancelRanking`,
manuallyRankTheUploadList: `competition/competition/rank/manuallyRankTheUploadList`, reportDetail: `occupationlab/occupationlab/achievement/reportDetail`,
queryPublicationSource: `competition/competition/rank/queryPublicationSource`, deleteLastPublication: `competition/competition/rank/deleteLastPublication`,
releaseVerification: `competition/competition/rank/releaseVerification`, whetherToPublish: `competition/competition/rank/whetherToPublish`,
totalRankingScoreDetails: `competition/competition/rank/totalRankingScoreDetails`, manuallyRankTheUploadList: `competition/competition/rank/manuallyRankTheUploadList`,
batchRelease: `competition/competition/rank/batchRelease`, queryPublicationSource: `competition/competition/rank/queryPublicationSource`,
manuallyUploadedRankings: `competition/competition/rank/manuallyUploadedRankings`, releaseVerification: `competition/competition/rank/releaseVerification`,
toggleTheSortingMode: `competition/competition/rank/toggleTheSortingMode`, totalRankingScoreDetails: `competition/competition/rank/totalRankingScoreDetails`,
selectTheLastSortStatus: `competition/competition/rank/selectTheLastSortStatus`, batchRelease: `competition/competition/rank/batchRelease`,
cancelImport: `competition/competition/rank/cancelImport`, manuallyUploadedRankings: `competition/competition/rank/manuallyUploadedRankings`,
addCompetitionStageRankingTime: `competition/competitionReleaseTime/addCompetitionStageRankingTime`, toggleTheSortingMode: `competition/competition/rank/toggleTheSortingMode`,
cancelCompetitionStageRankingTime: `competition/competitionReleaseTime/cancelCompetitionStageRankingTime`, selectTheLastSortStatus: `competition/competition/rank/selectTheLastSortStatus`,
getCompetitionStageRankingTime: `competition/competitionReleaseTime/getCompetitionStageRankingTime`, cancelImport: `competition/competition/rank/cancelImport`,
frontOfficeCompetitionRanking: `competition/competition/rank/frontOfficeCompetitionRanking`, addCompetitionStageRankingTime: `competition/competitionReleaseTime/addCompetitionStageRankingTime`,
cCompetitionStageFileList: `competition/cCompetitionStageFile/listByEntity`, cancelCompetitionStageRankingTime: `competition/competitionReleaseTime/cancelCompetitionStageRankingTime`,
derive: `${host}competition/cCompetitionStageFile/deriveAll`, getCompetitionStageRankingTime: `competition/competitionReleaseTime/getCompetitionStageRankingTime`,
allExperimentalResultsAreDerived: `${host}competition/competition/performance/allExperimentalResultsAreDerived`, frontOfficeCompetitionRanking: `competition/competition/rank/frontOfficeCompetitionRanking`,
derivedRanking: `${host}competition/competition/rank/derivedRanking`, cCompetitionStageFileList: `competition/cCompetitionStageFile/listByEntity`,
individualDerivedRanking: `${host}competition/competition/rank/individualDerivedRanking`, derive: `${host}competition/cCompetitionStageFile/deriveAll`,
gradeDownloadExcel: `${host}competition/competition/performance/downloadExcel`, allExperimentalResultsAreDerived: `${host}competition/competition/performance/allExperimentalResultsAreDerived`,
gradeImport: `https://www.occupationlab.com/template/赛事成绩导入模板.xlsx`, derivedRanking: `${host}competition/competition/rank/derivedRanking`,
rankImportTeam: `https://www.occupationlab.com/template/赛事排名导入模板(团队赛).xlsx`, individualDerivedRanking: `${host}competition/competition/rank/individualDerivedRanking`,
rankImportPerson: `https://www.occupationlab.com/template/赛事排名导入模板(个人赛).xlsx`, gradeDownloadExcel: `${host}competition/competition/performance/downloadExcel`,
gradeImport: `https://www.occupationlab.com/template/赛事成绩导入模板.xlsx`,
// 合伙运营 rankImportTeam: `https://www.occupationlab.com/template/赛事排名导入模板(团队赛).xlsx`,
batchDeletionParnerLabel: `nakadai/nakadai/partner/article/label/batchDeletion`, rankImportPerson: `https://www.occupationlab.com/template/赛事排名导入模板(个人赛).xlsx`,
checkForHeavyParnerLabel: `nakadai/nakadai/partner/article/label/checkForHeavy`,
findByIdParnerLabel: `nakadai/nakadai/partner/article/label/findById`, // 合伙运营
queryAllArticleSubjectTags: `nakadai/nakadai/partner/article/label/queryAllArticleSubjectTags`, batchDeletionParnerLabel: `nakadai/nakadai/partner/article/label/batchDeletion`,
saveParnerLabel: `nakadai/nakadai/partner/article/label/save`, checkForHeavyParnerLabel: `nakadai/nakadai/partner/article/label/checkForHeavy`,
updateParnerLabel: `nakadai/nakadai/partner/article/label/update`, findByIdParnerLabel: `nakadai/nakadai/partner/article/label/findById`,
batchDeletionParnerClass: `nakadai/nakadai/partner/article/classification/batchDeletion`, queryAllArticleSubjectTags: `nakadai/nakadai/partner/article/label/queryAllArticleSubjectTags`,
checkForHeavyParnerClass: `nakadai/nakadai/partner/article/classification/checkForHeavy`, saveParnerLabel: `nakadai/nakadai/partner/article/label/save`,
findByIdParnerClass: `nakadai/nakadai/partner/article/classification/findById`, updateParnerLabel: `nakadai/nakadai/partner/article/label/update`,
queryClassificationByType: `nakadai/nakadai/partner/article/classification/queryClassificationByType`, batchDeletionParnerClass: `nakadai/nakadai/partner/article/classification/batchDeletion`,
saveParnerClass: `nakadai/nakadai/partner/article/classification/save`, checkForHeavyParnerClass: `nakadai/nakadai/partner/article/classification/checkForHeavy`,
updateParnerClass: `nakadai/nakadai/partner/article/classification/update`, findByIdParnerClass: `nakadai/nakadai/partner/article/classification/findById`,
batchDeletionParnerArticle: `nakadai/nakadai/partner/article/management/batchDeletion`, queryClassificationByType: `nakadai/nakadai/partner/article/classification/queryClassificationByType`,
findByIdParnerArticle: `nakadai/nakadai/partner/article/management/findById`, saveParnerClass: `nakadai/nakadai/partner/article/classification/save`,
partnerOperatingList: `nakadai/nakadai/partner/article/management/partnerOperatingList`, updateParnerClass: `nakadai/nakadai/partner/article/classification/update`,
saveParnerArticle: `nakadai/nakadai/partner/article/management/save`, batchDeletionParnerArticle: `nakadai/nakadai/partner/article/management/batchDeletion`,
updateParnerArticle: `nakadai/nakadai/partner/article/management/update`, findByIdParnerArticle: `nakadai/nakadai/partner/article/management/findById`,
articleEnableOrDisable: `nakadai/nakadai/partner/article/management/articleEnableOrDisable`, partnerOperatingList: `nakadai/nakadai/partner/article/management/partnerOperatingList`,
checkIfTheTitleIsRepeat: `nakadai/nakadai/partner/article/management/checkIfTheTitleIsRepeat`, saveParnerArticle: `nakadai/nakadai/partner/article/management/save`,
modifiedSort: `nakadai/nakadai/partner/article/management/modifiedSort`, updateParnerArticle: `nakadai/nakadai/partner/article/management/update`,
articleTopOperation: `nakadai/nakadai/partner/article/management/articleTopOperation`, articleEnableOrDisable: `nakadai/nakadai/partner/article/management/articleEnableOrDisable`,
batchDeletionParnerFile: `nakadai/nakadai/partner/article/file/batchDeletion`, checkIfTheTitleIsRepeat: `nakadai/nakadai/partner/article/management/checkIfTheTitleIsRepeat`,
findByIdParnerFile: `nakadai/nakadai/partner/article/file/findById`, modifiedSort: `nakadai/nakadai/partner/article/management/modifiedSort`,
saveParnerFile: `nakadai/nakadai/partner/article/file/save`, articleTopOperation: `nakadai/nakadai/partner/article/management/articleTopOperation`,
theAttachmentUnderTheQueryColumn: `nakadai/nakadai/partner/article/file/theAttachmentUnderTheQueryColumn`, batchDeletionParnerFile: `nakadai/nakadai/partner/article/file/batchDeletion`,
updateParnerFile: `nakadai/nakadai/partner/article/file/update`, findByIdParnerFile: `nakadai/nakadai/partner/article/file/findById`,
batchDeletionScheme: `nakadai/nakadai/partner/schemeManagement/batchDeletion`, saveParnerFile: `nakadai/nakadai/partner/article/file/save`,
enableOrDisableScheme: `nakadai/nakadai/partner/schemeManagement/enableOrDisable`, theAttachmentUnderTheQueryColumn: `nakadai/nakadai/partner/article/file/theAttachmentUnderTheQueryColumn`,
findByIdScheme: `nakadai/nakadai/partner/schemeManagement/findById`, updateParnerFile: `nakadai/nakadai/partner/article/file/update`,
saveScheme: `nakadai/nakadai/partner/schemeManagement/save`, batchDeletionScheme: `nakadai/nakadai/partner/schemeManagement/batchDeletion`,
schemeList: `nakadai/nakadai/partner/schemeManagement/schemeList`, enableOrDisableScheme: `nakadai/nakadai/partner/schemeManagement/enableOrDisable`,
updateScheme: `nakadai/nakadai/partner/schemeManagement/update`, findByIdScheme: `nakadai/nakadai/partner/schemeManagement/findById`,
saveScheme: `nakadai/nakadai/partner/schemeManagement/save`,
// 商城管理 schemeList: `nakadai/nakadai/partner/schemeManagement/schemeList`,
addProductCategory: `nakadai/productClassification/addProductCategory`, updateScheme: `nakadai/nakadai/partner/schemeManagement/update`,
deleteProductCategory: `nakadai/productClassification/deleteProductCategory`,
productCategoryList: `nakadai/productClassification/productCategoryList`, // 商城管理
addProductType: `nakadai/productType/addProductType`, addProductCategory: `nakadai/productClassification/addProductCategory`,
deleteProductType: `nakadai/productType/deleteProductType`, deleteProductCategory: `nakadai/productClassification/deleteProductCategory`,
productTypeList: `nakadai/productType/productTypeList`, productCategoryList: `nakadai/productClassification/productCategoryList`,
updateProductType: `nakadai/productType/updateProductType`, addProductType: `nakadai/productType/addProductType`,
addSupplier: `nakadai/supplier/addSupplier`, deleteProductType: `nakadai/productType/deleteProductType`,
deleteSupplier: `nakadai/supplier/deleteSupplier`, productTypeList: `nakadai/productType/productTypeList`,
supplierList: `nakadai/supplier/supplierList`, updateProductType: `nakadai/productType/updateProductType`,
addTags: `nakadai/tags/addTags`, addSupplier: `nakadai/supplier/addSupplier`,
deleteTags: `nakadai/tags/deleteTags`, deleteSupplier: `nakadai/supplier/deleteSupplier`,
tagsList: `nakadai/tags/tagsList`, supplierList: `nakadai/supplier/supplierList`,
updateTags: `nakadai/tags/updateTags`, addTags: `nakadai/tags/addTags`,
updateTagsSort: `nakadai/tags/updateTagsSort`, deleteTags: `nakadai/tags/deleteTags`,
addGoods: `nakadai/mall/addGoods`, tagsList: `nakadai/tags/tagsList`,
listOfGoods: `nakadai/mall/listOfGoods`, updateTags: `nakadai/tags/updateTags`,
deletionOfGoods: `nakadai/mall/deletionOfGoods`, updateTagsSort: `nakadai/tags/updateTagsSort`,
detailsOfGoods: `nakadai/mall/detailsOfGoods`, addGoods: `nakadai/mall/addGoods`,
renewalOfGoods: `nakadai/mall/renewalOfGoods`, listOfGoods: `nakadai/mall/listOfGoods`,
goodsOffTheShelf: `nakadai/mall/goodsOffTheShelf`, deletionOfGoods: `nakadai/mall/deletionOfGoods`,
goodsSelection: `nakadai/mall/goodsSelection`, detailsOfGoods: `nakadai/mall/detailsOfGoods`,
queryCitySettlementPrice: `nakadai/mallPrice/queryCitySettlementPrice`, renewalOfGoods: `nakadai/mall/renewalOfGoods`,
allSubjects: `nakadai/productTheme/allSubjects`, goodsOffTheShelf: `nakadai/mall/goodsOffTheShelf`,
goodsSelection: `nakadai/mall/goodsSelection`,
// 营销推广 queryCitySettlementPrice: `nakadai/mallPrice/queryCitySettlementPrice`,
delMarketing: `nakadai/nakadai/mall/marketing/promotion/batchDeletion`, allSubjects: `nakadai/productTheme/allSubjects`,
findByIdMarketing: `nakadai/nakadai/mall/marketing/promotion/findById`,
listMarketing: `nakadai/nakadai/mall/marketing/promotion/pagingQueryList`, // 营销推广
saveMarketing: `nakadai/nakadai/mall/marketing/promotion/save`, delMarketing: `nakadai/nakadai/mall/marketing/promotion/batchDeletion`,
updateMarketing: `nakadai/nakadai/mall/marketing/promotion/update`, findByIdMarketing: `nakadai/nakadai/mall/marketing/promotion/findById`,
bannerEnableOrDisable: `nakadai/nakadai/mall/marketing/promotion/bannerEnableOrDisable`, listMarketing: `nakadai/nakadai/mall/marketing/promotion/pagingQueryList`,
saveMarketing: `nakadai/nakadai/mall/marketing/promotion/save`,
updateMarketing: `nakadai/nakadai/mall/marketing/promotion/update`,
bannerEnableOrDisable: `nakadai/nakadai/mall/marketing/promotion/bannerEnableOrDisable`,
}; };

@ -1,179 +1,106 @@
<template> <template>
<div> <div>
<el-card shadow="hover" <el-card shadow="hover" class="mgb20">
class="mgb20">
<div class="flex-between"> <div class="flex-between">
<div class="per_title" <div class="per_title" v-preventReClick @click="goback(0)">
v-preventReClick
@click="goback(0)">
<i class="el-icon-arrow-left"></i> <i class="el-icon-arrow-left"></i>
<span class="per_back">返回</span> <span class="per_back">返回</span>
<span v-if="form.customerName || !customerId" <span v-if="form.customerName || !customerId" class="per_school"
class="per_school" v-text="isDetail ? form.customerName + '/查看' : (customerId ? form.customerName + '/编辑' : '新增')"></span>
v-text="isDetail ? form.customerName + '/查看' : (customerId ? form.customerName + '/编辑' : '新增')"></span>
</div> </div>
</div> </div>
</el-card> </el-card>
<el-card shadow="hover" <el-card shadow="hover" class="card">
class="card"> <div class="tabs" v-if="customerId">
<div class="tabs" <a class="item" v-for="(item, i) in tabs" :key="i" :class="{ active: i == curTab }" @click="tabChange(i)">{{
v-if="customerId"> item
<a class="item" }}</a>
v-for="(item, i) in tabs"
:key="i"
:class="{active: i == curTab}"
@click="tabChange(i)">{{ item }}</a>
</div> </div>
<div v-show="curTab === 'tab1'"> <div v-show="curTab === 'tab1'">
<el-form :model="form" <el-form :model="form" :rules="rules" ref="form" label-width="120px" class="flex-start-around info"
:rules="rules" :disabled="isDetail">
ref="form" <el-col :span="6" style="margin-right: 60px;">
label-width="120px" <el-form-item prop="countries" label="国家">
class="flex-start-around info" <el-select v-model="form.countries" clearable placeholder="请选择国家">
:disabled="isDetail"> <el-option v-for="(item, index) in countryList" :key="index" :label="item.name"
<el-col :span="6" :value="item.name"></el-option>
style="margin-right: 60px;">
<el-form-item prop="countries"
label="国家">
<el-select v-model="form.countries"
clearable
placeholder="请选择国家">
<el-option v-for="(item,index) in countryList"
:key="index"
:label="item.name"
:value="item.name"></el-option>
</el-select> </el-select>
</el-form-item> </el-form-item>
<el-form-item prop="schoolId" <el-form-item prop="schoolId" label="客户名称">
label="客户名称">
<div class="flex a-center"> <div class="flex a-center">
<el-select v-model="form.schoolId" <el-select v-model="form.schoolId" filterable clearable placeholder="请选择学校" :disabled="!!customerId"
filterable @change="SchoolChange" @clear="clearSchool">
clearable <el-option v-for="(item, index) in schoolList" :key="index" :label="item.schoolName"
placeholder="请选择学校" :value="item.schoolId"></el-option>
:disabled="!!customerId"
@change="SchoolChange"
@clear="clearSchool">
<el-option v-for="(item,index) in schoolList"
:key="index"
:label="item.schoolName"
:value="item.schoolId"></el-option>
</el-select> </el-select>
<!-- <i v-if="!isDetail" <!-- <i v-if="!isDetail"
class="el-icon-circle-plus-outline plus-cus" class="el-icon-circle-plus-outline plus-cus"
@click="addCustomer"></i> --> @click="addCustomer"></i> -->
<el-button v-if="!isDetail" <el-button v-if="!isDetail" style="margin-left: 5px" type="primary" size="mini"
style="margin-left: 5px" @click="setCustomer">设置</el-button>
type="primary"
size="mini"
@click="setCustomer">设置</el-button>
</div> </div>
</el-form-item> </el-form-item>
<el-form-item prop="cityId" <el-form-item prop="cityId" label="城市">
label="城市"> <el-select v-model="form.cityId" placeholder="" disabled>
<el-select v-model="form.cityId" <el-option v-for="(item, index) in cityList" :key="index" :label="item.cityName"
placeholder="" :value="item.cityId"></el-option>
disabled>
<el-option v-for="(item,index) in cityList"
:key="index"
:label="item.cityName"
:value="item.cityId"></el-option>
</el-select> </el-select>
</el-form-item> </el-form-item>
<el-form-item prop="industryId" <el-form-item prop="industryId" label="行业">
label="行业"> <el-select v-model="form.industryId" clearable placeholder="请选择行业"
<el-select v-model="form.industryId" :disabled="form.industryClassId ? false : true">
clearable <el-option v-for="(item, index) in industryList" :key="index" :label="item.industryName"
placeholder="请选择行业" :value="item.industryId"></el-option>
:disabled="form.industryClassId ? false : true">
<el-option v-for="(item,index) in industryList"
:key="index"
:label="item.industryName"
:value="item.industryId"></el-option>
</el-select> </el-select>
</el-form-item> </el-form-item>
<el-form-item prop="account" <el-form-item prop="account" label="账号">
label="账号"> <el-input placeholder="请输入账号" v-model.trim="form.account"></el-input>
<el-input placeholder="请输入账号"
v-model.trim="form.account"></el-input>
</el-form-item> </el-form-item>
<el-form-item label="职务"> <el-form-item label="职务">
<el-input placeholder="请输入职务名称" <el-input placeholder="请输入职务名称" v-model.trim="form.position" maxlength="11"></el-input>
v-model.trim="form.position"
maxlength="11"></el-input>
</el-form-item> </el-form-item>
<el-form-item label="产品到期时间"> <el-form-item label="产品到期时间">
<el-date-picker type="date" <el-date-picker type="date" disabled v-model="form.expireDate" style="width: 100%;"
disabled value-format="yyyy-MM-dd"></el-date-picker>
v-model="form.expireDate"
style="width: 100%;"
value-format="yyyy-MM-dd"></el-date-picker>
</el-form-item> </el-form-item>
</el-col> </el-col>
<el-col :span="6" <el-col :span="6" style="margin-left: 60px;">
style="margin-left: 60px;">
<el-form-item label="客户类型"> <el-form-item label="客户类型">
<el-select v-model="form.customerType" <el-select v-model="form.customerType" placeholder="下单后客户类型自动补充" disabled>
placeholder="下单后客户类型自动补充" <el-option v-for="(item, index) in customerTypeList" :key="index" :label="item.name"
disabled> :value="item.value"></el-option>
<el-option v-for="(item,index) in customerTypeList"
:key="index"
:label="item.name"
:value="item.value"></el-option>
</el-select> </el-select>
</el-form-item> </el-form-item>
<el-form-item prop="provinceId" <el-form-item prop="provinceId" label="省份">
label="省份"> <el-select v-model="form.provinceId" placeholder="" disabled>
<el-select v-model="form.provinceId" <el-option v-for="(item, index) in provinceList" :key="index" :label="item.provinceName"
placeholder="" :value="item.provinceId"></el-option>
disabled>
<el-option v-for="(item,index) in provinceList"
:key="index"
:label="item.provinceName"
:value="item.provinceId"></el-option>
</el-select> </el-select>
</el-form-item> </el-form-item>
<el-form-item prop="industryClassId" <el-form-item prop="industryClassId" label="行业类型">
label="行业类型"> <el-select v-model="form.industryClassId" clearable placeholder="请选择行业类型" @change="changIndustry"
<el-select v-model="form.industryClassId" @clear="clearIndustry()">
clearable <el-option v-for="(item, index) in IndustryClassList" :key="index" :label="item.industryClassName"
placeholder="请选择行业类型" :value="item.industryClassId"></el-option>
@change="changIndustry"
@clear="clearIndustry()">
<el-option v-for="(item,index) in IndustryClassList"
:key="index"
:label="item.industryClassName"
:value="item.industryClassId"></el-option>
</el-select> </el-select>
</el-form-item> </el-form-item>
<el-form-item prop="name" <el-form-item prop="name" label="联系人姓名">
label="联系人姓名"> <el-input placeholder="请输入联系人姓名" v-model.trim="form.name"></el-input>
<el-input placeholder="请输入联系人姓名"
v-model.trim="form.name"></el-input>
</el-form-item> </el-form-item>
<el-form-item prop="phone" <el-form-item prop="phone" label="手机号">
label="手机号"> <el-input placeholder="请输入联系人手机号" v-model.trim="form.phone" maxlength="11"></el-input>
<el-input placeholder="请输入联系人手机号"
v-model.trim="form.phone"
maxlength="11"></el-input>
</el-form-item> </el-form-item>
<el-form-item prop="email" <el-form-item prop="email" label="邮箱">
label="邮箱"> <el-input placeholder="请输入邮箱" v-model.trim="form.email"></el-input>
<el-input placeholder="请输入邮箱"
v-model.trim="form.email"></el-input>
</el-form-item> </el-form-item>
</el-col> </el-col>
</el-form> </el-form>
<div v-if="!isDetail" <div v-if="!isDetail" style="margin-top: 20px;text-align: center">
style="margin-top: 20px;text-align: center"> <el-button type="primary" v-preventReClick @click="saveAdd(0)">确定</el-button>
<el-button type="primary" <el-button v-preventReClick @click="$router.back()">取消</el-button>
v-preventReClick
@click="saveAdd(0)">确定</el-button>
<el-button v-preventReClick
@click="$router.back()">取消</el-button>
</div> </div>
</div> </div>
@ -182,69 +109,38 @@
<ul class="filter"> <ul class="filter">
<li> <li>
<label>产品分类</label> <label>产品分类</label>
<el-select v-model="form2.productType" <el-select v-model="form2.productType" placeholder="请选择产品类型" clearable @change="filterForm2">
placeholder="请选择产品类型" <el-option v-for="(item, index) in productTypeList" :key="index" :label="item.classificationName"
clearable :value="item.classificationId"></el-option>
@change="filterForm2">
<el-option v-for="(item,index) in productTypeList"
:key="index"
:label="item.classificationName"
:value="item.classificationId"></el-option>
</el-select> </el-select>
</li> </li>
<li> <li>
<label>订阅状态</label> <label>订阅状态</label>
<el-select v-model="form2.status" <el-select v-model="form2.status" placeholder="请选择订阅状态" @change="filterForm2">
placeholder="请选择订阅状态" <el-option v-for="(item, index) in subStatusList" :key="index" :label="item.name"
@change="filterForm2"> :value="item.name"></el-option>
<el-option v-for="(item,index) in subStatusList"
:key="index"
:label="item.name"
:value="item.name"></el-option>
</el-select> </el-select>
</li> </li>
<li> <li>
<el-input style="width: 250px;" <el-input style="width: 250px;" placeholder="请输入产品名称" prefix-icon="el-icon-search" clearable
placeholder="请输入产品名称" v-model="form2.keyword"></el-input>
prefix-icon="el-icon-search"
clearable
v-model="form2.keyword"></el-input>
</li> </li>
</ul> </ul>
<div> <div>
<el-button type="primary" <el-button type="primary" @click="exportList">导出列表</el-button>
@click="exportList">导出列表</el-button>
</div> </div>
</div> </div>
<el-table :data="products" <el-table :data="products" class="orderTable" stripe header-align="center"
class="orderTable" @selection-change="handleSelectionChange" row-key="id">
stripe <el-table-column type="selection" width="55" align="center" :reserve-selection="true"></el-table-column>
header-align="center" <el-table-column type="index" width="100" label="序号" align="center">
@selection-change="handleSelectionChange"
row-key="id">
<el-table-column type="selection"
width="55"
align="center"
:reserve-selection="true"></el-table-column>
<el-table-column type="index"
width="100"
label="序号"
align="center">
</el-table-column> </el-table-column>
<el-table-column prop="goodsName" <el-table-column prop="goodsName" label="产品名称" align="center"></el-table-column>
label="产品名称" <el-table-column prop="productTypeName" label="产品分类" align="center"></el-table-column>
align="center"></el-table-column> <el-table-column label="起止日期" align="center">
<el-table-column prop="productTypeName"
label="产品分类"
align="center"></el-table-column>
<el-table-column label="起止日期"
align="center">
<template slot-scope="scope"> <template slot-scope="scope">
{{ scope.row.status === '已过期' ? '' : scope.row.startAndEndTime }} {{ scope.row.status === '已过期' ? '' : scope.row.startAndEndTime }}
<el-tooltip v-if="scope.row.other" <el-tooltip v-if="scope.row.other" class="item" effect="dark" placement="top">
class="item"
effect="dark"
placement="top">
<div slot="content"> <div slot="content">
还有<span v-html="scope.row.other"></span><br>的订单还未生效 还有<span v-html="scope.row.other"></span><br>的订单还未生效
</div> </div>
@ -252,34 +148,23 @@
</el-tooltip> </el-tooltip>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column label="剩余期限" <el-table-column label="剩余期限" align="center">
align="center">
<template slot-scope="scope"> <template slot-scope="scope">
{{scope.row.remain}}&nbsp;&nbsp; {{ scope.row.remain }}&nbsp;&nbsp;
</template> </template>
</el-table-column> </el-table-column>
<el-table-column prop="status" <el-table-column prop="status" label="订阅状态" align="center"></el-table-column>
label="订阅状态" <el-table-column label="产品状态" align="center">
align="center"></el-table-column>
<el-table-column label="产品状态"
align="center">
<template slot-scope="scope"> <template slot-scope="scope">
<el-switch v-model="scope.row.isEnable" <el-switch v-model="scope.row.isEnable" :active-value="1" :inactive-value="0"
:active-value="1" :active-text="scope.row.isEnable ? '启用' : '禁用'" :disabled="scope.row.status === '已过期'"
:inactive-value="0" @change="switchOff($event, scope.row, scope.$index)"></el-switch>
:active-text="scope.row.isEnable ? '启用' : '禁用'"
:disabled="scope.row.status === '已过期'"
@change="switchOff($event,scope.row,scope.$index)"></el-switch>
</template> </template>
</el-table-column> </el-table-column>
</el-table> </el-table>
<div class="pagination"> <div class="pagination">
<el-pagination background <el-pagination background layout="total, prev, pager, next" @current-change="handleCurrentChangeProduct"
layout="total, prev, pager, next" :current-page="pageProduct" :page-size="pageSizeProduct" :total="totalProduct"></el-pagination>
@current-change="handleCurrentChangeProduct"
:current-page="pageProduct"
:page-size="pageSizeProduct"
:total="totalProduct"></el-pagination>
</div> </div>
</div> </div>
@ -288,68 +173,37 @@
<ul class="filter"> <ul class="filter">
<li> <li>
<label>订单类型</label> <label>订单类型</label>
<el-select v-model="form3.orderType" <el-select v-model="form3.orderType" clearable placeholder="请选择订单类型" @change="getOrder">
clearable <el-option v-for="(item, index) in orderTypeList" :key="index" :label="item.name"
placeholder="请选择订单类型" :value="item.value"></el-option>
@change="getOrder">
<el-option v-for="(item,index) in orderTypeList"
:key="index"
:label="item.name"
:value="item.value"></el-option>
</el-select> </el-select>
</li> </li>
<li> <li>
<label>订单状态</label> <label>订单状态</label>
<el-select v-model="form3.orderStatus" <el-select v-model="form3.orderStatus" clearable placeholder="请选择订单状态" @change="getOrder">
clearable <el-option v-for="(item, index) in orderStatusList" :key="index" :label="item.name"
placeholder="请选择订单状态" :value="item.id"></el-option>
@change="getOrder">
<el-option v-for="(item,index) in orderStatusList"
:key="index"
:label="item.name"
:value="item.id"></el-option>
</el-select> </el-select>
</li> </li>
</ul> </ul>
<div> <div>
<el-input style="width: 250px;" <el-input style="width: 250px;" placeholder="请输入订单编号、内容" prefix-icon="el-icon-search" clearable
placeholder="请输入订单编号、内容" v-model="form3.keyword"></el-input>
prefix-icon="el-icon-search"
clearable
v-model="form3.keyword"></el-input>
</div> </div>
</div> </div>
<el-table :data="orders" <el-table :data="orders" class="orderTable" stripe header-align="center"
class="orderTable" @selection-change="handleSelectionChange" row-key="orderId">
stripe <el-table-column type="selection" width="55" align="center" :reserve-selection="true"></el-table-column>
header-align="center" <el-table-column type="index" width="100" label="序号" align="center">
@selection-change="handleSelectionChange"
row-key="orderId">
<el-table-column type="selection"
width="55"
align="center"
:reserve-selection="true"></el-table-column>
<el-table-column type="index"
width="100"
label="序号"
align="center">
</el-table-column> </el-table-column>
<el-table-column prop="orderNumber" <el-table-column prop="orderNumber" label="订单编号" align="center"></el-table-column>
label="订单编号" <el-table-column prop="orderContent" label="订单内容" align="center">
align="center"></el-table-column>
<el-table-column prop="orderContent"
label="订单内容"
align="center">
<template slot-scope="scope"> <template slot-scope="scope">
<el-popover trigger="hover" <el-popover trigger="hover" placement="top" style='width: 500px'
placement="top" v-if='scope.row.orderContent.length > 14'>
style='width: 500px'
v-if='scope.row.orderContent.length >14'>
<p> {{ scope.row.orderContent }}</p> <p> {{ scope.row.orderContent }}</p>
<div slot="reference" <div slot="reference" class="name-wrapper">
class="name-wrapper"> <el-tag size="medium" class='tags'>{{ scope.row.orderContent }}</el-tag>
<el-tag size="medium"
class='tags'>{{ scope.row.orderContent }}</el-tag>
</div> </div>
</el-popover> </el-popover>
<span v-else> <span v-else>
@ -357,89 +211,53 @@
</span> </span>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column prop="orderAmount" <el-table-column prop="orderAmount" label="订单金额(元)" align="center"></el-table-column>
label="订单金额(元)" <el-table-column prop="createTime" label="订单日期" align="center"></el-table-column>
align="center"></el-table-column> <el-table-column prop="orderType" label="订单类型" align="center"></el-table-column>
<el-table-column prop="createTime" <el-table-column prop="orderStatus" label="订单状态" align="center"></el-table-column>
label="订单日期" <el-table-column label="操作" align="center">
align="center"></el-table-column>
<el-table-column prop="orderType"
label="订单类型"
align="center"></el-table-column>
<el-table-column prop="orderStatus"
label="订单状态"
align="center"></el-table-column>
<el-table-column label="操作"
align="center">
<template slot-scope="scope"> <template slot-scope="scope">
<el-button type="text" <el-button type="text" @click="toOrderDetail(scope.row)">订单详情</el-button>
@click="toOrderDetail(scope.row)">订单详情</el-button>
</template> </template>
</el-table-column> </el-table-column>
</el-table> </el-table>
<div class="pagination"> <div class="pagination">
<el-pagination background <el-pagination background layout="total, prev, pager, next" @current-change="handleCurrentChangeOrder"
layout="total, prev, pager, next" :current-page="pageOrder" :page-size="pageSizeOrder" :total="totalOrder"></el-pagination>
@current-change="handleCurrentChangeOrder"
:current-page="pageOrder"
:page-size="pageSizeOrder"
:total="totalOrder"></el-pagination>
</div> </div>
</div> </div>
<div v-show="curTab === 'tab4'"> <div v-show="curTab === 'tab4'">
<div class="tool"> <div class="tool">
<div> <div>
<el-input style="width: 350px;" <el-input style="width: 350px;" placeholder="请输入订单编号、合同名称、合同编号、产品内容" prefix-icon="el-icon-search"
placeholder="请输入订单编号、合同名称、合同编号、产品内容" clearable></el-input>
prefix-icon="el-icon-search"
clearable></el-input>
</div> </div>
</div> </div>
<el-table :data="contractInformations" <el-table :data="contractInformations" class="table" stripe header-align="center">
class="table" <el-table-column type="index" width="100" label="序号" align="center">
stripe
header-align="center">
<el-table-column type="index"
width="100"
label="序号"
align="center">
</el-table-column> </el-table-column>
<el-table-column prop="contractNumber" <el-table-column prop="contractNumber" label="订单号" align="center"></el-table-column>
label="订单号" <el-table-column prop="contractNumber" label="合同编号" align="center"></el-table-column>
align="center"></el-table-column> <el-table-column prop="contractName" label="合同名称" align="center">
<el-table-column prop="contractNumber"
label="合同编号"
align="center"></el-table-column>
<el-table-column prop="contractName"
label="合同名称"
align="center">
</el-table-column> </el-table-column>
<el-table-column prop="endTime" <el-table-column prop="endTime" label="合同期限" align="center">
label="合同期限"
align="center">
<template slot-scope="scope"> <template slot-scope="scope">
{{scope.row.startTime?scope.row.startTime.split(' ').shift():''}}&nbsp;&nbsp;&nbsp;-&nbsp;&nbsp;&nbsp;{{scope.row.endTime?scope.row.endTime.split(' ').shift():''}} {{ scope.row.startTime ? scope.row.startTime.split('').shift() : ''
}}&nbsp;&nbsp;&nbsp;-&nbsp;&nbsp;&nbsp;{{ scope.row.endTime ? scope.row.endTime.split('').shift() : '' }}
</template> </template>
</el-table-column> </el-table-column>
<el-table-column prop="dataOrCourseName" <el-table-column prop="dataOrCourseName" label="产品内容" align="center">
label="产品内容"
align="center">
</el-table-column> </el-table-column>
<el-table-column prop="contractMoney" <el-table-column prop="contractMoney" label="合同金额" align="center">
label="合同金额"
align="center">
<template slot-scope="scope"> <template slot-scope="scope">
{{scope.row.contractMoney}}&nbsp;&nbsp; {{ scope.row.contractMoney }}&nbsp;&nbsp;
</template> </template>
</el-table-column> </el-table-column>
<el-table-column label="操作" <el-table-column label="操作" align="center">
align="center">
<template slot-scope="scope"> <template slot-scope="scope">
<el-button type="text" <el-button type="text" @click="showContract(scope.row)">查看</el-button>
@click="showContract(scope.row)">查看</el-button> <el-button type="text" @click="showContract(scope.row)">下载</el-button>
<el-button type="text"
@click="showContract(scope.row)">下载</el-button>
</template> </template>
</el-table-column> </el-table-column>
</el-table> </el-table>
@ -448,196 +266,110 @@
<div v-show="curTab === 'tab5'"> <div v-show="curTab === 'tab5'">
<div class="tool"> <div class="tool">
<div> <div>
<el-input style="width: 300px;" <el-input style="width: 300px;" placeholder="请输入商务经理、手机号" prefix-icon="el-icon-search" clearable
placeholder="请输入商务经理、手机号" v-model="bmsKeyword"></el-input>
prefix-icon="el-icon-search"
clearable
v-model="bmsKeyword"></el-input>
</div> </div>
</div> </div>
<el-table :data="bms" <el-table :data="bms" class="table" stripe header-align="center">
class="table" <el-table-column type="index" width="100" label="序号" align="center"></el-table-column>
stripe <el-table-column prop="userName" label="姓名" width="200" align="center">
header-align="center">
<el-table-column type="index"
width="100"
label="序号"
align="center"></el-table-column>
<el-table-column prop="userName"
label="姓名"
width="200"
align="center">
<template slot-scope="scope"> <template slot-scope="scope">
{{ scope.row.userName }}{{ scope.row.peopleDel ? '(已被删除)' : '' }} {{ scope.row.userName }}{{ scope.row.peopleDel ? '(已被删除)' : '' }}
</template> </template>
</el-table-column> </el-table-column>
<el-table-column prop="phone" <el-table-column prop="phone" label="手机号" width="150" align="center"></el-table-column>
label="手机号" <el-table-column prop="bmName" label="所属团队" align="center">
width="150"
align="center"></el-table-column>
<el-table-column prop="bmName"
label="所属团队"
align="center">
<template slot-scope="scope"> <template slot-scope="scope">
<div v-html="scope.row.bmName"></div> <div v-html="scope.row.bmName"></div>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column prop="quantityOfOrder" <el-table-column prop="quantityOfOrder" label="订单数量" width="100" align="center"></el-table-column>
label="订单数量" <el-table-column prop="latestTime" label="最近下单时间" width="200" align="center"></el-table-column>
width="100" <el-table-column prop="productName" label="产品" align="center" show-overflow-tooltip></el-table-column>
align="center"></el-table-column> <el-table-column label="操作" width="120" align="center">
<el-table-column prop="latestTime"
label="最近下单时间"
width="200"
align="center"></el-table-column>
<el-table-column prop="productName"
label="产品"
align="center"
show-overflow-tooltip></el-table-column>
<el-table-column label="操作"
width="120"
align="center">
<template slot-scope="scope"> <template slot-scope="scope">
<el-button type="text" <el-button type="text" @click="toOrder(scope.row)">查看</el-button>
@click="toOrder(scope.row)">查看</el-button>
</template> </template>
</el-table-column> </el-table-column>
</el-table> </el-table>
<div class="pagination"> <div class="pagination">
<el-pagination background <el-pagination background layout="total, prev, pager, next" @current-change="handleCurrentChangeBm"
layout="total, prev, pager, next" :current-page="pageBm" :page-size="pageSizeBm" :total="totalBm"></el-pagination>
@current-change="handleCurrentChangeBm"
:current-page="pageBm"
:page-size="pageSizeBm"
:total="totalBm"></el-pagination>
</div> </div>
</div> </div>
</el-card> </el-card>
<el-dialog :visible.sync="showImg" <el-dialog :visible.sync="showImg" width="70%" center>
width="70%" <img :src="fileSrc" width="100%" alt="">
center>
<img :src="fileSrc"
width="100%"
alt="">
</el-dialog> </el-dialog>
<el-dialog :title="curRow ? '编辑客户' : '添加客户'" <el-dialog :title="curRow ? '编辑客户' : '添加客户'" :visible.sync="customerVisible" width="300px" class="dialog"
:visible.sync="customerVisible" :close-on-click-modal="false">
width="300px"
class="dialog"
:close-on-click-modal="false">
<el-form label-width="70px"> <el-form label-width="70px">
<el-form-item label="客户名称"> <el-form-item label="客户名称">
<el-input v-model="customerForm.schoolName" <el-input v-model="customerForm.schoolName" placeholder="请输入客户名称"></el-input>
placeholder="请输入客户名称"></el-input>
</el-form-item> </el-form-item>
<el-form-item prop="userName" <el-form-item prop="userName" label="省份">
label="省份"> <el-select v-model="customerForm.provinceId" placeholder="请选择省份" @change="provinceChange">
<el-select v-model="customerForm.provinceId" <el-option v-for="(item, index) in provinceList" :key="index" :label="item.provinceName"
placeholder="请选择省份" :value="item.provinceId"></el-option>
@change="provinceChange">
<el-option v-for="(item,index) in provinceList"
:key="index"
:label="item.provinceName"
:value="item.provinceId"></el-option>
</el-select> </el-select>
</el-form-item> </el-form-item>
<el-form-item prop="userName" <el-form-item prop="userName" label="城市">
label="城市"> <el-select v-model="customerForm.cityId" placeholder="请选择城市"
<el-select v-model="customerForm.cityId" :disabled="customerForm.provinceId ? false : true">
placeholder="请选择城市" <el-option v-for="(item, index) in cities" :key="index" :label="item.cityName"
:disabled="customerForm.provinceId ? false : true"> :value="item.cityId"></el-option>
<el-option v-for="(item,index) in cities"
:key="index"
:label="item.cityName"
:value="item.cityId"></el-option>
</el-select> </el-select>
</el-form-item> </el-form-item>
</el-form> </el-form>
<span slot="footer" <span slot="footer" class="dialog-footer">
class="dialog-footer">
<el-button @click="customerVisible = false">取消</el-button> <el-button @click="customerVisible = false">取消</el-button>
<el-button type="primary" <el-button type="primary" @click="submitCustomer">确定</el-button>
@click="submitCustomer">确定</el-button>
</span> </span>
</el-dialog> </el-dialog>
<el-dialog title="客户设置" <el-dialog title="客户字典设置" :visible.sync="customerListVisible" width="800px" class="dialog"
:visible.sync="customerListVisible" :close-on-click-modal="false" custom-class="customer-dia">
width="800px"
class="dialog"
:close-on-click-modal="false"
custom-class="customer-dia">
<div style="display: flex;justify-content: space-between;align-items: center;margin-bottom: 10px"> <div style="display: flex;justify-content: space-between;align-items: center;margin-bottom: 10px">
<el-input style="width: 200px;" <el-input style="width: 200px;" placeholder="请输入客户名称" prefix-icon="el-icon-search" v-model="customerKeyword"
placeholder="请输入客户名称" clearable></el-input>
prefix-icon="el-icon-search" <i class="el-icon-circle-plus plus-cus" @click="addCustomer"></i>
v-model="customerKeyword"
clearable></el-input>
<i class="el-icon-circle-plus plus-cus"
@click="addCustomer"></i>
</div> </div>
<el-table :data="customers" <el-table :data="customers" class="table" ref="table" stripe header-align="center" row-key="customerId">
class="table" <el-table-column type="index" width="100" label="序号" align="center">
ref="table"
stripe
header-align="center"
row-key="customerId">
<el-table-column type="index"
width="100"
label="序号"
align="center">
<template slot-scope="scope"> <template slot-scope="scope">
{{scope.$index + (pageCustomer - 1) * pageSizeCustomer + 1}} {{ scope.$index + (pageCustomer - 1) * pageSizeCustomer + 1 }}
</template> </template>
</el-table-column> </el-table-column>
<el-table-column prop="customerName" <el-table-column prop="customerName" label="客户名称" align="center">
label="客户名称"
align="center">
<template slot-scope="scope"> <template slot-scope="scope">
{{ scope.row.customerName || scope.row.schoolName }} {{ scope.row.customerName || scope.row.schoolName }}
</template> </template>
</el-table-column> </el-table-column>
<el-table-column prop="provinceName" <el-table-column prop="provinceName" label="省份" align="center">
label="省份"
align="center">
</el-table-column> </el-table-column>
<el-table-column prop="cityName" <el-table-column prop="cityName" label="城市" align="center">
label="城市"
align="center">
</el-table-column> </el-table-column>
<el-table-column prop="countries" <el-table-column prop="countries" label="是否为客户" align="center">
label="是否创建"
align="center">
<template slot-scope="scope"> <template slot-scope="scope">
{{ scope.row.bindOrNot ? '是' : '否' }} {{ scope.row.bindOrNot ? '是' : '否' }}
</template> </template>
</el-table-column> </el-table-column>
<el-table-column label="操作" <el-table-column label="操作" width="100" align="center">
width="100"
align="center">
<template slot-scope="scope"> <template slot-scope="scope">
<i class="el-icon-edit icon" <i class="el-icon-edit icon" @click="editCustomer(scope.row)"></i>
@click="editCustomer(scope.row)"></i> <i v-if="!scope.row.bindOrNot" class="el-icon-delete icon" @click="delCustomer(scope.row, i)"></i>
<i v-if="!scope.row.bindOrNot"
class="el-icon-delete icon"
@click="delCustomer(scope.row, i)"></i>
</template> </template>
</el-table-column> </el-table-column>
</el-table> </el-table>
<div class="pagination"> <div class="pagination">
<el-pagination background <el-pagination background layout="total, prev, pager, next" :total="totalCustomer"
layout="total, prev, pager, next" @current-change="handleCurrentChangeCustomer" :current-page="pageCustomer" :page-size="pageSizeCustomer">
:total="totalCustomer"
@current-change="handleCurrentChangeCustomer"
:current-page="pageCustomer"
:page-size="pageSizeCustomer">
</el-pagination> </el-pagination>
</div> </div>
</el-dialog> </el-dialog>
<pdf :visible.sync="pdfVisible" <pdf :visible.sync="pdfVisible" :src.sync="fileSrc"></pdf>
:src.sync="fileSrc"></pdf>
</div> </div>
</template> </template>
@ -1514,59 +1246,69 @@ export default {
<style lang="scss" scoped> <style lang="scss" scoped>
.tabs { .tabs {
margin-bottom: 30px; margin-bottom: 30px;
} }
.card { .card {
min-height: calc(100vh - 260px); min-height: calc(100vh - 260px);
margin-bottom: 20px; margin-bottom: 20px;
} }
.addhr_tag { .addhr_tag {
background-color: #666; background-color: #666;
width: 6px; width: 6px;
height: 17px; height: 17px;
margin-right: 5px; margin-right: 5px;
} }
.radio_icon { .radio_icon {
font-size: 26px; font-size: 26px;
color: #9278ff; color: #9278ff;
} }
/deep/.warning { /deep/.warning {
margin-left: 5px; margin-left: 5px;
color: #9278ff; color: #9278ff;
} }
.tags { .tags {
border: none; border: none;
background: none; background: none;
color: #000; color: #000;
white-space: pre-wrap; white-space: pre-wrap;
overflow: hidden; overflow: hidden;
text-overflow: ellipsis; text-overflow: ellipsis;
display: -webkit-box; display: -webkit-box;
-webkit-line-clamp: 2; -webkit-line-clamp: 2;
line-clamp: 2; line-clamp: 2;
-webkit-box-orient: vertical; -webkit-box-orient: vertical;
} }
.info { .info {
margin-top: 20px; margin-top: 20px;
.el-select {
width: 100%; .el-select {
} width: 100%;
}
} }
.plus-cus { .plus-cus {
margin-left: 10px; margin-left: 10px;
font-size: 18px; font-size: 18px;
color: #9076ff; color: #9076ff;
cursor: pointer; cursor: pointer;
} }
/deep/.customer-dia { /deep/.customer-dia {
.icon { .icon {
margin-right: 10px; margin-right: 10px;
font-size: 16px; font-size: 16px;
color: #7a7a7a; color: #7a7a7a;
cursor: pointer; cursor: pointer;
&:hover {
color: #9076ff; &:hover {
} color: #9076ff;
} }
}
} }
</style> </style>

@ -1,7 +1,6 @@
<template> <template>
<div v-loading="loading"> <div v-loading="loading">
<el-card shadow="hover" <el-card shadow="hover" class="mgb20">
class="mgb20">
<div> <div>
<div class="flex-center mgb20"> <div class="flex-center mgb20">
<p class="hr_tag"></p> <p class="hr_tag"></p>
@ -11,50 +10,34 @@
<el-form label-width="80px"> <el-form label-width="80px">
<el-col :span="4"> <el-col :span="4">
<el-form-item label="省份"> <el-form-item label="省份">
<el-select v-model="form.provinces" <el-select v-model="form.provinces" clearable placeholder="请选择省份" @change="getCity"
clearable @clear="clearprovince">
placeholder="请选择省份" <el-option v-for="(item, index) in provinceList" :key="index" :label="item.provinceName"
@change="getCity" :value="item.provinceId"></el-option>
@clear="clearprovince">
<el-option v-for="(item,index) in provinceList"
:key="index"
:label="item.provinceName"
:value="item.provinceId"></el-option>
</el-select> </el-select>
</el-form-item> </el-form-item>
</el-col> </el-col>
<el-col :span="4"> <el-col :span="4">
<el-form-item label="城市"> <el-form-item label="城市">
<el-select v-model="form.city" <el-select v-model="form.city" clearable placeholder="请选择城市" :disabled="form.provinces ? false : true"
clearable @change="initData">
placeholder="请选择城市" <el-option v-for="(item, index) in cityList" :key="index" :label="item.cityName"
:disabled="form.provinces ? false : true" :value="item.cityId"></el-option>
@change="initData">
<el-option v-for="(item,index) in cityList"
:key="index"
:label="item.cityName"
:value="item.cityId"></el-option>
</el-select> </el-select>
</el-form-item> </el-form-item>
</el-col> </el-col>
<el-col :span="4"> <el-col :span="4">
<el-form-item label="客户类型"> <el-form-item label="客户类型">
<el-select v-model="form.customerType" <el-select v-model="form.customerType" placeholder="请选择客户类型" @change="initData">
placeholder="请选择客户类型" <el-option v-for="(item, index) in customerTypeList" :key="index" :label="item.name"
@change="initData"> :value="item.value"></el-option>
<el-option v-for="(item,index) in customerTypeList"
:key="index"
:label="item.name"
:value="item.value"></el-option>
</el-select> </el-select>
</el-form-item> </el-form-item>
</el-col> </el-col>
<el-col :span="6"> <el-col :span="6">
<el-form-item> <el-form-item>
<el-input placeholder="支持客户,联系人,账号搜索" <el-input placeholder="支持客户,联系人,账号搜索" prefix-icon="el-icon-search" v-model="form.keyword"
prefix-icon="el-icon-search" clearable></el-input>
v-model="form.keyword"
clearable></el-input>
</el-form-item> </el-form-item>
</el-col> </el-col>
</el-form> </el-form>
@ -62,110 +45,61 @@
</div> </div>
</el-card> </el-card>
<el-card shadow="hover" <el-card shadow="hover" class="card">
class="card">
<div class="flex-between mgb20"> <div class="flex-between mgb20">
<div class="flex-center"> <div class="flex-center">
<p class="hr_tag"></p> <p class="hr_tag"></p>
<span>客户列表</span> <span>客户列表</span>
</div> </div>
<div> <div>
<el-button type="primary" <el-button type="primary" round class="mag" @click="exportData">导出客户列表</el-button>
round <el-button type="primary" round class="mag" @click="addcustomer" v-auth>新增</el-button>
class="mag" <el-button type="primary" round @click="delAllSelection" v-auth>批量删除</el-button>
@click="exportData">导出客户列表</el-button>
<el-button type="primary"
round
class="mag"
@click="addcustomer"
v-auth>新增</el-button>
<el-button type="primary"
round
@click="delAllSelection"
v-auth>批量删除</el-button>
</div> </div>
</div> </div>
<el-table :data="listData" <el-table :data="listData" class="table" ref="table" stripe header-align="center"
class="table" @selection-change="handleSelectionChange" row-key="customerId">
ref="table" <el-table-column type="selection" width="55" align="center" :reserve-selection="true"></el-table-column>
stripe <el-table-column type="index" width="100" label="序号" align="center">
header-align="center"
@selection-change="handleSelectionChange"
row-key="customerId">
<el-table-column type="selection"
width="55"
align="center"
:reserve-selection="true"></el-table-column>
<el-table-column type="index"
width="100"
label="序号"
align="center">
<template slot-scope="scope"> <template slot-scope="scope">
{{scope.$index + (page - 1) * pageSize + 1}} {{ scope.$index + (page - 1) * pageSize + 1 }}
</template> </template>
</el-table-column> </el-table-column>
<el-table-column prop="customerName" <el-table-column prop="customerName" label="客户名称" align="center">
label="客户名称"
align="center">
</el-table-column> </el-table-column>
<el-table-column label="行业" <el-table-column label="行业" align="center">
align="center">
<template slot-scope="scope"> <template slot-scope="scope">
<span class="ellipsis">{{scope.row.industryName}}</span> <span class="ellipsis">{{ scope.row.industryName }}</span>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column prop="countries" <el-table-column prop="countries" label="客户类型" align="center">
label="客户类型"
align="center">
<template slot-scope="scope"> <template slot-scope="scope">
<span v-if="scope.row.customerType">{{ customerTypeList.find(e => e.value == scope.row.customerType).name }}</span> <span v-if="scope.row.customerType">{{ customerTypeList.find(e => e.value == scope.row.customerType).name
}}</span>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column prop="provinceName" <el-table-column prop="provinceName" label="省份" align="center">
label="省份"
align="center">
</el-table-column> </el-table-column>
<el-table-column prop="cityName" <el-table-column prop="cityName" label="城市" align="center">
label="城市"
align="center">
</el-table-column> </el-table-column>
<el-table-column prop="name" <el-table-column prop="name" label="联系人" align="center">
label="联系人"
align="center">
</el-table-column> </el-table-column>
<el-table-column prop="account" <el-table-column prop="account" label="账号" align="center">
label="账号"
align="center">
</el-table-column> </el-table-column>
<el-table-column prop="loginNumber" <el-table-column prop="loginNumber" label="登录次数" align="center">
label="登录次数"
align="center">
</el-table-column> </el-table-column>
<el-table-column label="操作" <el-table-column label="操作" width="270" align="center">
width="270"
align="center">
<template slot-scope="scope"> <template slot-scope="scope">
<el-button type="text" <el-button type="text" @click="resetPassword(scope.row)" v-auth>重置密码</el-button>
@click="resetPassword(scope.row)" <el-button type="text" @click="show(scope.row)" v-auth>查看</el-button>
v-auth>重置密码</el-button> <el-button type="text" @click="edit(scope.row)" v-auth>管理</el-button>
<el-button type="text" <el-button type="text" @click="handleDelete(scope.row)" v-auth>删除</el-button>
@click="show(scope.row)"
v-auth>查看</el-button>
<el-button type="text"
@click="edit(scope.row)"
v-auth>管理</el-button>
<el-button type="text"
@click="handleDelete(scope.row)"
v-auth>删除</el-button>
</template> </template>
</el-table-column> </el-table-column>
</el-table> </el-table>
<div class="pagination"> <div class="pagination">
<el-pagination background <el-pagination background layout="total, prev, pager, next" :total="total" @current-change="handleCurrentChange"
layout="total, prev, pager, next" :current-page="page">
:total="total"
@current-change="handleCurrentChange"
:current-page="page">
</el-pagination> </el-pagination>
</div> </div>
</el-card> </el-card>
@ -401,7 +335,6 @@ export default {
<style lang="scss" scoped> <style lang="scss" scoped>
.card { .card {
min-height: calc(100vh - 300px); min-height: calc(100vh - 300px);
} }
</style> </style>

@ -1,56 +1,38 @@
<template> <template>
<div> <div>
<el-card v-if="!id" <el-card v-if="!id" shadow="hover" class="m-b-20">
shadow="hover"
class="m-b-20">
<div class="flex-between"> <div class="flex-between">
<el-page-header @back="back" <el-page-header @back="back" :content="'创建赛事'"></el-page-header>
:content="'创建赛事'"></el-page-header>
</div> </div>
</el-card> </el-card>
<div v-if="step === 1 || (id && !editing)" <div v-if="step === 1 || (id && !editing)" :class="['type-wrap', { pd: !id }]">
:class="['type-wrap', {pd: !id}]">
<div class="p-title">大赛发布类型</div> <div class="p-title">大赛发布类型</div>
<el-form label-width="100px" <el-form label-width="100px" label-suffix=":" size="small" :disabled="!editing && id != ''">
label-suffix=":"
size="small"
:disabled="!editing && id != ''">
<el-form-item label="请选择类型"> <el-form-item label="请选择类型">
<el-radio v-model="releaseType" <el-radio v-model="releaseType" :label="0">仅发布信息</el-radio>
:label="0">仅发布信息</el-radio> <el-radio v-model="releaseType" :label="1">设置完整比赛</el-radio>
<el-radio v-model="releaseType"
:label="1">设置完整比赛</el-radio>
</el-form-item> </el-form-item>
</el-form> </el-form>
<el-button v-if="!editing && id" <el-button v-if="!editing && id" class="edit" type="primary" @click="editing = 1"
class="edit" v-auth="'/match:管理:大赛详情:编辑'">编辑</el-button>
type="primary"
@click="editing = 1"
v-auth="'/match:管理:大赛详情:编辑'">编辑</el-button>
</div> </div>
<el-card v-if="step !== 4" <el-card v-if="step !== 4" shadow="hover" class="m-b-20" style="position: relative;margin-top: 20px">
shadow="hover" <ul :class="['steps', { pointer: !editing && id && publishStatus }]">
class="m-b-20" <li :class="{ active: step === 1, done: step > 1 }" @click="toStep(1)">
style="position: relative;margin-top: 20px">
<ul :class="['steps', {pointer: !editing && id && publishStatus}]">
<li :class="{active: step === 1,done: step > 1}"
@click="toStep(1)">
<span class="circle">1</span> <span class="circle">1</span>
<p class="text">大赛信息填写</p> <p class="text">大赛信息填写</p>
</li> </li>
<template v-if="releaseType"> <template v-if="releaseType">
<li :class="{active: step === 2,done: step > 2}" <li :class="{ active: step === 2, done: step > 2 }" @click="toStep(2)">
@click="toStep(2)">
<span class="circle circle2">2</span> <span class="circle circle2">2</span>
<p class="text">赛程与规则设置</p> <p class="text">赛程与规则设置</p>
</li> </li>
<li :class="{active: step === 3,done: step > 3}" <li :class="{ active: step === 3, done: step > 3 }" @click="toStep(3)">
@click="toStep(3)">
<span class="circle circle3">3</span> <span class="circle circle3">3</span>
<p class="text">比赛内容设置</p> <p class="text">比赛内容设置</p>
</li> </li>
</template> </template>
<li :class="{done: step > 3}"> <li :class="{ done: step > 3 }">
<span class="circle circle4">{{ releaseType ? 4 : 2 }}</span> <span class="circle circle4">{{ releaseType ? 4 : 2 }}</span>
<p class="text">发布{{ !editing && id ? '成功' : '' }}</p> <p class="text">发布{{ !editing && id ? '成功' : '' }}</p>
</li> </li>
@ -58,43 +40,21 @@
</el-card> </el-card>
<div class="page"> <div class="page">
<div class="page-content"> <div class="page-content">
<step1 v-show="step === 1" <step1 v-show="step === 1" ref="step1" :editing.sync="editing" @next="next" />
ref="step1" <step2 v-if="step === 2" ref="step2" :editing.sync="editing" :setupId.sync="setupId" @next="next" />
:editing.sync="editing" <step3 v-if="step === 3" ref="step3" :editing.sync="editing" :setupId.sync="setupId"
@next="next" /> :competitionId.sync="competitionId" @next="next" />
<step2 v-if="step === 2" <step4 v-if="step === 4" ref="step4" />
ref="step2"
:editing.sync="editing"
:setupId.sync="setupId"
@next="next" />
<step3 v-if="step === 3"
ref="step3"
:editing.sync="editing"
:setupId.sync="setupId"
:competitionId.sync="competitionId"
@next="next" />
<step4 v-if="step === 4"
ref="step4" />
<div v-if="step !== 4 && showBtns" <div v-if="step !== 4 && showBtns" class="btns">
class="btns">
<!-- 处于编辑状态(列表点编辑按钮进来默认是查看状态不可编辑点了编辑按钮才可编辑)或者新增才显示这几个按钮 --> <!-- 处于编辑状态(列表点编辑按钮进来默认是查看状态不可编辑点了编辑按钮才可编辑)或者新增才显示这几个按钮 -->
<template v-if="editing || !id"> <template v-if="editing || !id">
<el-button v-if="!publishStatus" <el-button v-if="!publishStatus" @click="save(0)">保存{{ releaseType ? '草稿' : '' }}</el-button>
@click="save(0)">保存{{ releaseType ? '草稿' : '' }}</el-button> <el-button v-if="step === 2 || step === 3" type="primary" @click="prev">上一步</el-button>
<el-button v-if="step === 2 || step === 3" <el-button v-if="!releaseType || (releaseType && step === 3)" type="primary" @click="save(1)">发布</el-button>
type="primary" <el-button v-else type="primary" @click="save(0, 2)">保存并下一步</el-button>
@click="prev">上一步</el-button>
<el-button v-if="!releaseType || (releaseType && step === 3)"
type="primary"
@click="save(1)">发布</el-button>
<el-button v-else
type="primary"
@click="save(0, 2)">保存并下一步</el-button>
</template> </template>
<el-button type="danger" <el-button type="danger" @click="preview" v-auth="'/match:管理:大赛详情:预览'">预览</el-button>
@click="preview"
v-auth="'/match:管理:大赛详情:预览'">预览</el-button>
<el-button @click="cancel">{{ editing ? '取消' : '返回' }}</el-button> <el-button @click="cancel">{{ editing ? '取消' : '返回' }}</el-button>
</div> </div>
</div> </div>
@ -261,87 +221,103 @@ export default {
<style scoped lang="scss"> <style scoped lang="scss">
.type-wrap { .type-wrap {
position: relative; position: relative;
margin-top: 20px; margin-top: 20px;
background: #fff; background: #fff;
&.pd {
padding: 15px; &.pd {
} padding: 15px;
}
} }
.edit { .edit {
position: absolute; position: absolute;
top: 30px; top: 30px;
right: 30px; right: 30px;
} }
.el-steps { .el-steps {
justify-content: center; justify-content: center;
} }
.steps { .steps {
display: flex; display: flex;
justify-content: center; justify-content: center;
&.pointer {
li { &.pointer {
cursor: pointer;
}
}
li { li {
position: relative; cursor: pointer;
margin-right: 100px;
text-align: center;
} }
.circle { }
display: inline-flex;
justify-content: center; li {
align-items: center; position: relative;
width: 35px; margin-right: 100px;
margin: 0 auto 10px; text-align: center;
line-height: 35px; }
font-size: 18px;
color: #333; .circle {
background: #f9f9f9; display: inline-flex;
border: 5px solid #e1e1e1; justify-content: center;
border-radius: 50%; align-items: center;
&:after { width: 35px;
content: ''; margin: 0 auto 10px;
position: absolute; line-height: 35px;
left: 64px; font-size: 18px;
width: 146px; color: #333;
height: 3px; background: #f9f9f9;
background: #e1e1e1; border: 5px solid #e1e1e1;
} border-radius: 50%;
&:after {
content: '';
position: absolute;
left: 64px;
width: 146px;
height: 3px;
background: #e1e1e1;
} }
.active { }
.circle {
color: #fff; .active {
border-color: #459ffb; .circle {
background: #007eff; color: #fff;
} border-color: #459ffb;
.text { background: #007eff;
color: #007eff;
}
} }
.done {
.circle { .text {
color: #fff; color: #007eff;
background: #9c86ff;
border-color: #bbacff;
&:after {
background: #bbacff;
}
}
.text {
color: #9178ff;
}
} }
.circle2:after { }
left: 71px;
width: 147px; .done {
.circle {
color: #fff;
background: #9c86ff;
border-color: #bbacff;
&:after {
background: #bbacff;
}
} }
.circle4:after {
display: none; .text {
color: #9178ff;
} }
}
.circle2:after {
left: 71px;
width: 147px;
}
.circle4:after {
display: none;
}
} }
.btns { .btns {
text-align: center; text-align: center;
} }
</style> </style>

@ -3,82 +3,47 @@
<div class="page"> <div class="page">
<div class="page-content"> <div class="page-content">
<div class="p-title">大赛信息</div> <div class="p-title">大赛信息</div>
<el-form label-width="170px" <el-form label-width="170px" label-suffix=":" size="small" :disabled="!editing && form.id !== ''">
label-suffix=":"
size="small"
:disabled="!editing && form.id !== ''">
<el-form-item label="竞赛封面(选填)"> <el-form-item label="竞赛封面(选填)">
<el-upload class="avatar-uploader" <el-upload class="avatar-uploader" accept=".jpg,.png,.jpeg,.gif" :on-remove="handleRemove"
accept=".jpg,.png,.jpeg,.gif" :on-error="uploadError" :before-remove="beforeRemove" :limit="1" :on-exceed="handleExceed" action=""
:on-remove="handleRemove" :http-request="handleRequest">
:on-error="uploadError" <img v-if="form.coverUrl" :src="form.coverUrl" class="avatar">
:before-remove="beforeRemove" <div class="uploader-default" v-else>
:limit="1"
:on-exceed="handleExceed"
action=""
:http-request="handleRequest">
<img v-if="form.coverUrl"
:src="form.coverUrl"
class="avatar">
<div class="uploader-default"
v-else>
<i class="el-icon-plus"></i> <i class="el-icon-plus"></i>
<p>上传封面</p> <p>上传封面</p>
</div> </div>
<div slot="tip" <div slot="tip" class="el-upload__tip">
class="el-upload__tip">
<p>展示宽度为220高度140JPG/PNG/GIF3MB以内</p> <p>展示宽度为220高度140JPG/PNG/GIF3MB以内</p>
</div> </div>
</el-upload> </el-upload>
</el-form-item> </el-form-item>
<el-form-item label="竞赛封面长图(选填)"> <el-form-item label="竞赛封面长图(选填)">
<el-upload class="avatar-uploader avatar-uploader-lg" <el-upload class="avatar-uploader avatar-uploader-lg" accept=".jpg,.png,.jpeg,.gif"
accept=".jpg,.png,.jpeg,.gif" :on-remove="handleLgRemove" :on-error="uploadError" :before-remove="beforeRemove" :limit="1"
:on-remove="handleLgRemove" :on-exceed="handleExceed" action="" :http-request="handleRequestLg">
:on-error="uploadError" <img v-if="form.carouselUrl" :src="form.carouselUrl" class="avatar-lg">
:before-remove="beforeRemove" <div class="uploader-default" v-else>
:limit="1"
:on-exceed="handleExceed"
action=""
:http-request="handleRequestLg">
<img v-if="form.carouselUrl"
:src="form.carouselUrl"
class="avatar-lg">
<div class="uploader-default"
v-else>
<i class="el-icon-plus"></i> <i class="el-icon-plus"></i>
<p>上传封面</p> <p>上传封面</p>
</div> </div>
<div slot="tip" <div slot="tip" class="el-upload__tip">
class="el-upload__tip">
<p>展示宽度为1920高度300JPG/PNG/GIF3MB以内</p> <p>展示宽度为1920高度300JPG/PNG/GIF3MB以内</p>
</div> </div>
</el-upload> </el-upload>
</el-form-item> </el-form-item>
<el-form-item class="req" <el-form-item class="req" label="竞赛名称">
label="竞赛名称">
<div class="d-inline-block"> <div class="d-inline-block">
<el-input placeholder="请输入竞赛名称" <el-input placeholder="请输入竞赛名称" v-model="form.name" clearable></el-input>
v-model="form.name"
clearable></el-input>
</div> </div>
</el-form-item> </el-form-item>
<el-form-item class="req" <el-form-item class="req" label="主办方">
label="主办方">
<div class="inline-input"> <div class="inline-input">
<div class="input-wrap" <div class="input-wrap" v-for="(item, index) in sponsorList" :key="index">
v-for="(item,index) in sponsorList" <el-input placeholder="主办方名称" v-model="sponsorList[index]"></el-input>
:key="index"> <i v-if="sponsorList.length > 1" class="remove" @click="delSponsor(index)"></i>
<el-input placeholder="主办方名称" <button v-if="index == 0" class="add-btn" type="button" :disabled="!editing && form.id !== ''"
v-model="sponsorList[index]"></el-input> @click="addSponsor">
<i v-if="sponsorList.length > 1"
class="remove"
@click="delSponsor(index)"></i>
<button v-if="index == 0"
class="add-btn"
type="button"
:disabled="!editing && form.id !== ''"
@click="addSponsor">
<i class="el-icon-plus"></i> <i class="el-icon-plus"></i>
<span>添加</span> <span>添加</span>
</button> </button>
@ -87,181 +52,109 @@
</el-form-item> </el-form-item>
<el-form-item label="承办方(选填)"> <el-form-item label="承办方(选填)">
<div class="inline-input"> <div class="inline-input">
<div class="input-wrap" <div class="input-wrap" v-for="(item, index) in undertakerList" :key="index">
v-for="(item,index) in undertakerList" <el-input placeholder="承办方名称" v-model="undertakerList[index]"></el-input>
:key="index"> <i v-if="undertakerList.length > 1" class="remove" @click="delOrganizer(index)"></i>
<el-input placeholder="承办方名称" <button v-if="index == 0" class="add-btn" type="button" :disabled="!editing && form.id !== ''"
v-model="undertakerList[index]"></el-input> @click="addOrganizer">
<i v-if="undertakerList.length > 1"
class="remove"
@click="delOrganizer(index)"></i>
<button v-if="index == 0"
class="add-btn"
type="button"
:disabled="!editing && form.id !== ''"
@click="addOrganizer">
<i class="el-icon-plus"></i> <i class="el-icon-plus"></i>
<span>添加</span> <span>添加</span>
</button> </button>
</div> </div>
</div> </div>
<button v-if="!undertakerList.length" <button v-if="!undertakerList.length" class="add-btn" type="button" @click="addOrganizer">
class="add-btn"
type="button"
@click="addOrganizer">
<i class="el-icon-plus"></i> <i class="el-icon-plus"></i>
<span>添加</span> <span>添加</span>
</button> </button>
</el-form-item> </el-form-item>
<el-form-item class="req" <el-form-item class="req" label="报名时间">
label="报名时间"> <el-date-picker v-model="signupTime" value-format="yyyy-MM-dd HH:mm:ss" type="datetimerange"
<el-date-picker v-model="signupTime" range-separator="-" start-placeholder="开始日期" end-placeholder="结束日期"
value-format="yyyy-MM-dd HH:mm:ss" :picker-options="pickerOptions"></el-date-picker>
type="datetimerange"
range-separator="-"
start-placeholder="开始日期"
end-placeholder="结束日期"
:picker-options="pickerOptions"></el-date-picker>
</el-form-item> </el-form-item>
<el-form-item class="req" <el-form-item class="req" label="竞赛时间">
label="竞赛时间"> <el-date-picker v-model="playTime" value-format="yyyy-MM-dd HH:mm:ss" type="datetimerange"
<el-date-picker v-model="playTime" range-separator="-" start-placeholder="开始日期" end-placeholder="结束日期"
value-format="yyyy-MM-dd HH:mm:ss" :picker-options="pickerOptions"></el-date-picker>
type="datetimerange"
range-separator="-"
start-placeholder="开始日期"
end-placeholder="结束日期"
:picker-options="pickerOptions"></el-date-picker>
</el-form-item> </el-form-item>
<el-form-item class="req" <el-form-item class="req" label="比赛范围">
label="比赛范围">
<div v-if="form.id"> <div v-if="form.id">
<el-radio v-model="form.competitionScope" <el-radio v-model="form.competitionScope" :label="0" disabled>本校内</el-radio>
:label="0"
disabled>本校内</el-radio>
</div> </div>
<div> <div>
<el-radio v-model="form.competitionScope" <el-radio v-model="form.competitionScope" :label="1">全平台</el-radio>
:label="1">全平台</el-radio>
</div> </div>
<div> <div>
<el-radio v-model="form.competitionScope" <el-radio v-model="form.competitionScope" :label="2">指定区域院校</el-radio>
:label="2">指定区域院校</el-radio>
<template v-if="form.competitionScope === 2"> <template v-if="form.competitionScope === 2">
<el-button type="primary" <el-button type="primary" size="mini" @click="showRange">选择院校</el-button>
size="mini"
@click="showRange">选择院校</el-button>
<span style="margin-left: 20px">{{ rangeName }}</span> <span style="margin-left: 20px">{{ rangeName }}</span>
</template> </template>
</div> </div>
</el-form-item> </el-form-item>
<el-form-item class="req" <el-form-item class="req" label="竞赛类型">
label="竞赛类型"> <el-radio v-model="form.completeCompetitionSetup.competitionType" :label="0">个人赛</el-radio>
<el-radio v-model="form.completeCompetitionSetup.competitionType" <el-radio v-model="form.completeCompetitionSetup.competitionType" :label="1">团队赛</el-radio>
:label="0">个人赛</el-radio>
<el-radio v-model="form.completeCompetitionSetup.competitionType"
:label="1">团队赛</el-radio>
</el-form-item> </el-form-item>
<el-form-item class="req" <el-form-item class="req" v-if="!form.completeCompetitionSetup.competitionType" label="报名人数上限">
v-if="!form.completeCompetitionSetup.competitionType"
label="报名人数上限">
<div class="input-center"> <div class="input-center">
<el-input placeholder="请输入人数" <el-input placeholder="请输入人数" v-model.number="form.completeCompetitionSetup.quantityLimit"
v-model.number="form.completeCompetitionSetup.quantityLimit" type="number"></el-input>
type="number"></el-input>
</div> </div>
</el-form-item> </el-form-item>
<template v-if="form.completeCompetitionSetup.competitionType"> <template v-if="form.completeCompetitionSetup.competitionType">
<el-form-item class="req" <el-form-item class="req" label="报名团队数上限">
label="报名团队数上限">
<div class="input-center"> <div class="input-center">
<el-input placeholder="请输入团队数" <el-input placeholder="请输入团队数" v-model.number="form.completeCompetitionSetup.quantityLimit"
v-model.number="form.completeCompetitionSetup.quantityLimit" type="number"></el-input>
type="number"></el-input>
</div> </div>
</el-form-item> </el-form-item>
<el-form-item class="req" <el-form-item class="req" label="团队人数">
label="团队人数"> <div class="input-center" style="width: 250px;">
<div class="input-center" <el-input v-model.number="form.completeCompetitionSetup.minTeamSize" type="number"></el-input>
style="width: 250px;"> <el-input style="margin-left: 5px;" v-model.number="form.completeCompetitionSetup.maxTeamSize"
<el-input v-model.number="form.completeCompetitionSetup.minTeamSize" type="number"></el-input> /
type="number"></el-input>
<el-input style="margin-left: 5px;"
v-model.number="form.completeCompetitionSetup.maxTeamSize"
type="number"></el-input> /
</div> </div>
</el-form-item> </el-form-item>
</template> </template>
<el-form-item class="req" <el-form-item class="req" label="报名邀请码">
label="报名邀请码"> <div class="input-center" style="width: 550px;">
<div class="input-center" <el-radio v-model="form.completeCompetitionSetup.isNeedCode" :label="0">不需要</el-radio>
style="width: 550px;"> <el-radio v-model="form.completeCompetitionSetup.isNeedCode" :label="1">需要</el-radio>
<el-radio v-model="form.completeCompetitionSetup.isNeedCode" <el-input style="width: 250px" placeholder="请输入4位邀请码或点击随机生成"
:label="0">不需要</el-radio> v-model="form.completeCompetitionSetup.invitationCode"
<el-radio v-model="form.completeCompetitionSetup.isNeedCode" :disabled="form.completeCompetitionSetup.isNeedCode === 0"></el-input>
:label="1">需要</el-radio> <el-button v-if="form.completeCompetitionSetup.isNeedCode === 1" @click="randomInv">随机</el-button>
<el-input style="width: 250px"
placeholder="请输入4位邀请码或点击随机生成"
v-model="form.completeCompetitionSetup.invitationCode"
:disabled="form.completeCompetitionSetup.isNeedCode === 0"></el-input>
<el-button v-if="form.completeCompetitionSetup.isNeedCode === 1"
@click="randomInv">随机</el-button>
</div> </div>
</el-form-item> </el-form-item>
<el-form-item class="req" <el-form-item class="req" label="竞赛详情">
label="竞赛详情"> <quill v-if="quillShow" :border="true" v-model="form.description" :height="400"
<quill v-if="quillShow" :readonly="!editing && form.id !== ''" />
:border="true"
v-model="form.description"
:height="400"
:readonly="!editing && form.id !== ''" />
</el-form-item> </el-form-item>
<el-form-item label="附件"> <el-form-item label="附件">
<Upload :limit="5" <Upload :limit="5" :file-list.sync="fileList" :on-remove="handleAnnexRemove"
:file-list.sync="fileList" @onSuccess="uploadAnnexSuccess" />
:on-remove="handleAnnexRemove"
@onSuccess="uploadAnnexSuccess" />
</el-form-item> </el-form-item>
</el-form> </el-form>
</div> </div>
</div> </div>
<el-dialog title="请勾选院校" <el-dialog title="请勾选院校" :visible.sync="rangeVisible" width="580px" custom-class="range-dia"
:visible.sync="rangeVisible" :close-on-click-modal="false">
width="580px"
custom-class="range-dia"
:close-on-click-modal="false">
<div class="range-wrap"> <div class="range-wrap">
<el-cascader ref="range" <el-cascader ref="range" class="range-cas" key="range" v-model="range" :props="props" :show-all-levels="false"
class="range-cas" clearable filterable :before-filter="beforeFilter" :options="rangeList" @change="rangeChange"
key="range" @visible-change="rangeViChange" @input.native="rangeSearch"></el-cascader>
v-model="range" <el-tag v-for="(tag, i) in rangeChecked" :key="tag.value" class="range-check" closable
:props="props" :disable-transitions="false" @close="val => closeRange(i)">
:show-all-levels="false" {{ tag.label }}
clearable
filterable
:before-filter="beforeFilter"
:options="rangeList"
@change="rangeChange"
@visible-change="rangeViChange"
@input.native="rangeSearch"></el-cascader>
<el-tag v-for="(tag, i) in rangeChecked"
:key="tag.value"
class="range-check"
closable
:disable-transitions="false"
@close="val => closeRange(i)">
{{tag.label}}
</el-tag> </el-tag>
</div> </div>
<span slot="footer" <span slot="footer" class="dialog-footer">
class="dialog-footer"> <el-button size="small" @click="rangeVisible = false"> </el-button>
<el-button size="small" <el-button size="small" type="primary" @click="rangeSubmit"> </el-button>
@click="rangeVisible = false"> </el-button>
<el-button size="small"
type="primary"
@click="rangeSubmit"> </el-button>
</span> </span>
</el-dialog> </el-dialog>
</div> </div>
@ -393,7 +286,7 @@ export default {
submiting: false, submiting: false,
updateTime: 0, updateTime: 0,
quillShow: true, quillShow: true,
originSignUpEndTime: '', originSignUpEndTime: '',
}; };
}, },
components: { components: {
@ -489,7 +382,7 @@ export default {
}) })
this.rangeName = range.join(',') this.rangeName = range.join(',')
} }
this.originSignUpEndTime = competition.signUpEndTime this.originSignUpEndTime = competition.signUpEndTime
this.form = competition this.form = competition
this.$parent.resumeData() this.$parent.resumeData()
this.$nextTick(() => { this.$nextTick(() => {
@ -715,10 +608,10 @@ export default {
// //
if (signUpEndTime !== this.originSignUpEndTime && new Date(signUpEndTime) > Date.now()) { if (signUpEndTime !== this.originSignUpEndTime && new Date(signUpEndTime) > Date.now()) {
await this.$post(this.api.updateEventAllocationRecord, { await this.$post(this.api.updateEventAllocationRecord, {
competitionId: id, competitionId: id,
whetherToModifyTheRule: 1, whetherToModifyTheRule: 1,
}) })
} }
} }
}, },
@ -747,164 +640,172 @@ export default {
$upload-width: 220px; $upload-width: 220px;
$upload-height: 140px; $upload-height: 140px;
$upload-lg-height: 150px; $upload-lg-height: 150px;
/deep/ .avatar-uploader { /deep/ .avatar-uploader {
.el-upload { .el-upload {
position: relative; position: relative;
width: $upload-width; width: $upload-width;
height: $upload-height; height: $upload-height;
border: 1px dashed #d9d9d9; border: 1px dashed #d9d9d9;
border-radius: 6px; border-radius: 6px;
cursor: pointer; cursor: pointer;
overflow: hidden; overflow: hidden;
&:hover {
border-color: #cb221c;
}
.uploader-default { &:hover {
display: flex; border-color: #cb221c;
height: $upload-height;
flex-direction: column;
justify-content: center;
text-align: center;
background: rgba(0, 0, 0, 0.04);
i {
font-size: 20px;
font-weight: bold;
color: #8c939d;
}
p {
margin-top: 10px;
font-size: 14px;
color: rgba(0, 0, 0, 0.65);
line-height: 1;
}
}
} }
&.avatar-uploader-lg { .uploader-default {
.el-upload { display: flex;
width: 100%; height: $upload-height;
max-width: 960px; flex-direction: column;
height: $upload-lg-height; justify-content: center;
text-align: center;
background: rgba(0, 0, 0, 0.04);
.uploader-default { i {
height: $upload-lg-height; font-size: 20px;
} font-weight: bold;
} color: #8c939d;
} }
.avatar { p {
display: block; margin-top: 10px;
width: $upload-width; font-size: 14px;
height: $upload-height; color: rgba(0, 0, 0, 0.65);
line-height: 1;
}
} }
}
&.avatar-uploader-lg {
.el-upload {
width: 100%;
max-width: 960px;
height: $upload-lg-height;
.avatar-lg { .uploader-default {
display: block;
width: 100%;
height: $upload-lg-height; height: $upload-lg-height;
}
} }
}
.avatar {
display: block;
width: $upload-width;
height: $upload-height;
}
.el-upload__tip { .avatar-lg {
margin-top: 0; display: block;
width: 100%;
height: $upload-lg-height;
}
p { .el-upload__tip {
font-size: 14px; margin-top: 0;
color: rgba(0, 0, 0, 0.45);
line-height: 1;
&:first-child { p {
margin-bottom: 5px; font-size: 14px;
} color: rgba(0, 0, 0, 0.45);
} line-height: 1;
&:first-child {
margin-bottom: 5px;
}
} }
}
} }
/deep/ .d-inline-block { /deep/ .d-inline-block {
width: 216px; width: 216px;
.el-select, .el-select,
.el-input { .el-input {
width: 100%; width: 100%;
} }
} }
.inline-input { .inline-input {
.input-wrap { .input-wrap {
display: flex; display: flex;
align-items: center; align-items: center;
margin-bottom: 10px; margin-bottom: 10px;
.el-input {
display: inline-block;
width: 216px;
margin-right: 8px;
}
.remove { .el-input {
width: 16px; display: inline-block;
height: 16px; width: 216px;
background: url('../../../assets/img/close.png') 0 0 / cover no-repeat; margin-right: 8px;
cursor: pointer;
}
} }
.add-btn { .remove {
margin-left: 32px; width: 16px;
height: 16px;
background: url('../../../assets/img/close.png') 0 0 / cover no-repeat;
cursor: pointer;
} }
}
.add-btn {
margin-left: 32px;
}
} }
.add-btn { .add-btn {
display: flex; display: flex;
justify-content: center; justify-content: center;
align-items: center; align-items: center;
width: 216px; width: 216px;
line-height: 32px; line-height: 32px;
font-size: 14px; font-size: 14px;
color: rgba(0, 0, 0, 0.65); color: rgba(0, 0, 0, 0.65);
background-color: transparent; background-color: transparent;
border: 1px dashed rgba(0, 0, 0, 0.15); border: 1px dashed rgba(0, 0, 0, 0.15);
border-radius: 4px; border-radius: 4px;
cursor: pointer; cursor: pointer;
i { i {
margin-right: 8px; margin-right: 8px;
font-size: 14px; font-size: 14px;
font-weight: bold; font-weight: bold;
} }
} }
.range-check { .range-check {
display: inline-block; display: inline-block;
margin: 0 0 10px 10px; margin: 0 0 10px 10px;
} }
/deep/.range-cas { /deep/.range-cas {
.el-tag { .el-tag {
display: none; display: none;
} }
} }
.input-center { .input-center {
display: flex; display: flex;
align-items: center; align-items: center;
width: 216px; width: 216px;
white-space: nowrap; white-space: nowrap;
.el-input {
margin-right: 5px; .el-input {
} margin-right: 5px;
}
} }
.el-steps { .el-steps {
justify-content: center; justify-content: center;
} }
/deep/.req { /deep/.req {
.el-form-item__label { .el-form-item__label {
&:before { &:before {
content: '*'; content: '*';
margin-right: 5px; margin-right: 5px;
font-size: 18px; font-size: 18px;
vertical-align: middle; vertical-align: middle;
color: #f00; color: #f00;
}
} }
}
} }
</style> </style>

@ -3,169 +3,115 @@
<div class="page"> <div class="page">
<div class="page-content"> <div class="page-content">
<div class="p-title">赛程与规则设置</div> <div class="p-title">赛程与规则设置</div>
<el-form :model="form" <el-form :model="form" :rules="validRules" label-width="170px" label-suffix=":" size="small"
:rules="validRules" :disabled="!!(!editing && id)">
label-width="170px"
label-suffix=":"
size="small"
:disabled="!!(!editing && id)">
<el-form-item label="竞赛类型"> <el-form-item label="竞赛类型">
{{ step1.completeCompetitionSetup.competitionType ? '团队赛(' + step1.completeCompetitionSetup.minTeamSize + '-' + step1.completeCompetitionSetup.maxTeamSize + '人/队)' : '个人赛' }} <span class="tips">如需修改请返回上一步</span> {{ step1.completeCompetitionSetup.competitionType ? '团队赛(' + step1.completeCompetitionSetup.minTeamSize +
'-' + step1.completeCompetitionSetup.maxTeamSize + '人/队)' : '个人赛' }} <span
class="tips">如需修改请返回上一步</span>
</el-form-item> </el-form-item>
<el-form-item prop="rule" <el-form-item prop="rule" label="赛制">
label="赛制"> <el-radio v-for="(rule, i) in rules" :key="i" v-model="form.rule" :label="rule.id">{{ rule.name
<el-radio v-for="(rule, i) in rules" }}</el-radio>
:key="i"
v-model="form.rule"
:label="rule.id">{{ rule.name }}</el-radio>
<p class="tips">积分赛包含多个竞赛阶段每个阶段的成绩都包含在最终总成绩里最后一轮结束后总成绩排名靠前的参赛者得到获奖资格</p> <p class="tips">积分赛包含多个竞赛阶段每个阶段的成绩都包含在最终总成绩里最后一轮结束后总成绩排名靠前的参赛者得到获奖资格</p>
<p class="tips">淘汰赛包含多个竞赛阶段每个阶段结束后之后只有部分参赛者能晋级下一阶段晋级最后一轮且在最后一轮排名靠前的参赛者得到获奖资格</p> <p class="tips">淘汰赛包含多个竞赛阶段每个阶段结束后之后只有部分参赛者能晋级下一阶段晋级最后一轮且在最后一轮排名靠前的参赛者得到获奖资格</p>
<p class="tips">单项赛仅包含一个竞赛阶段单项的成绩排名即为最终排名排名靠前的参赛者得到获奖资格</p> <p class="tips">单项赛仅包含一个竞赛阶段单项的成绩排名即为最终排名排名靠前的参赛者得到获奖资格</p>
<p class="tips">系统默认排名规则优先按分数排名分数高则排名靠前分数相同则按用时排名用时短则排名靠前</p> <p class="tips">系统默认排名规则优先按分数排名分数高则排名靠前分数相同则按用时排名用时短则排名靠前</p>
</el-form-item> </el-form-item>
<template v-if="form.rule !== 2"> <template v-if="form.rule !== 2">
<el-form-item prop="stageNum" <el-form-item prop="stageNum" label="阶段数量">
label="阶段数量">
<div class="input-center"> <div class="input-center">
<el-select v-model="form.stageNum" <el-select v-model="form.stageNum" @change="stageChange">
@change="stageChange"> <el-option v-for="i in 10" :key="i" :label="i" :value="i"></el-option>
<el-option v-for="i in 10"
:key="i"
:label="i"
:value="i"></el-option>
</el-select> </el-select>
</div> </div>
<div v-if="step1.completeCompetitionSetup.competitionType" <div v-if="step1.completeCompetitionSetup.competitionType" class="tips">
class="tips">
(团队赛是否限制队内每个成员只能参加一个阶段赛项 (团队赛是否限制队内每个成员只能参加一个阶段赛项
<el-radio v-model="form.teamLimit" <el-radio v-model="form.teamLimit" :label="1"></el-radio>
:label="1"></el-radio> <el-radio v-model="form.teamLimit" :label="0"></el-radio>
<el-radio v-model="form.teamLimit"
:label="0"></el-radio>
) )
</div> </div>
</el-form-item> </el-form-item>
<el-form-item v-if="!form.rule" <el-form-item v-if="!form.rule" prop="resultCalculationMethod" label="总成绩计算方式">
prop="resultCalculationMethod" <el-radio v-model="form.resultCalculationMethod" :label="0">各阶段成绩加权求和</el-radio>
label="总成绩计算方式"> <el-radio v-model="form.resultCalculationMethod" :label="1">各阶段成绩直接求和</el-radio>
<el-radio v-model="form.resultCalculationMethod" <el-radio v-model="form.resultCalculationMethod" :label="2">各阶段成绩取平均值</el-radio>
:label="0">各阶段成绩加权求和</el-radio>
<el-radio v-model="form.resultCalculationMethod"
:label="1">各阶段成绩直接求和</el-radio>
<el-radio v-model="form.resultCalculationMethod"
:label="2">各阶段成绩取平均值</el-radio>
<p class="tips">若选择加权求和则需要设置每个阶段成绩所占权重且权重总和须为100%</p> <p class="tips">若选择加权求和则需要设置每个阶段成绩所占权重且权重总和须为100%</p>
</el-form-item> </el-form-item>
<el-form-item prop="stageNum" <el-form-item prop="stageNum" label="阶段设置">
label="阶段设置"> <div v-for="(item, i) in form.competitionStageList" :key="i" class="step-set">
<div v-for="(item, i) in form.competitionStageList"
:key="i"
class="step-set">
<div class="line"> <div class="line">
{{ serials[i] }}阶段 <el-input v-model="item.stageName" {{ serials[i] }}阶段 <el-input v-model="item.stageName" clearable placeholder="请输入阶段名称,如“初赛”"
clearable style="width: 200px"></el-input>
placeholder="请输入阶段名称,如“初赛”"
style="width: 200px"></el-input>
</div> </div>
<div class="line"> <div class="line">
<span class="req">*</span> <span class="req">*</span>
比赛方式 比赛方式
<el-radio v-for="(method, i) in methods" <el-radio v-for="(method, i) in methods" :key="i" v-model="item.method" :label="method.id">{{
:key="i" method.name }}</el-radio>
v-model="item.method"
:label="method.id">{{ method.name }}</el-radio>
</div> </div>
<div v-if="step1.completeCompetitionSetup.competitionType" <div v-if="step1.completeCompetitionSetup.competitionType" class="line">
class="line">
<span class="req">*</span> <span class="req">*</span>
团队参赛人数限制 团队参赛人数限制
<el-radio v-model="item.teamNumLimit" <el-radio v-model="item.teamNumLimit" :label="0">不限制</el-radio>
:label="0">不限制</el-radio> <el-radio v-model="item.teamNumLimit" :label="1">自定义</el-radio>
<el-radio v-model="item.teamNumLimit" <el-input v-model.number="item.customNumber" type="number" min="0" style="width: 150px;"
:label="1">自定义</el-radio> :disabled="item.teamNumLimit === 0"></el-input>
<el-input v-model.number="item.customNumber"
type="number"
min="0"
style="width: 150px;"
:disabled="item.teamNumLimit === 0"></el-input>
<span class="tips">可限制本阶段单个团队的出战人数</span> <span class="tips">可限制本阶段单个团队的出战人数</span>
</div> </div>
<div v-if="step1.completeCompetitionSetup.competitionType" <div v-if="step1.completeCompetitionSetup.competitionType" class="line">
class="line">
<span class="req">*</span> <span class="req">*</span>
团队成绩计算方式 团队成绩计算方式
<el-radio v-for="(j, i) in teamCalculationMethods" <el-radio v-for="(j, i) in teamCalculationMethods" :key="i" v-model="item.teamCalculationMethod"
:key="i" :label="j.id">{{ j.name }}</el-radio>
v-model="item.teamCalculationMethod"
:label="j.id">{{ j.name }}</el-radio>
<span class="tips">可设置本阶段的团队取分规则</span> <span class="tips">可设置本阶段的团队取分规则</span>
</div> </div>
<div v-if="form.rule === 1 && i !== form.competitionStageList.length - 1" <div v-if="form.rule === 1 && i !== form.competitionStageList.length - 1" class="line"
class="line" style="display: flex;">
style="display: flex;">
<p> <p>
<span class="req">*</span>晋级规则 <span class="req">*</span>晋级规则
</p> </p>
<div> <div>
<div class="line"> <div class="line">
本阶段成绩排名前 本阶段成绩排名前
<el-input v-model.number="item.peopleLimit" <el-input v-model.number="item.peopleLimit" type="number" min="0" style="width: 100px"></el-input>
type="number"
min="0"
style="width: 100px"></el-input>
可晋级下一阶段比赛 可晋级下一阶段比赛
</div> </div>
<div class="line"> <div class="line">
本阶段成绩排名前 本阶段成绩排名前
<el-input v-model.number="item.percentageLimit" <el-input v-model.number="item.percentageLimit" type="number" min="0"
type="number" style="width: 100px"></el-input>
min="0"
style="width: 100px"></el-input>
%可晋级下一阶段比赛 %可晋级下一阶段比赛
</div> </div>
<div> <div>
本阶段成绩 本阶段成绩
<el-select v-model="item.operator" <el-select v-model="item.operator" style="width: 80px;margin-right: 10px">
style="width: 80px;margin-right: 10px"> <el-option v-for="i in operators" :key="i" :label="i" :value="i"></el-option>
<el-option v-for="i in operators"
:key="i"
:label="i"
:value="i"></el-option>
</el-select> </el-select>
<el-input v-model="item.score" <el-input v-model="item.score" type="number" min="0" style="width: 100px"></el-input>
type="number"
min="0"
style="width: 100px"></el-input>
可晋级下一阶段比赛 可晋级下一阶段比赛
</div> </div>
</div> </div>
</div> </div>
<div v-if="!form.rule" <div v-if="!form.rule" class="line">
class="line">
<span class="req">*</span> <span class="req">*</span>
占总成绩权重 占总成绩权重
<el-input v-model.number="item.pointWeight" <el-input v-model.number="item.pointWeight" type="number" min="0"
type="number" :disabled="form.resultCalculationMethod != 0" style="width: 150px;"></el-input> %
min="0"
:disabled="form.resultCalculationMethod != 0"
style="width: 150px;"></el-input> %
</div> </div>
<div class="line"> <div class="line">
成绩公布时间 成绩公布时间
阶段比赛结束后 阶段比赛结束后
<el-input v-model.number="item.resultAnnouncementTime" <el-input v-model.number="item.resultAnnouncementTime" type="number" min="0"
type="number" style="width: 120px"></el-input>
min="0"
style="width: 120px"></el-input>
小时公布阶段比赛成绩 小时公布阶段比赛成绩
</div> </div>
<div v-if="item.resultAnnouncementTime !== '' && item.resultAnnouncementTime !== null && item.resultAnnouncementTime !== undefined" <div
class="line"> v-if="item.resultAnnouncementTime !== '' && item.resultAnnouncementTime !== null && item.resultAnnouncementTime !== undefined"
class="line">
是否公布成绩详情 是否公布成绩详情
<el-radio v-model="item.resultsDetails" <el-radio v-model="item.resultsDetails" :label="0"></el-radio>
:label="0"></el-radio> <el-radio v-model="item.resultsDetails" :label="1"></el-radio>
<el-radio v-model="item.resultsDetails"
:label="1"></el-radio>
<p class="tips">若选择则公布成绩详情竞赛结束后参赛者可查看自己的比赛成绩得分详情</p> <p class="tips">若选择则公布成绩详情竞赛结束后参赛者可查看自己的比赛成绩得分详情</p>
<p class="tips">若选择则不公布成绩详情参赛者只能知晓自己的分数及排名不能查看得分详情</p> <p class="tips">若选择则不公布成绩详情参赛者只能知晓自己的分数及排名不能查看得分详情</p>
</div> </div>
@ -173,44 +119,32 @@
</el-form-item> </el-form-item>
</template> </template>
<template v-else> <template v-else>
<el-form-item prop="stageNum" <el-form-item prop="stageNum" label="规则设置">
label="规则设置">
<div class="step-set"> <div class="step-set">
<div class="line"> <div class="line">
<span class="req">*</span> <span class="req">*</span>
比赛方式 比赛方式
<el-radio v-for="(method, i) in methods" <el-radio v-for="(method, i) in methods" :key="i" v-model="form.competitionStageList[0].method"
:key="i" :label="method.id">{{ method.name }}</el-radio>
v-model="form.competitionStageList[0].method"
:label="method.id">{{ method.name }}</el-radio>
</div> </div>
<div v-if="step1.completeCompetitionSetup.competitionType" <div v-if="step1.completeCompetitionSetup.competitionType" class="line">
class="line">
<span class="req">*</span> <span class="req">*</span>
团队成绩计算方式 团队成绩计算方式
<el-radio v-for="(j, i) in teamCalculationMethods" <el-radio v-for="(j, i) in teamCalculationMethods" :key="i"
:key="i" v-model="form.competitionStageList[0].teamCalculationMethod" :label="j.id">{{ j.name }}</el-radio>
v-model="form.competitionStageList[0].teamCalculationMethod"
:label="j.id">{{ j.name }}</el-radio>
<span class="tips">可设置本阶段的团队取分规则</span> <span class="tips">可设置本阶段的团队取分规则</span>
</div> </div>
</div> </div>
</el-form-item> </el-form-item>
<el-form-item prop="rule" <el-form-item prop="rule" label="成绩公布时间">
label="成绩公布时间">
阶段比赛结束后 阶段比赛结束后
<el-input v-model.number="form.competitionStageList[0].resultAnnouncementTime" <el-input v-model.number="form.competitionStageList[0].resultAnnouncementTime" type="number" min="0"
type="number" style="width: 120px"></el-input>
min="0"
style="width: 120px"></el-input>
小时公布阶段比赛成绩 小时公布阶段比赛成绩
</el-form-item> </el-form-item>
<el-form-item prop="resultsDetails" <el-form-item prop="resultsDetails" label="是否公布成绩详情">
label="是否公布成绩详情"> <el-radio v-model="form.competitionStageList[0].resultsDetails" :label="0"></el-radio>
<el-radio v-model="form.competitionStageList[0].resultsDetails" <el-radio v-model="form.competitionStageList[0].resultsDetails" :label="1"></el-radio>
:label="0"></el-radio>
<el-radio v-model="form.competitionStageList[0].resultsDetails"
:label="1"></el-radio>
<p class="tips">若选择则公布成绩详情竞赛结束后参赛者可查看自己的比赛成绩得分详情</p> <p class="tips">若选择则公布成绩详情竞赛结束后参赛者可查看自己的比赛成绩得分详情</p>
<p class="tips">若选择则不公布成绩详情参赛者只能知晓自己的分数及排名不能查看得分详情</p> <p class="tips">若选择则不公布成绩详情参赛者只能知晓自己的分数及排名不能查看得分详情</p>
</el-form-item> </el-form-item>
@ -397,11 +331,11 @@ export default {
} }
} }
if (form.rule !== originForm.rule || form.stageNum !== originForm.stageNum || form.teamLimit !== originForm.teamLimit || changeLimit) { if (form.rule !== originForm.rule || form.stageNum !== originForm.stageNum || form.teamLimit !== originForm.teamLimit || changeLimit) {
await this.$post(this.api.updateEventAllocationRecord, { await this.$post(this.api.updateEventAllocationRecord, {
competitionId: +this.id, competitionId: +this.id,
whetherToModifyTheRule: 1, whetherToModifyTheRule: 1,
}) })
this.$emit('next', next) this.$emit('next', next)
} else { } else {
this.$emit('next', next) this.$emit('next', next)
} }
@ -500,7 +434,7 @@ export default {
if (form.resultCalculationMethod == 0 && !rule && pointWeight > 0 && pointWeight !== 100) return util.errorMsg('权重须等于100,请重新输入') if (form.resultCalculationMethod == 0 && !rule && pointWeight > 0 && pointWeight !== 100) return util.errorMsg('权重须等于100,请重新输入')
} }
} else { // 稿 } else { // 稿
form.competitionStageList = form.competitionStageList.filter(e => e.stageName) form.competitionStageList = form.competitionStageList.filter(e => e.stageName)
} }
this.$parent.showLoad() this.$parent.showLoad()
if (form.ruleId) { if (form.ruleId) {
@ -528,57 +462,65 @@ export default {
<style scoped lang="scss"> <style scoped lang="scss">
/deep/ .d-inline-block { /deep/ .d-inline-block {
width: 216px; width: 216px;
.el-select,
.el-input { .el-select,
width: 100%; .el-input {
} width: 100%;
}
} }
.inline-input {
.input-wrap {
display: flex;
align-items: center;
margin-bottom: 10px;
.el-input { .inline-input {
display: inline-block; .input-wrap {
width: 216px; display: flex;
margin-right: 8px; align-items: center;
} margin-bottom: 10px;
.remove { .el-input {
width: 16px; display: inline-block;
height: 16px; width: 216px;
background: url('../../../assets/img/close.png') 0 0 / cover no-repeat; margin-right: 8px;
cursor: pointer;
}
} }
.add-btn { .remove {
margin-left: 32px; width: 16px;
height: 16px;
background: url('../../../assets/img/close.png') 0 0 / cover no-repeat;
cursor: pointer;
} }
}
.add-btn {
margin-left: 32px;
}
} }
.input-center { .input-center {
display: flex; display: flex;
align-items: center; align-items: center;
width: 216px; width: 216px;
white-space: nowrap; white-space: nowrap;
.el-input {
margin-right: 5px; .el-input {
} margin-right: 5px;
}
} }
.step-set { .step-set {
padding: 15px; padding: 15px;
background-color: #fbfbfb; background-color: #fbfbfb;
} }
.tips { .tips {
font-size: 13px; font-size: 13px;
color: #959595; color: #959595;
} }
.req { .req {
color: #f00; color: #f00;
} }
.line { .line {
margin-bottom: 10px; margin-bottom: 10px;
} }
</style> </style>

@ -1,75 +1,47 @@
<template> <template>
<div> <div>
<div v-show="!setVisible" <div v-show="!setVisible" class="page">
class="page">
<div class="page-content"> <div class="page-content">
<div class="p-title">比赛内容设置</div> <div class="p-title">比赛内容设置</div>
<el-form label-width="170px" <el-form label-width="170px" label-suffix=":" size="small" :disabled="!!(!editing && id)">
label-suffix=":" <div v-for="(item, i) in form" :key="i" class="step">
size="small"
:disabled="!!(!editing && id)">
<div v-for="(item, i) in form"
:key="i"
class="step">
<div class="title"> <div class="title">
<span>{{ item.stageName }}{{ nums[i] }}阶段 | {{ methods.find(e => e.id === item.method).name }} </span> <span>{{ item.stageName }}{{ nums[i] }}阶段 | {{ methods.find(e => e.id === item.method).name }} </span>
<el-button v-if="item.method !== 2" <el-button v-if="item.method !== 2" type="primary" @click="toSet(i)">设置</el-button>
type="primary"
@click="toSet(i)">设置</el-button>
</div> </div>
<el-form-item class="req" <el-form-item class="req" prop="time" label="比赛时间">
prop="time"
label="比赛时间">
<span v-if="item.method !== 2 && item.startTime">{{ item.startTime + ' ' + item.endTime }}</span> <span v-if="item.method !== 2 && item.startTime">{{ item.startTime + ' ' + item.endTime }}</span>
<div style="display: flex;align-items: center;" <div style="display: flex;align-items: center;" v-if="item.method === 2">
v-if="item.method === 2"> <el-date-picker v-model="item.time" type="datetimerange" range-separator="~" start-placeholder="开始日期"
<el-date-picker v-model="item.time" end-placeholder="结束日期" format="yyyy-MM-dd HH:mm:ss" value-format="yyyy-MM-dd HH:mm:ss"
type="datetimerange" @change="timeChange">
range-separator="~"
start-placeholder="开始日期"
end-placeholder="结束日期"
format="yyyy-MM-dd HH:mm:ss"
value-format="yyyy-MM-dd HH:mm:ss"
@change="timeChange">
</el-date-picker> </el-date-picker>
<el-alert style="width: auto;padding: 0px 16px;margin-left: 10px;" <el-alert style="width: auto;padding: 0px 16px;margin-left: 10px;"
:title="'(请设置在 ' + step1.playStartTime + ' ~ ' + step1.playEndTime + '间)'" :title="'(请设置在 ' + step1.playStartTime + ' ~ ' + step1.playEndTime + '间)'" type="error"
type="error" :closable="false" effect="dark">
:closable="false"
effect="dark">
</el-alert> </el-alert>
</div> </div>
</el-form-item> </el-form-item>
<template v-if="item.method === 2"> <template v-if="item.method === 2">
<el-form-item class="req" <el-form-item class="req" label="比赛地点">
label="比赛地点"> <el-input v-model="item.offlineAddress" style="width: 80%"></el-input>
<el-input v-model="item.offlineAddress"
style="width: 80%"></el-input>
</el-form-item> </el-form-item>
<el-form-item label="系统链接"> <el-form-item label="系统链接">
<el-input v-model="item.competitionStageContentSetting.systemLink" <el-input v-model="item.competitionStageContentSetting.systemLink" style="width: 80%"></el-input>
style="width: 80%"></el-input>
</el-form-item> </el-form-item>
<el-form-item label="是否支持上传文件"> <el-form-item label="是否支持上传文件">
<div> <div>
<el-radio v-model="item.competitionStageContentSetting.whetherToUploadFiles" <el-radio v-model="item.competitionStageContentSetting.whetherToUploadFiles" :label="0"></el-radio>
:label="0"></el-radio>
</div> </div>
<div class="flex a-center"> <div class="flex a-center">
<el-radio v-model="item.competitionStageContentSetting.whetherToUploadFiles" <el-radio v-model="item.competitionStageContentSetting.whetherToUploadFiles" :label="1"></el-radio>
:label="1"></el-radio>
<template v-if="item.competitionStageContentSetting.whetherToUploadFiles"> <template v-if="item.competitionStageContentSetting.whetherToUploadFiles">
<el-upload class="file-upload" <el-upload class="file-upload" :on-remove="(file, fileList) => handleRemove(file, fileList, item)"
:on-remove="(file, fileList) => handleRemove(file, fileList, item)" :on-error="uploadError" :before-remove="beforeRemove" :on-preview="handlePreview" action=""
:on-error="uploadError" :file-list="item.competitionStageContentSetting.fileList"
:before-remove="beforeRemove" :http-request="res => handleRequest(res, item)">
:on-preview="handlePreview" <el-button size="small" type="primary">上传文件</el-button>
action=""
:file-list="item.competitionStageContentSetting.fileList"
:http-request="res => handleRequest(res, item)">
<el-button size="small"
type="primary">上传文件</el-button>
<!-- <div slot="tip" <!-- <div slot="tip"
class="el-upload__tip" class="el-upload__tip"
style="position: relative"> style="position: relative">
@ -85,55 +57,35 @@
</div> </div>
<div style="display: flex;align-items: flex-start;margin-top: 10px"> <div style="display: flex;align-items: flex-start;margin-top: 10px">
<span style="margin: 0 10px 0 30px;">说明</span> <span style="margin: 0 10px 0 30px;">说明</span>
<el-input maxlength="1000" <el-input maxlength="1000" placeholder="请输入内容" type="textarea"
placeholder="请输入内容" v-model="item.competitionStageContentSetting.stageExplain"
type="textarea" style="width: calc(80% - 216px);"></el-input>
v-model="item.competitionStageContentSetting.stageExplain"
style="width: calc(80% - 216px);"></el-input>
</div> </div>
</el-form-item> </el-form-item>
<el-form-item class="req" <el-form-item class="req" label="比赛内容">
label="比赛内容"> <el-input v-model="item.contentDescription" type="textarea" style="width: 80%"></el-input>
<el-input v-model="item.contentDescription"
type="textarea"
style="width: 80%"></el-input>
</el-form-item> </el-form-item>
<el-form-item class="req" <el-form-item class="req" label="评分规则">
label="评分规则"> <el-input v-model="item.scoreRule" type="textarea" style="width: 80%"></el-input>
<el-input v-model="item.scoreRule"
type="textarea"
style="width: 80%"></el-input>
</el-form-item> </el-form-item>
</template> </template>
<template v-else> <template v-else>
<el-form-item class="req" <el-form-item class="req" prop="cid" label="课程系统">
prop="cid"
label="课程系统">
{{ item.systemName }} {{ item.systemName }}
</el-form-item> </el-form-item>
<el-form-item class="req" <el-form-item class="req" prop="assessmentId" label="已选择考核">
prop="assessmentId"
label="已选择考核">
{{ item.projectName }} {{ item.projectName }}
</el-form-item> </el-form-item>
<el-form-item class="req" <el-form-item class="req" prop="resultAnnouncementTime" label="比赛地点">
prop="resultAnnouncementTime"
label="比赛地点">
<div class="line"> <div class="line">
<el-checkbox v-model="item.onlineButton">线上</el-checkbox> <el-checkbox v-model="item.onlineButton">线上</el-checkbox>
<el-input v-model="item.onlineAddress" <el-input v-model="item.onlineAddress" clearable placeholder="请输入比赛网址" :disabled="!item.onlineButton"
clearable style="width: 400px;margin-left: 10px"></el-input>
placeholder="请输入比赛网址"
:disabled="!item.onlineButton"
style="width: 400px;margin-left: 10px"></el-input>
</div> </div>
<div class="line"> <div class="line">
<el-checkbox v-model="item.offlineButton">线下</el-checkbox> <el-checkbox v-model="item.offlineButton">线下</el-checkbox>
<el-input v-model="item.offlineAddress" <el-input v-model="item.offlineAddress" clearable placeholder="请输入地址" :disabled="!item.offlineButton"
clearable style="width: 400px;margin-left: 10px"></el-input>
placeholder="请输入地址"
:disabled="!item.offlineButton"
style="width: 400px;margin-left: 10px"></el-input>
</div> </div>
</el-form-item> </el-form-item>
</template> </template>
@ -142,10 +94,7 @@
</div> </div>
</div> </div>
<set v-if="setVisible" <set v-if="setVisible" :form.sync="form[curStep]" :step1.sync="step1" @hideSet="hideSet" />
:form.sync="form[curStep]"
:step1.sync="step1"
@hideSet="hideSet" />
</div> </div>
</template> </template>
@ -369,40 +318,40 @@ export default {
}, },
// //
async autoAllocationConfirm (next) { async autoAllocationConfirm (next) {
if (this.form[0].contentId) { if (this.form[0].contentId) {
// //
const res = await this.$post(`${this.api.editWhetherPopUpsAppear}?competitionId=${this.id}`) const res = await this.$post(`${this.api.editWhetherPopUpsAppear}?competitionId=${this.id}`)
if (res.popupState) { if (res.popupState) {
this.$confirm('报名的团队将按照新设置的规则进行自动分配阶段参赛人员,当前已分配的阶段参赛人员是否需要保留?', '提示', { this.$confirm('报名的团队将按照新设置的规则进行自动分配阶段参赛人员,当前已分配的阶段参赛人员是否需要保留?', '提示', {
cancelButtonText: '已分配的保留', cancelButtonText: '已分配的保留',
confirmButtonText: '全部重新分配', confirmButtonText: '全部重新分配',
type: 'success', type: 'success',
closeOnClickModal: false, closeOnClickModal: false,
showClose: false, showClose: false,
}).then(async () => { }).then(async () => {
await this.$post(`${this.api.automaticAllocation}?competitionId=${this.id}`) await this.$post(`${this.api.automaticAllocation}?competitionId=${this.id}`)
this.$emit('next', next) this.$emit('next', next)
}).catch(() => { }).catch(() => {
this.$emit('next', next) this.$emit('next', next)
// this.automaticAllocation(0, next) // this.automaticAllocation(0, next)
}); });
} else { } else {
this.$emit('next', next) this.$emit('next', next)
} }
} else { } else {
// //
this.$confirm('<p>团队赛已发布,是否要自动分配阶段人员?</p><p style="margin-top: 10px;color: #a9a9a9;">(点击“是”将会在报名结束后给报名的团队自动分配阶段参赛人员</p>', '提示', { this.$confirm('<p>团队赛已发布,是否要自动分配阶段人员?</p><p style="margin-top: 10px;color: #a9a9a9;">(点击“是”将会在报名结束后给报名的团队自动分配阶段参赛人员</p>', '提示', {
confirmButtonText: '是', confirmButtonText: '是',
cancelButtonText: '否', cancelButtonText: '否',
type: 'success', type: 'success',
closeOnClickModal: false, closeOnClickModal: false,
dangerouslyUseHTMLString: true, dangerouslyUseHTMLString: true,
}).then(() => { }).then(() => {
this.automaticAllocation(1, next) this.automaticAllocation(1, next)
}).catch(() => { }).catch(() => {
this.automaticAllocation(0, next) this.automaticAllocation(0, next)
}); });
} }
}, },
// //
save (status, next = 0) { save (status, next = 0) {
@ -499,7 +448,7 @@ export default {
// //
status && this.publish(status) status && this.publish(status)
util.successMsg((status ? '发布' : '保存') + '成功') util.successMsg((status ? '发布' : '保存') + '成功')
this.updateTime = 0 this.updateTime = 0
if (this.$parent.$refs.step1.form.completeCompetitionSetup.competitionType) { if (this.$parent.$refs.step1.form.completeCompetitionSetup.competitionType) {
this.autoAllocationConfirm() // this.autoAllocationConfirm() //
} else { } else {
@ -515,41 +464,45 @@ export default {
<style scoped lang="scss"> <style scoped lang="scss">
.step { .step {
padding-bottom: 10px; padding-bottom: 10px;
background-color: #f9f9f9; background-color: #f9f9f9;
.title {
display: flex; .title {
justify-content: space-between; display: flex;
align-items: center; justify-content: space-between;
padding: 10px 15px; align-items: center;
margin-bottom: 10px; padding: 10px 15px;
background-color: #ededed; margin-bottom: 10px;
} background-color: #ededed;
}
} }
.line { .line {
margin-bottom: 10px; margin-bottom: 10px;
} }
/deep/.req { /deep/.req {
.el-form-item__label { .el-form-item__label {
&:before { &:before {
content: '*'; content: '*';
margin-right: 5px; margin-right: 5px;
font-size: 18px; font-size: 18px;
vertical-align: middle; vertical-align: middle;
color: #f00; color: #f00;
}
} }
}
} }
/deep/.file-upload { /deep/.file-upload {
width: 500px; width: 500px;
.download {
position: absolute; .download {
bottom: -63px; position: absolute;
right: 0; bottom: -63px;
font-size: 12px; right: 0;
color: #007eff; font-size: 12px;
cursor: pointer; color: #007eff;
} cursor: pointer;
}
} }
</style> </style>

@ -1,273 +1,147 @@
<template> <template>
<!-- 报名人员 --> <!-- 报名人员 -->
<div class="page-content" <div class="page-content" style="padding: 24px">
style="padding: 24px">
<div class="tool"> <div class="tool">
<ul class="filter"> <ul class="filter">
<li> <li>
<label>搜索</label> <label>搜索</label>
<el-input :placeholder="'请输入姓名、手机号、' + (info.completeCompetitionSetup.competitionType ? '团队名称、' : '') + '学号、学校'" <el-input
prefix-icon="el-icon-search" :placeholder="'请输入姓名、手机号、' + (info.completeCompetitionSetup.competitionType ? '团队名称、' : '') + '学号、学校'"
v-model="keyword" prefix-icon="el-icon-search" v-model="keyword" clearable size="mini" style="width: 350px"></el-input>
clearable
size="mini"
style="width: 350px"></el-input>
</li> </li>
<li v-if="info.releaseType"> <li v-if="info.releaseType">
<label>参赛人员状态</label> <label>参赛人员状态</label>
<el-select v-model="isDisable" <el-select v-model="isDisable" @change="initData">
@change="initData"> <el-option v-for="(item, i) in statusList" :key="i" :label="item.name" :value="item.id"></el-option>
<el-option v-for="(item, i) in statusList"
:key="i"
:label="item.name"
:value="item.id"></el-option>
</el-select> </el-select>
</li> </li>
</ul> </ul>
<div> <div>
<el-button type="primary" <el-button type="primary" round :loading="exporting" @click="exportAll"
round v-auth="'/match:管理:报名人员:导出'">批量导出</el-button>
:loading="exporting" <el-button type="primary" @click="batchDel" round v-auth="'/match:管理:报名人员:导出'">批量删除</el-button>
@click="exportAll"
v-auth="'/match:管理:报名人员:导出'">批量导出</el-button>
<el-button type="primary"
@click="batchDel"
round
v-auth="'/match:管理:报名人员:导出'">批量删除</el-button>
</div> </div>
</div> </div>
<el-table ref="table" <el-table ref="table" :data="listData" class="table" stripe header-align="center"
:data="listData" @selection-change="handleSelectionChange" row-key="id" v-loading="loading" @sort-change="sortChange">
class="table" <el-table-column type="selection" width="80" align="center" :reserve-selection="true"></el-table-column>
stripe <el-table-column type="index" width="60" label="序号" align="center">
header-align="center"
@selection-change="handleSelectionChange"
row-key="id"
v-loading="loading"
@sort-change="sortChange">
<el-table-column type="selection"
width="80"
align="center"
:reserve-selection="true"></el-table-column>
<el-table-column type="index"
width="60"
label="序号"
align="center">
<template slot-scope="scope"> <template slot-scope="scope">
{{ scope.$index + (page - 1) * pageSize + 1 }} {{ scope.$index + (page - 1) * pageSize + 1 }}
</template> </template>
</el-table-column> </el-table-column>
<el-table-column prop="school" <el-table-column prop="school" label="学生账号归属" sortable="custom" min-width="180" align="center"></el-table-column>
label="学生账号归属" <el-table-column prop="realSchool" label="学生所在院校" min-width="180" align="center"></el-table-column>
sortable="custom" <el-table-column v-if="info.completeCompetitionSetup.competitionType" prop="teamName" label="团队名称"
min-width="180" sortable="custom" min-width="140" align="center">
align="center"></el-table-column>
<el-table-column prop="realSchool"
label="学生所在院校"
min-width="180"
align="center"></el-table-column>
<el-table-column v-if="info.completeCompetitionSetup.competitionType"
prop="teamName"
label="团队名称"
sortable="custom"
min-width="140"
align="center">
</el-table-column> </el-table-column>
<el-table-column prop="username" <el-table-column prop="username" label="队长" min-width="140" align="center">
label="队长/成员"
min-width="140"
align="center">
</el-table-column> </el-table-column>
<el-table-column prop="workNumber" <el-table-column prop="workNumber" label="队长学号" min-width="140" align="center">
label="队长/成员学号"
min-width="140"
align="center">
</el-table-column> </el-table-column>
<el-table-column prop="phone" <el-table-column prop="phone" label="队长手机号" min-width="140" align="center">
label="队长/成员手机号"
min-width="140"
align="center">
</el-table-column> </el-table-column>
<el-table-column prop="captain" <el-table-column prop="captain" label="是否为队长" min-width="90" align="center"></el-table-column>
label="是否为队长" <el-table-column prop="teachers" label="指导老师" min-width="200" align="center" show-overflow-tooltip>
min-width="90"
align="center"></el-table-column>
<el-table-column prop="teachers"
label="指导老师"
min-width="200"
align="center"
show-overflow-tooltip>
<template slot-scope="scope"> <template slot-scope="scope">
<template v-if="scope.row.teachers"> <template v-if="scope.row.teachers">
<el-tooltip placement="top"> <el-tooltip placement="top">
<div slot="content" <div slot="content" style="line-height: 1.8">
style="line-height: 1.8"> <div v-for="(item, i) in scope.row.teachers" :key="i">
<div v-for="(item, i) in scope.row.teachers"
:key="i">
{{ item.name }}{{ item.phone ? ',' + item.phone : '' }}{{ item.position ? ',' + item.position : '' }} {{ item.name }}{{ item.phone ? ',' + item.phone : '' }}{{ item.position ? ',' + item.position : '' }}
</div> </div>
</div> </div>
<p>{{ scope.row.teachers[0].name }}{{ scope.row.teachers[0].phone ? ',' + scope.row.teachers[0].phone : '' }}{{ scope.row.teachers[0].position ? ',' + scope.row.teachers[0].position : '' }}</p> <p>{{ scope.row.teachers[0].name }}{{ scope.row.teachers[0].phone ? ',' + scope.row.teachers[0].phone : ''
}}{{ scope.row.teachers[0].position ? ',' + scope.row.teachers[0].position : '' }}</p>
</el-tooltip> </el-tooltip>
</template> </template>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column prop="captain" <el-table-column prop="captain" label="团队状态" min-width="80" align="center">
label="团队状态"
min-width="80"
align="center"></el-table-column>
<el-table-column label="操作"
align="center"
width="270">
<template slot-scope="scope"> <template slot-scope="scope">
<el-button v-auth="'/match:管理:报名人员:编辑'" <p style="font-size: 16px;color: #f00;">异常</p>
type="text" </template>
@click="edit(scope.row)">编辑</el-button> </el-table-column>
<el-button type="text" <el-table-column label="操作" align="center" width="270">
@click="del(scope.row)">删除</el-button> <template slot-scope="scope">
<el-button v-auth="'/match:管理:报名人员:编辑'" type="text" @click="edit(scope.row)">编辑</el-button>
<el-button type="text" @click="del(scope.row)">删除</el-button>
<template v-if="info.releaseType"> <template v-if="info.releaseType">
<el-button v-auth="'/match:管理:报名人员:参赛信息与成绩'" <el-button v-auth="'/match:管理:报名人员:参赛信息与成绩'" type="text" @click="toInfo(scope.row)">参赛信息与成绩</el-button>
type="text" <el-switch v-auth="'/match:管理:报名人员:禁用'" v-model="scope.row.isDisable"
@click="toInfo(scope.row)">参赛信息与成绩</el-button> :active-text="scope.row.isDisable ? '禁用' : '启用'" :active-value="0" :inactive-value="1"
<el-switch v-auth="'/match:管理:报名人员:禁用'" style="margin: 0 10px 0 5px" @change="switchOff($event, scope.row, scope.$index)"></el-switch>
v-model="scope.row.isDisable"
:active-text="scope.row.isDisable ? '禁用' : '启用'"
:active-value="0"
:inactive-value="1"
style="margin: 0 10px 0 5px"
@change="switchOff($event,scope.row,scope.$index)"></el-switch>
</template> </template>
</template> </template>
</el-table-column> </el-table-column>
</el-table> </el-table>
<div class="pagination"> <div class="pagination">
<el-pagination background <el-pagination background layout="total, prev, pager, next" :total="total" @current-change="handleCurrentChange"
layout="total, prev, pager, next" :current-page="page">
:total="total"
@current-change="handleCurrentChange"
:current-page="page">
</el-pagination> </el-pagination>
</div> </div>
<el-dialog :title="(!isAdd ? '编辑' : '新增') + '参赛人员'" <el-dialog :title="(!isAdd ? '编辑' : '新增') + '参赛人员'" :visible.sync="addVisible" width="440px" class="dialog"
:visible.sync="addVisible" :close-on-click-modal="false" @close="closeAdd">
width="440px" <el-form ref="form" :model="form" :rules="rules" label-width="110px" style='margin-right: 10px;'>
class="dialog" <el-form-item v-if="!schoolDisable" prop="schoolId" label="学生账号归属">
:close-on-click-modal="false" <el-select v-model="form.schoolId" filterable :disabled="!isAdd" @change="schoolChange" style="width: 100%">
@close="closeAdd"> <el-option v-for="(item, i) in clients" :key="i" :label="item.schoolName"
<el-form ref="form" :value="item.schoolId"></el-option>
:model="form"
:rules="rules"
label-width="110px"
style='margin-right: 10px;'>
<el-form-item v-if="!schoolDisable"
prop="schoolId"
label="学生账号归属">
<el-select v-model="form.schoolId"
filterable
:disabled="!isAdd"
@change="schoolChange"
style="width: 100%">
<el-option v-for="(item, i) in clients"
:key="i"
:label="item.schoolName"
:value="item.schoolId"></el-option>
</el-select> </el-select>
</el-form-item> </el-form-item>
<el-form-item prop="studentAffiliatedInstitutionId" <el-form-item prop="studentAffiliatedInstitutionId" label="学生所在院校">
label="学生所在院校"> <el-select v-model="form.studentAffiliatedInstitutionId" filterable style="width: 100%">
<el-select v-model="form.studentAffiliatedInstitutionId" <el-option v-for="(item, i) in schools" :key="i" :label="item.schoolName"
filterable :value="item.schoolId"></el-option>
style="width: 100%">
<el-option v-for="(item, i) in schools"
:key="i"
:label="item.schoolName"
:value="item.schoolId"></el-option>
</el-select> </el-select>
<p style="margin-top: 10px;line-height: 1.4;font-size: 12px;">学生所属院校为学生实际院校</p> <p style="margin-top: 10px;line-height: 1.4;font-size: 12px;">学生所属院校为学生实际院校</p>
</el-form-item> </el-form-item>
<el-form-item prop="workNumber" <el-form-item prop="workNumber" label="学生学号">
label="学生学号"> <el-input v-model="form.workNumber" placeholder="请输入学生学号" @change="workNumberChange"></el-input>
<el-input v-model="form.workNumber"
placeholder="请输入学生学号"
@change="workNumberChange"></el-input>
</el-form-item> </el-form-item>
<el-form-item prop="userName" <el-form-item prop="userName" label="学生姓名">
label="学生姓名"> <el-input v-model="form.userName" placeholder="请输入学生姓名" :disabled="isAdd"></el-input>
<el-input v-model="form.userName"
placeholder="请输入学生姓名"
:disabled="isAdd"></el-input>
</el-form-item> </el-form-item>
<el-form-item label="账号角色"> <el-form-item label="账号角色">
学生 学生
</el-form-item> </el-form-item>
<el-form-item v-if="info.completeCompetitionSetup.competitionType" <el-form-item v-if="info.completeCompetitionSetup.competitionType" prop="teamId" label="所属团队">
prop="teamId"
label="所属团队">
<div style="display: flex;align-items: center"> <div style="display: flex;align-items: center">
<el-select v-model="form.teamId" <el-select v-model="form.teamId" :disabled="formEnable && isAdd" filterable
:disabled="formEnable && isAdd" style="width: 240px;margin-right: 10px">
filterable <el-option v-for="(item, i) in teams" :key="i" :label="item.teamName" :value="item.teamId"></el-option>
style="width: 240px;margin-right: 10px">
<el-option v-for="(item, i) in teams"
:key="i"
:label="item.teamName"
:value="item.teamId"></el-option>
</el-select> </el-select>
<el-button v-if="isAdd && !formEnable" <el-button v-if="isAdd && !formEnable" type="text" @click="createTeam">创建团队</el-button>
type="text"
@click="createTeam">创建团队</el-button>
</div> </div>
</el-form-item> </el-form-item>
<el-form-item prop="phone" <el-form-item prop="phone" label="手机号">
label="手机号"> <el-input v-model="form.phone" maxlength="11" placeholder="请输入手机号" :disabled="isAdd"></el-input>
<el-input v-model="form.phone"
maxlength="11"
placeholder="请输入手机号"
:disabled="isAdd"></el-input>
</el-form-item> </el-form-item>
<el-form-item prop="email" <el-form-item prop="email" label="邮箱">
label="邮箱"> <el-input v-model="form.email" placeholder="请输入邮箱" :disabled="isAdd"></el-input>
<el-input v-model="form.email"
placeholder="请输入邮箱"
:disabled="isAdd"></el-input>
</el-form-item> </el-form-item>
</el-form> </el-form>
<p v-if="!isAdd" <p v-if="!isAdd" class="tips" style="margin-left: 13px">当前页面信息修改会同步修改掉学生账号信息</p>
class="tips" <span slot="footer" class="dialog-footer">
style="margin-left: 13px">当前页面信息修改会同步修改掉学生账号信息</p>
<span slot="footer"
class="dialog-footer">
<el-button @click="addVisible = false">取消</el-button> <el-button @click="addVisible = false">取消</el-button>
<el-button type="primary" <el-button type="primary" @click="submit">确定</el-button>
@click="submit">确定</el-button>
</span> </span>
</el-dialog> </el-dialog>
<el-dialog title="创建团队" <el-dialog title="创建团队" :visible.sync="teamVisible" :close-on-click-modal="false" width="300px">
:visible.sync="teamVisible"
:close-on-click-modal="false"
width="300px">
<el-form class="dia-form"> <el-form class="dia-form">
<el-form-item> <el-form-item>
<el-input placeholder="请输入团队名称" <el-input placeholder="请输入团队名称" maxlength="10" v-model="teamForm.teamName"></el-input>
maxlength="10"
v-model="teamForm.teamName"></el-input>
</el-form-item> </el-form-item>
<el-form-item> <el-form-item>
<el-input placeholder="请设置团队邀请码" <el-input placeholder="请设置团队邀请码" maxlength="6" v-model="teamForm.invitationCode"></el-input>
maxlength="6"
v-model="teamForm.invitationCode"></el-input>
</el-form-item> </el-form-item>
</el-form> </el-form>
<span slot="footer" <span slot="footer" class="dialog-footer">
class="dialog-footer"> <el-button size="small" type="primary" @click="teamSubmit">确定并使用</el-button>
<el-button size="small" <el-button size="small" @click="teamVisible = false">取消</el-button>
type="primary"
@click="teamSubmit">确定并使用</el-button>
<el-button size="small"
@click="teamVisible = false">取消</el-button>
</span> </span>
</el-dialog> </el-dialog>
</div> </div>
@ -392,7 +266,7 @@ export default {
}, },
async getData () { async getData () {
this.loading = true this.loading = true
const { data } = await this.$post(this.api.queryRegistrationByCondition, { const { data } = await this.$post(this.api.queryAbnormalTeam, {
pageNum: this.page, pageNum: this.page,
pageSize: this.pageSize, pageSize: this.pageSize,
competitionId: this.id, competitionId: this.id,
@ -667,7 +541,7 @@ export default {
}, },
// //
toInfo (row) { toInfo (row) {
this.$store.commit('setInnerReferrer', `${this.$route.path}?id=${this.id}&tab=tab5&name=${this.$route.query.name}&keyword=${this.keyword}&page=${this.page}&isDisable=${this.isDisable}`) this.$store.commit('setInnerReferrer', `${this.$route.path}?id=${this.id}&tab=tab6&name=${this.$route.query.name}&keyword=${this.keyword}&page=${this.page}&isDisable=${this.isDisable}`)
this.$router.push(`/matchInfo?id=${this.id}&accountId=${row.accountId}`) this.$router.push(`/matchInfo?id=${this.id}&accountId=${row.accountId}`)
}, },
exportAll () { exportAll () {
@ -728,24 +602,27 @@ export default {
<style lang="scss" scoped> <style lang="scss" scoped>
/deep/.dia-form { /deep/.dia-form {
.w-100 { .w-100 {
width: 100%; width: 100%;
} }
.tips {
display: flex; .tips {
justify-content: center; display: flex;
align-items: center; justify-content: center;
} align-items: center;
}
} }
.tips { .tips {
font-size: 12px; font-size: 12px;
color: #e90000; color: #e90000;
} }
/deep/.import-file { /deep/.import-file {
.el-progress__text, .el-progress__text,
.el-progress, .el-progress,
.el-upload-list__item-status-label { .el-upload-list__item-status-label {
display: none !important; display: none !important;
} }
} }
</style> </style>

@ -1,24 +1,17 @@
<template> <template>
<!-- 赛事管理 --> <!-- 赛事管理 -->
<div> <div>
<el-card shadow="hover" <el-card shadow="hover" class="m-b-20">
class="m-b-20">
<div class="flex-between"> <div class="flex-between">
<el-page-header @back="back" <el-page-header @back="back" :content="name + '/管理'"></el-page-header>
:content="name + '/管理'"></el-page-header>
</div> </div>
</el-card> </el-card>
<div class="page" <div class="page" style="margin-bottom: 24px">
style="margin-bottom: 24px">
<div class="tabs"> <div class="tabs">
<a class="item" <a class="item" v-for="(item, index) in tabs" :key="index" :class="{ active: index == active }"
v-for="(item,index) in tabs" @click="tabChange(index)">{{ item }}</a>
:key="index"
:class="{active: index == active}"
@click="tabChange(index)">{{ item }}</a>
</div> </div>
<MatchDetail v-if="active == 'tab1'" <MatchDetail v-if="active == 'tab1'" ref="detail" />
ref="detail" />
<MatchArch v-if="active == 'tab2'" /> <MatchArch v-if="active == 'tab2'" />
<MatchProgress v-else-if="active == 'tab3'" /> <MatchProgress v-else-if="active == 'tab3'" />
<Notice v-else-if="active == 'tab4'" /> <Notice v-else-if="active == 'tab4'" />
@ -138,5 +131,4 @@ export default {
}; };
</script> </script>
<style scoped> <style scoped></style>
</style>

@ -1,36 +1,27 @@
<template> <template>
<div style="padding: 0 100px;"> <div style="padding: 0 100px;">
<el-card shadow="hover" <el-card shadow="hover" class="m-b-20 head-card">
class="m-b-20 head-card">
<div class="flex-between"> <div class="flex-between">
<el-page-header @back="back" <el-page-header @back="back" content="参赛信息与成绩"></el-page-header>
content="参赛信息与成绩"></el-page-header>
</div> </div>
</el-card> </el-card>
<el-card shadow="hover" <el-card shadow="hover" class="m-b-20">
class="m-b-20">
<div style="display: flex;align-items: center"> <div style="display: flex;align-items: center">
<table v-if="form.completeCompetitionSetup.competitionType" <table v-if="form.completeCompetitionSetup.competitionType" class="table m-b-20 m-r-10">
class="table m-b-20 m-r-10">
<tr> <tr>
<th width="150">团队名称</th> <th width="150">团队名称</th>
<td> <td>
<el-input :disabled="!editing" <el-input :disabled="!editing" v-model="info.team.teamName"></el-input>
v-model="info.team.teamName"></el-input>
</td> </td>
<th width="150">团队邀请码</th> <th width="150">团队邀请码</th>
<td> <td>
<el-input :disabled="!editing" <el-input :disabled="!editing" maxlength="6" v-model="info.team.invitationCode"></el-input>
maxlength="6"
v-model="info.team.invitationCode"></el-input>
</td> </td>
</tr> </tr>
</table> </table>
<div v-if="form.completeCompetitionSetup.competitionType && status < 4" <div v-if="form.completeCompetitionSetup.competitionType && status < 4" class="m-b-20 text-center">
class="m-b-20 text-center"> <el-button type="primary" @click="edit(1)">{{ editing ? '保存' : '编辑' }}</el-button>
<el-button type="primary"
@click="edit(1)">{{ editing ? '保存' : '编辑' }}</el-button>
</div> </div>
</div> </div>
<table class="table"> <table class="table">
@ -52,14 +43,14 @@
<template> <template>
<tr> <tr>
<th>队长</th> <th>队长</th>
<td>{{ info.caption.userName }}{{ info.caption.schoolName && ',' + info.caption.schoolName }}{{ info.caption.workNumber && ',' + info.caption.workNumber }}</td> <td>{{ info.caption.userName }}{{ info.caption.schoolName && ',' + info.caption.schoolName }}{{
info.caption.workNumber && ',' + info.caption.workNumber }}</td>
</tr> </tr>
<tr> <tr>
<th>团队成员</th> <th>团队成员</th>
<td> <td>
<el-tag v-for="(item, i) in info.teamDetail" <el-tag v-for="(item, i) in info.teamDetail" :key="i" style="margin-right: 5px">{{ item.userName
:key="i" }}</el-tag>
style="margin-right: 5px">{{ item.userName }}</el-tag>
</td> </td>
</tr> </tr>
</template> </template>
@ -68,38 +59,18 @@
<th width="130">指导老师</th> <th width="130">指导老师</th>
<td> <td>
<div class="plus"> <div class="plus">
<i class="el-icon-circle-plus-outline icon" <i class="el-icon-circle-plus-outline icon" @click="addAdvisor"></i>
@click="addAdvisor"></i>
</div> </div>
<div v-for="(item, i) in info.teamInstructors" <div v-for="(item, i) in info.teamInstructors" :key="i" class="line">
:key="i" <el-input placeholder="请输入姓名" v-model="item.name" clearable size="mini" :disabled="!item.edit"></el-input>
class="line"> <el-input placeholder="请输入职务" maxlength="10" v-model="item.position" clearable size="mini"
<el-input placeholder="请输入姓名" :disabled="!item.edit"></el-input>
v-model="item.name" <el-input placeholder="请输入手机号" maxlength="11" v-model="item.phone" clearable size="mini"
clearable :disabled="!item.edit"></el-input>
size="mini"
:disabled="!item.edit"></el-input>
<el-input placeholder="请输入职务"
maxlength="10"
v-model="item.position"
clearable
size="mini"
:disabled="!item.edit"></el-input>
<el-input placeholder="请输入手机号"
maxlength="11"
v-model="item.phone"
clearable
size="mini"
:disabled="!item.edit"></el-input>
<template> <template>
<i v-if="item.edit" <i v-if="item.edit" class="el-icon-check icon" @click="submitAdvisor(item, i)"></i>
class="el-icon-check icon" <i v-else class="el-icon-edit icon" @click="editAdvisor(item)"></i>
@click="submitAdvisor(item, i)"></i> <i class="el-icon-delete icon" @click="delAdvisor(item, i)"></i>
<i v-else
class="el-icon-edit icon"
@click="editAdvisor(item)"></i>
<i class="el-icon-delete icon"
@click="delAdvisor(item, i)"></i>
</template> </template>
</div> </div>
</td> </td>
@ -113,42 +84,43 @@
<th>赛项阶段名称</th> <th>赛项阶段名称</th>
<template v-if="form.completeCompetitionSetup.competitionType"> <template v-if="form.completeCompetitionSetup.competitionType">
<th width="110">参赛人数限制</th> <th width="110">参赛人数限制</th>
<th>允许参赛人员</th> <th>
允许参赛人员
<el-tooltip v-if="stageTip" effect="dark" :content="stageTip" placement="bottom">
<i class="info el-icon-warning" style="margin-right: 10px;color: #ff1650;"></i>
</el-tooltip>
</th>
</template> </template>
<th v-if="form.rule === 0">总分</th> <th v-if="form.rule === 0">总分</th>
<th>竞赛成绩</th> <th>竞赛成绩</th>
</tr> </tr>
<template v-if="info.stages.length"> <template v-if="info.stages.length">
<tr v-for="(item, i) in info.stages" <tr v-for="(item, i) in info.stages" :key="i">
:key="i">
<td>{{ i + 1 }}</td> <td>{{ i + 1 }}</td>
<td>{{ item.stageName }}</td> <td>{{ item.stageName }}</td>
<template v-if="form.completeCompetitionSetup.competitionType"> <template v-if="form.completeCompetitionSetup.competitionType">
<td>{{ item.customNumber || '不限制' }}</td> <td>{{ item.customNumber || '不限制' }}</td>
<td> <td>
<template v-if="item.participants"> <template v-if="item.participants">
<el-tag v-for="tag in item.participants" <el-tag v-for="tag in item.participants" :key="tag.name" class="m-r-5" closable
:key="tag.name" @close="removePar(tag, item)">
class="m-r-5" {{ tag.name }}
closable
@close="removePar(tag, item)">
{{tag.name}}
</el-tag> </el-tag>
</template> </template>
<span v-else <span v-else class="m-r-5"></span>
class="m-r-5"></span> <i class="el-icon-edit icon" @click="selectPar(item)"></i>
<i class="el-icon-edit icon" <el-tooltip v-if="stageTips.length && stageTips[i]" effect="dark" :content="stageTips[i]"
@click="selectPar(item)"></i> placement="bottom">
<el-tag type="danger" class="m-l-5">异常</el-tag>
</el-tooltip>
</td> </td>
</template> </template>
<td v-if="form.rule === 0 && !i" <td v-if="form.rule === 0 && !i" :rowspan="info.stages.length">{{ info.totalScore }}</td>
:rowspan="info.stages.length">{{ info.totalScore }}</td>
<td> <td>
<span v-if="item.score >= 0" <span v-if="item.score >= 0" class="m-r-10">分数{{ item.score }}</span>
class="m-r-10">分数{{item.score}}</span> <el-button
<el-button v-if="form.completeCompetitionSetup.competitionType || (!form.completeCompetitionSetup.competitionType && item.reportId)" v-if="form.completeCompetitionSetup.competitionType || (!form.completeCompetitionSetup.competitionType && item.reportId)"
type="text" type="text" @click="show(item)">查看成绩详情</el-button>
@click="show(item)">查看成绩详情</el-button>
</td> </td>
</tr> </tr>
</template> </template>
@ -156,100 +128,62 @@
<td colspan="6">暂无数据</td> <td colspan="6">暂无数据</td>
</tr> </tr>
</table> </table>
<el-alert v-if="form.completeCompetitionSetup.competitionType" <el-alert v-if="form.completeCompetitionSetup.competitionType" style="margin-top: 10px;"
style="margin-top: 10px;" :title="'注:请团长(团队创建人)设置各阶段参赛成员,只有被选择的允许参赛成员可进入对应阶段比赛' + (info.teamLimit ? ',每个团队成员只能参加一个赛项阶段' : '') + '!'"
:title="'注:请团长(团队创建人)设置各阶段参赛成员,只有被选择的允许参赛成员可进入对应阶段比赛' + (info.teamLimit ? ',每个团队成员只能参加一个赛项阶段' : '') + '!'" type="warning" show-icon>
type="warning"
show-icon>
</el-alert> </el-alert>
</td> </td>
</tr> </tr>
</table> </table>
<template v-if="form.completeCompetitionSetup.competitionType"> <template v-if="form.completeCompetitionSetup.competitionType">
<div class="l-title m-t-20">团队成员</div> <div class="flex a-center" style="margin: 20px 0">
<div class="l-title" style="margin: 0 20px 0 0">团队成员</div>
<el-tag v-for="(item, i) in teamErrors" :key="i" type="danger" style="margin-right: 5px">{{ item
}}</el-tag>
</div>
<div class="flex-center"> <div class="flex-center">
<p>队长{{ info.caption.userName }}</p> <p>队长{{ info.caption.userName }}</p>
<el-button type="primary" <el-button type="primary" @click="transfer">转让队长</el-button>
@click="transfer">转让队长</el-button>
</div> </div>
<el-table :data="info.teamDetail" <el-table :data="info.teamDetail" stripe header-align="center">
stripe <el-table-column prop="userName" label="成员姓名" min-width="100" align="center"></el-table-column>
header-align="center"> <el-table-column prop="schoolName" label="学校" min-width="100" align="center"></el-table-column>
<el-table-column prop="userName" <el-table-column prop="workNumber" label="学号" min-width="100" align="center"></el-table-column>
label="成员姓名" <el-table-column prop="createTime" label="加入时间" width="180" align="center"></el-table-column>
min-width="100" <el-table-column label="操作" align="center" width="160">
align="center"></el-table-column>
<el-table-column prop="schoolName"
label="学校"
min-width="100"
align="center"></el-table-column>
<el-table-column prop="workNumber"
label="学号"
min-width="100"
align="center"></el-table-column>
<el-table-column prop="createTime"
label="加入时间"
width="180"
align="center"></el-table-column>
<el-table-column label="操作"
align="center"
width="160">
<template slot-scope="scope"> <template slot-scope="scope">
<el-button v-if="scope.row.captain" <el-button v-if="scope.row.captain" type="text" @click="removeLine(scope.row)">踢出团队</el-button>
type="text"
@click="removeLine(scope.row)">踢出团队</el-button>
</template> </template>
</el-table-column> </el-table-column>
</el-table> </el-table>
</template> </template>
</el-card> </el-card>
<el-dialog title="选择参赛成员" <el-dialog title="选择参赛成员" :visible.sync="transferVisible" :close-on-click-modal="false" width="400px">
:visible.sync="transferVisible"
:close-on-click-modal="false"
width="400px">
<template v-for="(item, i) in info.teamDetail"> <template v-for="(item, i) in info.teamDetail">
<el-radio v-if="item.captain" <el-radio v-if="item.captain" :key="i" v-model="checkedPlayer" :label="item.teamId">{{ item.userName
:key="i" }}</el-radio>
v-model="checkedPlayer"
:label="item.teamId">{{ item.userName }}</el-radio>
</template> </template>
<span slot="footer" <span slot="footer" class="dialog-footer">
class="dialog-footer"> <el-button size="small" type="primary" @click="transferSubmit">确定</el-button>
<el-button size="small" <el-button size="small" @click="transferVisible = false">取消</el-button>
type="primary"
@click="transferSubmit">确定</el-button>
<el-button size="small"
@click="transferVisible = false">取消</el-button>
</span> </span>
</el-dialog> </el-dialog>
<el-dialog title="选择参赛成员" <el-dialog title="选择参赛成员" :visible.sync="chooseVisible" :close-on-click-modal="false" width="400px">
:visible.sync="chooseVisible"
:close-on-click-modal="false"
width="400px">
<el-checkbox-group v-model="checkedMembers"> <el-checkbox-group v-model="checkedMembers">
<el-checkbox v-for="(item, i) in chooses" <el-checkbox v-for="(item, i) in chooses" :key="i" :label="item.accountId">{{ item.userName }}</el-checkbox>
:key="i"
:label="item.accountId">{{ item.userName }}</el-checkbox>
</el-checkbox-group> </el-checkbox-group>
<p v-if="info.teamLimit && curRow.customNumber" <p v-if="info.teamLimit && curRow.customNumber" style="margin-top: 15px;font-size: 12px;">当前阶段限制{{
style="margin-top: 15px;font-size: 12px;">当前阶段限制{{ curRow.customNumber }}人参赛且此竞赛每个成员只能参加一个阶段赛项</p> curRow.customNumber }}人参赛且此竞赛每个成员只能参加一个阶段赛项</p>
<span slot="footer" <span slot="footer" class="dialog-footer">
class="dialog-footer"> <el-button size="small" type="primary" @click="chooseSubmit">确定</el-button>
<el-button size="small" <el-button size="small" @click="chooseVisible = false">取消</el-button>
type="primary"
@click="chooseSubmit">确定</el-button>
<el-button size="small"
@click="chooseVisible = false">取消</el-button>
</span> </span>
</el-dialog> </el-dialog>
<el-dialog title="团队得分详情" <el-dialog title="团队得分详情" :visible.sync="memberVisible" width="900px" :close-on-click-modal="false">
:visible.sync="memberVisible" <h6 v-if="members.length" style="margin-bottom: 10px;font-size: 16px;">团队名称{{ members[0].teamName }} 阶段名称{{
width="900px" curRow.stageName }}</h6>
:close-on-click-modal="false">
<h6 v-if="members.length"
style="margin-bottom: 10px;font-size: 16px;">团队名称{{ members[0].teamName }} 阶段名称{{ curRow.stageName }}</h6>
<table class="table tc"> <table class="table tc">
<tr> <tr>
<th width="60">序号</th> <th width="60">序号</th>
@ -260,17 +194,14 @@
<th width="100">得分详情</th> <th width="100">得分详情</th>
</tr> </tr>
<template v-if="members.length"> <template v-if="members.length">
<tr v-for="(item, i) in members" <tr v-for="(item, i) in members" :key="i">
:key="i">
<td>{{ i + 1 }}</td> <td>{{ i + 1 }}</td>
<td>{{ item.userName }}</td> <td>{{ item.userName }}</td>
<td>{{ item.schoolName }}</td> <td>{{ item.schoolName }}</td>
<td>{{ item.timeSum }}min</td> <td>{{ item.timeSum }}min</td>
<td>{{ item.score }}</td> <td>{{ item.score }}</td>
<td> <td>
<el-button :disabled="!item.reportId" <el-button :disabled="!item.reportId" type="text" @click="toReport(item)">查看</el-button>
type="text"
@click="toReport(item)">查看</el-button>
</td> </td>
</tr> </tr>
</template> </template>
@ -279,19 +210,12 @@
</tr> </tr>
</table> </table>
<div class="pagination"> <div class="pagination">
<el-pagination background <el-pagination background layout="total, prev, pager, next" :total="total" @current-change="handleCurrentChange"
layout="total, prev, pager, next" :current-page="page" :page-size="pageSize">
:total="total"
@current-change="handleCurrentChange"
:current-page="page"
:page-size="pageSize">
</el-pagination> </el-pagination>
</div> </div>
<span slot="footer" <span slot="footer" class="dialog-footer">
class="dialog-footer"> <el-button size="small" type="primary" @click="memberVisible = false">确定</el-button>
<el-button size="small"
type="primary"
@click="memberVisible = false">确定</el-button>
</span> </span>
</el-dialog> </el-dialog>
</div> </div>
@ -358,7 +282,10 @@ export default {
checkedMember: '', checkedMember: '',
checkedMembers: [], checkedMembers: [],
chooses: [], chooses: [],
timer: null timer: null,
teamErrors: [],
stageTip: '',
stageTips: [],
}; };
}, },
mounted () { mounted () {
@ -407,8 +334,21 @@ export default {
} }
}) })
this.info = info this.info = info
this.form.completeCompetitionSetup.competitionType && this.getErrorInfo()
}).catch(err => { }); }).catch(err => { });
}, },
//
async getErrorInfo () {
const res = await this.$get(this.api.checkTeamStatus, {
competitionId: this.id,
teamId: this.info.teamId
})
this.teamErrors = res.teamTip.split(';').filter(e => e)
if (res.stageTip) {
this.stageTip = res.stageTip
this.stageTips = res.stageTip.split(';').filter(e => e)
}
},
// //
handleStatus () { handleStatus () {
let status let status
@ -657,56 +597,68 @@ export default {
<style lang="scss" scoped> <style lang="scss" scoped>
.m-r-5 { .m-r-5 {
margin-right: 5px; margin-right: 5px;
} }
.l-title { .l-title {
margin-top: 20px; margin-top: 20px;
font-size: 18px; font-size: 18px;
} }
.table { .table {
width: 100%; width: 100%;
border-collapse: collapse; border-collapse: collapse;
th,
td { th,
padding: 12px; td {
border: 1px solid #ebeef5; padding: 12px;
} border: 1px solid #ebeef5;
&.tc { }
text-align: center;
} &.tc {
th { text-align: center;
text-align: center; }
background-color: #f8faff;
} th {
.icon { text-align: center;
margin-right: 10px; background-color: #f8faff;
font-size: 16px; }
color: #7a7a7a;
cursor: pointer; .icon {
&:hover { margin-right: 10px;
color: #007eff; font-size: 16px;
} color: #7a7a7a;
} cursor: pointer;
.plus {
margin-bottom: 10px; &:hover {
text-align: right; color: #007eff;
} }
.line { }
display: flex;
align-items: center; .plus {
margin-bottom: 10px; margin-bottom: 10px;
.el-input { text-align: right;
margin-right: 15px; }
}
.line {
display: flex;
align-items: center;
margin-bottom: 10px;
.el-input {
margin-right: 15px;
} }
}
} }
.flex-center { .flex-center {
display: flex; display: flex;
justify-content: space-between; justify-content: space-between;
align-items: center; align-items: center;
margin-bottom: 15px; margin-bottom: 15px;
} }
.text-center { .text-center {
text-align: center; text-align: center;
} }
</style> </style>

@ -1,8 +1,6 @@
<template> <template>
<div class="wrap" <div class="wrap" v-loading="loading">
v-loading="loading"> <el-card shadow="hover" class="mgb20">
<el-card shadow="hover"
class="mgb20">
<div> <div>
<div class="flex-center mgb20"> <div class="flex-center mgb20">
<p class="hr_tag"></p> <p class="hr_tag"></p>
@ -13,57 +11,35 @@
<el-row> <el-row>
<el-col :span="5"> <el-col :span="5">
<el-form-item label="省份"> <el-form-item label="省份">
<el-select v-model="form.provinces" <el-select v-model="form.provinces" clearable placeholder="请选择省份" @change="getCity"
clearable @clear="clearprovince()">
placeholder="请选择省份" <el-option v-for="(item, index) in provinceList" :key="index" :label="item.provinceName"
@change="getCity" :value="item.provinceId"></el-option>
@clear="clearprovince()">
<el-option v-for="(item,index) in provinceList"
:key="index"
:label="item.provinceName"
:value="item.provinceId"></el-option>
</el-select> </el-select>
</el-form-item> </el-form-item>
</el-col> </el-col>
<el-col :span="5"> <el-col :span="5">
<el-form-item label="城市"> <el-form-item label="城市">
<el-select v-model="form.city" <el-select v-model="form.city" clearable placeholder="请选择城市" :disabled="form.provinces ? false : true"
clearable @clear="clearcity()" @change="initData">
placeholder="请选择城市" <el-option v-for="(item, index) in cityList" :key="index" :label="item.cityName"
:disabled="form.provinces ? false : true" :value="item.cityId"></el-option>
@clear="clearcity()"
@change="initData">
<el-option v-for="(item,index) in cityList"
:key="index"
:label="item.cityName"
:value="item.cityId"></el-option>
</el-select> </el-select>
</el-form-item> </el-form-item>
</el-col> </el-col>
<el-col :span="5"> <el-col :span="5">
<el-form-item label="来源"> <el-form-item label="来源">
<el-select v-model="form.platformId" <el-select v-model="form.platformId" clearable placeholder="请选择来源" @change="initData">
clearable <el-option v-for="item in platformList" :key="item.value" :label="item.label"
placeholder="请选择来源" :value="item.value"></el-option>
@change="initData">
<el-option v-for="item in platformList"
:key="item.value"
:label="item.label"
:value="item.value"></el-option>
</el-select> </el-select>
</el-form-item> </el-form-item>
</el-col> </el-col>
<el-col :span="5"> <el-col :span="5">
<el-form-item label="学校"> <el-form-item label="学校">
<el-select v-model="form.schoolId" <el-select v-model="form.schoolId" clearable filterable placeholder="请选择学校" @change="initData">
clearable <el-option v-for="(item, index) in schoolList" :key="index" :label="item.schoolName"
filterable :value="item.schoolId"></el-option>
placeholder="请选择学校"
@change="initData">
<el-option v-for="(item,index) in schoolList"
:key="index"
:label="item.schoolName"
:value="item.schoolId"></el-option>
</el-select> </el-select>
</el-form-item> </el-form-item>
</el-col> </el-col>
@ -77,35 +53,24 @@
</el-row> </el-row>
<el-row> <el-row>
<el-col :span="8"> <el-col :span="8">
<el-form-item label="创建时间" <el-form-item label="创建时间" class="userRadio">
class="userRadio">
<el-radio-group v-model="form.month"> <el-radio-group v-model="form.month">
<el-radio v-for="(item,index) in dateList" <el-radio v-for="(item, index) in dateList" :key="index" :label="item.id" border>{{ item.name
:key="index" }}</el-radio>
:label="item.id"
border>{{item.name}}</el-radio>
</el-radio-group> </el-radio-group>
</el-form-item> </el-form-item>
</el-col> </el-col>
<el-col :span="6"> <el-col :span="6">
<el-form-item label="自定义"> <el-form-item label="自定义">
<el-date-picker v-model="form.date" <el-date-picker v-model="form.date" align="right" unlink-panels type="daterange"
align="right" start-placeholder="开始日期" end-placeholder="结束日期" format="yyyy-MM-dd" value-format="yyyy-MM-dd"
unlink-panels clearable></el-date-picker>
type="daterange"
start-placeholder="开始日期"
end-placeholder="结束日期"
format="yyyy-MM-dd"
value-format="yyyy-MM-dd"
clearable></el-date-picker>
</el-form-item> </el-form-item>
</el-col> </el-col>
<el-col :span="6"> <el-col :span="6">
<el-form-item> <el-form-item>
<el-input placeholder="支持手机号,姓名" <el-input placeholder="支持手机号,姓名" prefix-icon="el-icon-search" v-model="form.keyword"
prefix-icon="el-icon-search" clearable></el-input>
v-model="form.keyword"
clearable></el-input>
</el-form-item> </el-form-item>
</el-col> </el-col>
</el-row> </el-row>
@ -115,88 +80,45 @@
</div> </div>
</el-card> </el-card>
<el-card shadow="hover" <el-card shadow="hover" class="card">
class="card">
<div class="flex-between mgb20"> <div class="flex-between mgb20">
<div class="flex-center"> <div class="flex-center">
<p class="hr_tag"></p> <p class="hr_tag"></p>
<span>用户列表</span> <span>用户列表</span>
</div> </div>
<div> <div>
<el-button type="primary" <el-button type="primary" round @click="delAllSelection" v-auth>批量删除</el-button>
round
@click="delAllSelection"
v-auth>批量删除</el-button>
</div> </div>
</div> </div>
<el-table :data="userData" <el-table :data="userData" class="table" ref="table" stripe header-align="center"
class="table" @selection-change="handleSelectionChange" row-key="userId">
ref="table" <el-table-column type="selection" width="55" align="center" :reserve-selection="true"></el-table-column>
stripe <el-table-column type="index" width="100" label="序号" align="center"></el-table-column>
header-align="center" <el-table-column prop="userName" label="姓名" align="center"></el-table-column>
@selection-change="handleSelectionChange" <el-table-column prop="phone" label="手机号" align="center"></el-table-column>
row-key="userId"> <el-table-column prop="schoolName" label="学校" align="center"></el-table-column>
<el-table-column type="selection" <el-table-column prop="platformName" label="来源" align="center"></el-table-column>
width="55" <el-table-column prop="createTime" label="创建时间" width="150" align="center"></el-table-column>
align="center" <el-table-column prop="logInNumber" label="登录次数" align="center"></el-table-column>
:reserve-selection="true"></el-table-column> <el-table-column prop="lastLoginTime" label="最近登录时间" align="center"></el-table-column>
<el-table-column type="index" <el-table-column label="操作" width="300" align="center">
width="100"
label="序号"
align="center"></el-table-column>
<el-table-column prop="userName"
label="姓名"
align="center"></el-table-column>
<el-table-column prop="phone"
label="手机号"
align="center"></el-table-column>
<el-table-column prop="schoolName"
label="学校"
align="center"></el-table-column>
<el-table-column prop="platformName"
label="来源"
align="center"></el-table-column>
<el-table-column prop="createTime"
label="创建时间"
width="150"
align="center"></el-table-column>
<el-table-column prop="logInNumber"
label="登录次数"
align="center"></el-table-column>
<el-table-column prop="lastLoginTime"
label="最近登录时间"
align="center"></el-table-column>
<el-table-column label="操作"
width="300"
align="center">
<template slot-scope="scope"> <template slot-scope="scope">
<el-button type="text" <el-button type="text" @click="toDetail(scope.row, 1)" v-auth>查看</el-button>
@click="toDetail(scope.row, 1)" <el-button v-if="scope.row.userId !== 1" type="text" @click="handleDelete(scope.row)" v-auth>删除</el-button>
v-auth>查看</el-button> <el-button type="text" @click="resetPassword(scope.row)" v-auth>重置密码</el-button>
<el-button v-if="scope.row.userId!==1" <!-- displayState 0禁用1启用2至少有一个状态为禁用变颜色展示为启用状态 -->
type="text" <el-switch v-if="scope.row.userId !== 1" :key="loading" v-model="scope.row.enable" :active-value="1"
@click="handleDelete(scope.row)" :inactive-value="0" :class="{ error: scope.row.displayState === 2 }" style="margin: 0 10px 0 5px"
v-auth>删除</el-button> :active-text="scope.row.enable ? '启用' : '禁用'"
<el-button type="text" :active-color="scope.row.displayState === 2 ? '#ff552c' : '#9076FF'"
@click="resetPassword(scope.row)" :inactive-color="scope.row.displayState === 2 ? '#ff552c' : '#dcdfe6'"
v-auth>重置密码</el-button> @change="switchOff($event, scope.row, scope.$index)" v-auth="'/user:启用'"></el-switch>
<el-switch v-if="scope.row.userId!==1"
v-model="scope.row.isEnable"
:active-value="1"
:inactive-value="0"
style="margin: 0 10px 0 5px"
:active-text="scope.row.isEnable ? '启用' : '禁用'"
@change="switchOff($event,scope.row,scope.$index)"
v-auth="'/user:启用'"></el-switch>
</template> </template>
</el-table-column> </el-table-column>
</el-table> </el-table>
<div class="pagination"> <div class="pagination">
<el-pagination background <el-pagination background @current-change="currentChange" :current-page="page" layout="total, prev, pager, next"
@current-change="currentChange" :total="totals">
:current-page="page"
layout="total, prev, pager, next"
:total="totals">
</el-pagination> </el-pagination>
</div> </div>
</el-card> </el-card>
@ -286,7 +208,8 @@ export default {
pageSize: 10, pageSize: 10,
totals: 0, totals: 0,
multipleSelection: [], multipleSelection: [],
loading: false loading: false,
}; };
}, },
watch: { watch: {
@ -326,7 +249,8 @@ export default {
}, },
methods: { methods: {
getData () { getData () {
let data = { this.loading = true
this.$post(this.api.userManagementList, {
countries: this.form.countries, countries: this.form.countries,
provinceId: this.form.provinces, provinceId: this.form.provinces,
cityId: this.form.city, cityId: this.form.city,
@ -339,29 +263,17 @@ export default {
searchContent: this.form.keyword, searchContent: this.form.keyword,
pageNum: this.page, pageNum: this.page,
pageSize: this.pageSize pageSize: this.pageSize
} }).then(({ page }) => {
this.loading = true const { records, total } = page
this.$post(this.api.queryUserInfoList, data).then(({ page, total }) => { records.map(e => {
const promises = [] e.enable = e.displayState
page.map(e => { if (e.enable === 2) {
promises.push(new Promise((resolve, reject) => { e.enable = 1
// }
this.$get(this.api.viewUserDetailsforNakadai, { userId: e.userId }).then(({ result }) => {
const platList = result.bindingPlatformAndUserList
// 1->0->
e.isEnable = platList.find(e => e.isEnable) ? 1 : 0
e.userIds = platList.map(e => e.userId) // userId
resolve()
}).catch((res) => {
reject()
})
}))
})
Promise.all(promises).then(_ => {
this.userData = page
this.totals = total
this.loading = false
}) })
this.userData = records
this.totals = total
this.loading = false
}).catch(res => { }).catch(res => {
this.loading = false this.loading = false
}) })
@ -423,7 +335,7 @@ export default {
this.$confirm('确定要删除吗?', '提示', { this.$confirm('确定要删除吗?', '提示', {
type: 'warning' type: 'warning'
}).then(() => { }).then(() => {
this.$post(this.api.delUserAccounts, row.userIds).then(res => { this.$post(this.api.delUserAccountsByNakadai, row.accountIds).then(res => {
this.$message.success('删除成功') this.$message.success('删除成功')
this.getData() this.getData()
}).catch(res => { }) }).catch(res => { })
@ -452,6 +364,7 @@ export default {
phone: row.phone phone: row.phone
}).then(res => { }).then(res => {
this.$message.success(val ? '启用成功' : '禁用成功') this.$message.success(val ? '启用成功' : '禁用成功')
this.getData()
}).catch(res => { }) }).catch(res => { })
}, },
// //
@ -459,7 +372,7 @@ export default {
// //
if (val) { if (val) {
// //
this.$post(`${this.api.oneClickEnableVerification}?accountId=${row.accountId}`).then(({ result }) => { this.$post(`${this.api.oneClickEnableVerification}?accountIds=${row.accountIds}`).then(({ result }) => {
this.switchUser(val, row) this.switchUser(val, row)
}).catch((res) => { }).catch((res) => {
// //
@ -482,16 +395,14 @@ export default {
}, },
delAllSelection () { delAllSelection () {
if (this.multipleSelection.length) { if (this.multipleSelection.length) {
let delList = this.multipleSelection.map(e => e.userId); let ids = []
this.multipleSelection.map(e => {
ids.push(...e.accountIds)
})
this.$confirm('确定要删除选中用户吗?', '提示', { this.$confirm('确定要删除选中用户吗?', '提示', {
type: 'warning' type: 'warning'
}).then(() => { }).then(() => {
this.$post(this.api.delUserAccounts, delList).then(res => { this.$post(this.api.delUserAccountsByNakadai, ids).then(res => {
if (delList.length == this.userData.length) {
if (this.page > 1) {
this.page = this.page - 1
}
}
this.$message.success('删除成功') this.$message.success('删除成功')
this.$refs.table.clearSelection() this.$refs.table.clearSelection()
this.getData() this.getData()
@ -509,23 +420,33 @@ export default {
<style lang="scss" scoped> <style lang="scss" scoped>
.el-form { .el-form {
min-width: 1800px; min-width: 1800px;
} }
.card { .card {
min-height: calc(100vh - 380px); min-height: calc(100vh - 380px);
} }
.el-form-item { .el-form-item {
margin-bottom: 0; margin-bottom: 0;
/deep/.el-radio {
width: 87px; /deep/.el-radio {
text-align: center; width: 87px;
.el-radio__label { text-align: center;
padding-left: 0;
} .el-radio__label {
} padding-left: 0;
.el-radio.is-bordered + .el-radio.is-bordered {
margin-left: 0;
} }
}
.el-radio.is-bordered+.el-radio.is-bordered {
margin-left: 0;
}
} }
</style>
/deep/.error {
.el-switch__label.is-active {
color: #ff552c;
}
}
</style>

Loading…
Cancel
Save