Explorar o código

修复部分问题

warrior hai 1 mes
pai
achega
f4a4b8b52d
Modificáronse 18 ficheiros con 161 adicións e 129 borrados
  1. 2 2
      projects/textbook/src/app/textbook/textbook.component.html
  2. 2 1
      projects/textbook/src/app/textbook/textbook.component.ts
  3. 1 2
      projects/textbook/src/modules/login/account-info/account-info.component.ts
  4. 1 1
      projects/textbook/src/modules/login/login/login.component.ts
  5. 1 1
      projects/textbook/src/modules/login/register/register.component.ts
  6. 1 1
      projects/textbook/src/modules/login/reset-password/reset-password.component.ts
  7. 10 0
      projects/textbook/src/modules/nav-admin/page-process/process-create/process-create.component.ts
  8. 1 1
      projects/textbook/src/modules/nav-admin/page-role/page-role.component.ts
  9. 1 1
      projects/textbook/src/modules/nav-admin/page-textbook/page-textbook.component.ts
  10. 1 1
      projects/textbook/src/modules/nav-admin/page-user/page-user.component.ts
  11. 1 1
      projects/textbook/src/modules/nav-admin/page-user/user-create/user-create.component.ts
  12. 1 1
      projects/textbook/src/modules/nav-admin/user-edit/user-edit.component.ts
  13. 114 99
      projects/textbook/src/modules/nav-province-contact/activity/activity.component.ts
  14. 6 0
      projects/textbook/src/modules/nav-province-contact/components/review-details/review-details.component.ts
  15. 1 1
      projects/textbook/src/modules/nav-province-contact/page-process/page-process.component.html
  16. 1 1
      projects/textbook/src/modules/nav-province-contact/page-role/page-role.component.ts
  17. 15 14
      projects/textbook/src/modules/nav-province-contact/page-textbook/page-textbook.component.ts
  18. 1 1
      projects/textbook/src/services/compute.ts

+ 2 - 2
projects/textbook/src/app/textbook/textbook.component.html

@@ -293,8 +293,8 @@
           }
         </td>
         }
-        <td nzEllipsis [nzAlign]="'right'" nzRight>
-          {{ scoreMap[data.id]?.score ?? "-" }}
+        <td nzEllipsis [nzAlign]="'center'" nzRight>
+          {{ (filterObj.btns.scoreRview ? data?.get("score") : scoreMap[data.id]?.score) ?? "-" }}
         </td>
         }
         <td nzEllipsis nzRight>

+ 2 - 1
projects/textbook/src/app/textbook/textbook.component.ts

@@ -81,7 +81,8 @@ export class TextbookComponent implements OnInit {
       mark: false, //打分
       exportExcel:false, //导出表格
       uploadPDF:false, //教材作者诚信承诺上传
-      changStatus:false //变更状态(高危操作)
+      changStatus:false, //变更状态(高危操作)
+      scoreRview:false, //显示评分
     },
   };
   @Input('scoreMap') scoreMap:any = {} //评分状态

+ 1 - 2
projects/textbook/src/modules/login/account-info/account-info.component.ts

@@ -164,8 +164,7 @@ export class AccountInfoComponent implements OnInit {
         this.message.error('单位名称未选择或与单位类型不匹配,请重新选择');
         return;
       }
-      let a =
-        /^(([^<>()[\]\\.,;:\s@"]+(\.[^<>()[\]\\.,;:\s@"]+)*)|(".+"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/;
+      let a = /^1[3-9]\d{9}$/;
       if (!String(this.validateForm.value.email).match(a)) {
         this.message.error('邮箱格式不正确');
         return;

+ 1 - 1
projects/textbook/src/modules/login/login/login.component.ts

@@ -181,7 +181,7 @@ export class LoginComponent implements OnInit{
   /* 获取验证码 */
   codeDown: boolean = false;
   startCountdown() {
-    let a = /^1[3456789]\d{9}$/;
+    let a = /^1[3-9]\d{9}$/;
     let { phoneNumber, code } = this.validateFormPhone.value
     console.log(phoneNumber);
     if (!String(phoneNumber).match(a)) {

+ 1 - 1
projects/textbook/src/modules/login/register/register.component.ts

@@ -173,7 +173,7 @@ export class RegisterComponent implements OnInit{
   /* 获取验证码 */
   codeDown: boolean = false;
   startCountdown() {
-    let a = /^1[3456789]\d{9}$/;
+    let a = /^1[3-9]\d{9}$/;
     let { phoneNumber, code } = this.validateFormPhone.value
     console.log(phoneNumber);
     if (!String(phoneNumber).match(a)) {

+ 1 - 1
projects/textbook/src/modules/login/reset-password/reset-password.component.ts

@@ -50,7 +50,7 @@ export class ResetPasswordComponent {
   //添加倒计时开始和结束的判断
   isCountingdown = false;
   startCountdown() {
-    let a = /^1[3456789]\d{9}$/;
+    let a = /^1[3-9]\d{9}$/;
     if (!String(this.mobile).match(a)) {
       this.msg.error("请填写正确手机号");
       return;

+ 10 - 0
projects/textbook/src/modules/nav-admin/page-process/process-create/process-create.component.ts

@@ -360,6 +360,16 @@ export class ProcessCreateComponent implements OnInit {
     this.isVisible = false;
   }
   async handleOk(): Promise<void> {
+    let query = new Parse.Query('EduProcess');
+    query.equalTo('department', this.department);
+    query.notEqualTo('isDeleted', true);
+    query.notEqualTo('objectId', this.eduProcess?.id);
+    query.select('objectId');
+    let r = await query.first();
+    if (r?.id) {
+      this.msg.warning('该单位已存在流程');
+      return;
+    }
     this.eduProcess?.set('branch', {
       __type: 'Pointer',
       className: 'Department',

+ 1 - 1
projects/textbook/src/modules/nav-admin/page-role/page-role.component.ts

@@ -813,7 +813,7 @@ export class PageRoleComponent implements OnInit {
       this.message.error('请选择人员类型');
       return;
     }
-    let a = /^(?:(?:\+|00)86)?1[3-9]\d{9}$/;
+    let a = /^1[3-9]\d{9}$/;
     if (this.account.phone && !String(this.account.phone).match(a)) {
       this.message.error('请填写正确手机号');
       return;

+ 1 - 1
projects/textbook/src/modules/nav-admin/page-textbook/page-textbook.component.ts

@@ -40,7 +40,7 @@ export class PageTextbookComponent implements OnInit {
     showMore: true, //显示更多字段
     isCheck: false,
     status: ['400'],
-    btns: { eduReivew: true, edit: true },
+    btns: { eduReivew: true, edit: true, scoreRview:true },
   };
   allFilterObj: any = {
     // showMore: true, //显示更多字段

+ 1 - 1
projects/textbook/src/modules/nav-admin/page-user/page-user.component.ts

@@ -609,7 +609,7 @@ export class PageUserComponent implements OnInit {
       this.message.error('请选择人员类型');
       return;
     }
-    let a = /^(?:(?:\+|00)86)?1[3-9]\d{9}$/;
+    let a = /^1[3-9]\d{9}$/;
     if (this.account.phone && !String(this.account.phone).match(a)) {
       this.message.error('请填写正确手机号');
       return;

+ 1 - 1
projects/textbook/src/modules/nav-admin/page-user/user-create/user-create.component.ts

@@ -192,7 +192,7 @@ export class UserCreateComponent implements OnInit {
         this.message.error('请选择单位类型');
         return;
       }
-      let a = /^(?:(?:\+|00)86)?1[3-9]\d{9}$/;
+      let a = /^1[3-9]\d{9}$/;
       if (
         this.validateForm.value.phone &&
         !String(this.validateForm.value.phone).match(a)

+ 1 - 1
projects/textbook/src/modules/nav-admin/user-edit/user-edit.component.ts

@@ -542,7 +542,7 @@ export class UserEditComponent implements OnInit {
       this.message.error('请选择人员类型');
       return;
     }
-    let a = /^(?:(?:\+|00)86)?1[3-9]\d{9}$/;
+    let a = /^1[3-9]\d{9}$/;
     if (this.userJson.phone && !String(this.userJson.phone).match(a)) {
       this.message.error('请填写正确手机号');
       return;

+ 114 - 99
projects/textbook/src/modules/nav-province-contact/activity/activity.component.ts

@@ -24,7 +24,7 @@ import { NzSpinModule } from 'ng-zorro-antd/spin';
 import { MatDialogRef } from '@angular/material/dialog';
 import { DatePipe } from '@angular/common';
 import { NzModalService } from 'ng-zorro-antd/modal';
-import { ReviewDetailsComponent } from '../components/review-details/review-details.component'
+import { ReviewDetailsComponent } from '../components/review-details/review-details.component';
 
 @Component({
   selector: 'app-activity',
@@ -45,7 +45,7 @@ import { ReviewDetailsComponent } from '../components/review-details/review-deta
     CompUploadComponent,
     MatDialogModule,
     NzSpinModule,
-    ReviewDetailsComponent
+    ReviewDetailsComponent,
   ],
   providers: [DatePipe],
   standalone: true,
@@ -55,10 +55,10 @@ export class ActivityComponent implements OnInit {
   eduProcess: Parse.Object | undefined;
 
   listOfFilter: Array<any> = []; //评审组
-  filterObj:any = {
-    showGroup:true,
+  filterObj: any = {
+    showGroup: true,
     contained: [],
-    bookMap:{},//教材对应评审组结构{booid:评审组名称}
+    bookMap: {}, //教材对应评审组结构{booid:评审组名称}
   };
 
   constructor(
@@ -68,9 +68,9 @@ export class ActivityComponent implements OnInit {
     private msg: NzMessageService,
     public dialog: MatDialog,
     private modal: NzModalService
-  ) { }
+  ) {}
 
-  saveLoading = true
+  saveLoading = true;
   ngOnInit() {
     this.activeRoute.paramMap.subscribe(async (params) => {
       let id = params.get('id');
@@ -86,150 +86,167 @@ export class ActivityComponent implements OnInit {
           );
         }
         this.eduProcess = res;
-        this.refersh()
+        this.refersh();
       }
     });
   }
   async refersh() {
-    await this.getActivity()
-    await this.getExpertGroup()
-    this.saveLoading = false
+    await this.getActivity();
+    await this.getExpertGroup();
+    this.saveLoading = false;
   }
-  company: string = localStorage.getItem('company')!
+  company: string = localStorage.getItem('company')!;
   /**评审活动 */
-  activity?: Parse.Object
+  activity?: Parse.Object;
   /**获取评审活动 */
   async getActivity() {
-    console.log(this.eduProcess?.id, this.company)
-    let query = new Parse.Query('Activity')
-    query.notEqualTo('isDeleted', true)
-    query.equalTo('eduProcess', this.eduProcess?.id)
+    console.log(this.eduProcess?.id, this.company);
+    let query = new Parse.Query('Activity');
+    query.notEqualTo('isDeleted', true);
+    query.equalTo('eduProcess', this.eduProcess?.id);
     // query.equalTo('company', this.company)
-    this.activity = await query.first()
-    console.log(this.activity)
+    this.activity = await query.first();
+    console.log(this.activity);
     if (this.activity?.id) {
-      this.name = this.activity?.get('name') || ''
-      this.startDate = this.activity?.get('startDate') || new Date()
-      this.deadline = this.activity?.get('deadline') || null
-      this.calculation = this.activity?.get('calculation') || 'mean'
-      this.reviewDetails = this.activity?.get('reviewDetails') || {}
+      this.name = this.activity?.get('name') || '';
+      this.startDate = this.activity?.get('startDate') || new Date();
+      this.deadline = this.activity?.get('deadline') || null;
+      this.calculation = this.activity?.get('calculation') || 'mean';
+      this.reviewDetails = this.activity?.get('reviewDetails') || {};
     } else {
-      let Activity = Parse.Object.extend('Activity')
-      this.activity = new Activity()
+      let Activity = Parse.Object.extend('Activity');
+      this.activity = new Activity();
     }
   }
   /**活动名称 */
-  name: string = ''
-  startDate?: any
-  deadline?: any
+  name: string = '';
+  startDate?: any;
+  deadline?: any;
   reset() {
-    this.name = ''
-    this.startDate = null
-    this.deadline = null
+    this.name = '';
+    this.startDate = null;
+    this.deadline = null;
   }
   /**保存活动 */
   async save() {
     if (this.name == '' && !this.name) {
-      this.msg.create('warning', '评审活动名称不能为空')
-      return
+      this.msg.create('warning', '评审活动名称不能为空');
+      return;
     }
     if (!this.activity?.id) {
-      this.activity?.set('company', { __type: 'Pointer', className: 'Company', objectId: this.company })
-      this.activity?.set('eduProcess', { __type: 'Pointer', className: 'EduProcess', objectId: this.eduProcess?.id })
+      this.activity?.set('company', {
+        __type: 'Pointer',
+        className: 'Company',
+        objectId: this.company,
+      });
+      this.activity?.set('eduProcess', {
+        __type: 'Pointer',
+        className: 'EduProcess',
+        objectId: this.eduProcess?.id,
+      });
     }
-    this.activity?.set('name', this.name)
-    this.activity?.set('startDate', this.startDate)
-    this.activity?.set('deadline', this.deadline)
-    this.activity?.set('calculation', this.calculation || 'mean')
-    this.activity?.set('reviewDetails', this.reviewDetails || {})
-    this.activity = await this.activity?.save()
-    this.msg.create('success', '保存成功')
-
+    this.activity?.set('name', this.name);
+    this.activity?.set('startDate', this.startDate);
+    this.activity?.set('deadline', this.deadline);
+    this.activity?.set('calculation', this.calculation || 'mean');
+    this.activity?.set('reviewDetails', this.reviewDetails || {});
+    this.activity = await this.activity?.save();
+    this.msg.create('success', '保存成功');
   }
   /**计算方式 mean:平均数 truncatedMean:截尾平均数 */
-  calculation: 'truncatedMean' | 'mean' = 'truncatedMean'
+  calculation: 'truncatedMean' | 'mean' = 'truncatedMean';
   async changeCalculation() {
-    console.log(this.calculation)
-    this.msg.warning('计算方式已调整,请返回评审活动重新计算平均分')
-    this.save()
+    console.log(this.calculation);
+    this.msg.warning('计算方式已调整,请返回评审活动重新计算平均分');
+    this.save();
   }
   /**评审细则 */
-  reviewDetails: any
+  reviewDetails: any;
   async upload(e: any) {
-    console.log(e)
-    let file = e[0]
-    this.reviewDetails = file
-    console.log(this.reviewDetails)
+    console.log(e);
+    let file = e[0];
+    this.reviewDetails = file;
+    console.log(this.reviewDetails);
     if (this.reviewDetails?.url) {
-      this.save()
+      this.save();
     }
   }
 
   /**评审组 */
-  expertGroupList: Array<Parse.Object> = []
+  expertGroupList: Array<Parse.Object> = [];
   async getExpertGroup() {
-    let query = new Parse.Query('ExpertGroup')
-    query.equalTo('eduProcess', this.eduProcess?.id)
-    query.notEqualTo('isDeleted', true)
-    query.descending('updatedAt')//大到小
-    query.include('textbookList','reviewList.user')
-    this.expertGroupList = await query.find()
-    console.log(this.expertGroupList)
-    this.expertGroupList.forEach(item=>{
+    let query = new Parse.Query('ExpertGroup');
+    query.equalTo('eduProcess', this.eduProcess?.id);
+    query.notEqualTo('isDeleted', true);
+    query.descending('updatedAt'); //大到小
+    query.include('textbookList', 'reviewList.user');
+    this.expertGroupList = await query.find();
+    console.log(this.expertGroupList);
+    this.expertGroupList.forEach((item) => {
       this.listOfFilter.push({
-        text:item.get('name'),
-        value:item.id
-      })
-      item.get('textbookList')?.forEach( (book:Parse.Object)=> {
+        text: item.get('name'),
+        value: item.id,
+      });
+      item.get('textbookList')?.forEach((book: Parse.Object) => {
         this.filterObj.bookMap[book.id] = {
-          name:item.get('name'),
-          id:item.id
-        }
-        this.filterObj.contained.push(book.id)
+          name: item.get('name'),
+          id: item.id,
+        };
+        this.filterObj.contained.push(book.id);
       });
-    })
+    });
   }
   async deleteGroup(index: number) {
+    if (
+      this.activity?.get('deadline') < new Date() ||
+      (this.activity?.id && this.eduProcess?.get('status') == '201')
+    ) {
+      this.msg.create('warning', '活动已开始或截止,无法删除评审组');
+      return;
+    }
     this.modal.confirm({
       nzTitle: '删除评审组',
       nzContent: '你确定删除该评审组吗,删除后将不可撤销',
       nzOkText: '确认',
       nzOkType: 'primary',
       nzOkDanger: true,
-      nzOnOk:async () => {
-        this.expertGroupList[index].set('isDeleted', true)
-        await this.expertGroupList[index].save()
-        this.expertGroupList.splice(index, 1)
+      nzOnOk: async () => {
+        this.expertGroupList[index].set('isDeleted', true);
+        await this.expertGroupList[index].save();
+        this.expertGroupList.splice(index, 1);
       },
       nzCancelText: '取消',
-      nzOnCancel: () => console.log('Cancel')
+      nzOnCancel: () => console.log('Cancel'),
     });
   }
   /**创建评审组弹框 */
   creatReviewGroup() {
     const dialogRef = this.dialog.open(CreateReviewGroupContent, {
-      width: '400px'
+      width: '400px',
     });
-    let that = this
+    let that = this;
     dialogRef.afterClosed().subscribe(async (result) => {
-      let name = result
-      if (result = '' || !result) {
-        that.msg.create('warning', '评审组名称未填写')
-        return
+      let name = result;
+      if ((result = '' || !result)) {
+        that.msg.create('warning', '评审组名称未填写');
+        return;
       }
-      console.log(name)
-      let ExpertGroup = Parse.Object.extend('ExpertGroup')
-      let expertGroup = new ExpertGroup()
-      expertGroup.set('eduProcess', { __type: 'Pointer', className: 'EduProcess', objectId: that.eduProcess?.id })
-      expertGroup.set('name', name)
-      await expertGroup.save()
-      that.getExpertGroup()
-      that.msg.create('success', '创建成功')
-
+      console.log(name);
+      let ExpertGroup = Parse.Object.extend('ExpertGroup');
+      let expertGroup = new ExpertGroup();
+      expertGroup.set('eduProcess', {
+        __type: 'Pointer',
+        className: 'EduProcess',
+        objectId: that.eduProcess?.id,
+      });
+      expertGroup.set('name', name);
+      await expertGroup.save();
+      that.getExpertGroup();
+      that.msg.create('success', '创建成功');
     });
   }
-  goUrl(url:string){
-    this.router.navigate([url])
+  goUrl(url: string) {
+    this.router.navigate([url]);
   }
   back() {
     history.back();
@@ -239,8 +256,6 @@ export class ActivityComponent implements OnInit {
   }
 }
 
-
-
 @Component({
   selector: 'create_review',
   templateUrl: 'create_review.html',
@@ -255,9 +270,9 @@ export class ActivityComponent implements OnInit {
   ],
 })
 export class CreateReviewGroupContent {
-  constructor(private dialogRef: MatDialogRef<CreateReviewGroupContent>) { }
-  name: string = ''
+  constructor(private dialogRef: MatDialogRef<CreateReviewGroupContent>) {}
+  name: string = '';
   onConfirm() {
-    this.dialogRef.close(this.name)
+    this.dialogRef.close(this.name);
   }
 }

+ 6 - 0
projects/textbook/src/modules/nav-province-contact/components/review-details/review-details.component.ts

@@ -281,6 +281,7 @@ export class ReviewDetailsComponent implements OnInit {
         <th>所属学科专业类</th>
         <th>第一主编/作者</th>
         <th>出版单位</th>
+        <th>所属评审组</th>
     `;
     let l = 0;
     let dataLsit: any = Object.values(groupMap);
@@ -332,6 +333,11 @@ export class ReviewDetailsComponent implements OnInit {
       )}`;
       _body += '</td>';
 
+      _body += '<td>';
+      _body += `${this.filterObj.bookMap[dataLsit[row]?.eduTextbook?.id].name}`;
+      _body += '</td>';
+      
+
       for (let i = 0; i < l; i++) {
         const element = dataLsit[row]['groupList'][i];
         _body += '<td>';

+ 1 - 1
projects/textbook/src/modules/nav-province-contact/page-process/page-process.component.html

@@ -78,7 +78,7 @@
           </button>
           @if (activity?.id && authCompute) {
           <button [nzLoading]="isLoading" nzDanger nz-button nzType="primary" (click)="onCompute()">
-            计算平均
+            计算分
           </button>
           }
         </div>

+ 1 - 1
projects/textbook/src/modules/nav-province-contact/page-role/page-role.component.ts

@@ -785,7 +785,7 @@ export class PageRoleComponent implements OnInit {
       this.message.error("请选择人员类型");
       return;
     }
-    let a = /^(?:(?:\+|00)86)?1[3-9]\d{9}$/
+    let a = /^1[3-9]\d{9}$/;
     if(this.account.phone && !String(this.account.phone).match(a)){
       this.message.error("请填写正确手机号");
       return;

+ 15 - 14
projects/textbook/src/modules/nav-province-contact/page-textbook/page-textbook.component.ts

@@ -52,6 +52,8 @@ export class PageTextbookComponent implements OnInit {
       // reject: true, //退回教材
       // star: true, //移除推荐
       export: true,
+      eduReivew: true,
+      scoreRview:true
     },
   };
   //已加入推荐
@@ -62,10 +64,12 @@ export class PageTextbookComponent implements OnInit {
     btns: {
       // remove: true, //移除推荐
       export: true,
+      eduReivew: true,
+      scoreRview:true
     },
   };
   eduProcess?: Parse.Object;
-  editLoading:boolean = true
+  editLoading: boolean = true;
 
   //可导出汇总表
   filterObj: any = {
@@ -107,21 +111,15 @@ export class PageTextbookComponent implements OnInit {
     // query.greaterThan('deadline', new Date());
     query.notEqualTo('isDeleted', true);
     // query.notEqualTo('status', '100');
-    query.equalTo('profileSubmitted',this.tbookSer?.profile?.objectId)
+    query.equalTo('profileSubmitted', this.tbookSer?.profile?.objectId);
     let res = await query.first();
     let vrifly = await this.tbookSer.getEduProcess(parentMap[1]?.key);
     if (vrifly) {
-      this.beforeFilterObj.btns = {
-        reject: true, //退回教材
-        star: true, //移除推荐
-        export: true,
-      };
-      this.afterFilterObj.btns = {
-        remove: true, //移除推荐
-        export: true,
-      };
+      this.beforeFilterObj.btns['reject'] = true
+      this.beforeFilterObj.btns['star'] = true
+      this.afterFilterObj.btns['remove'] = true
     }
-    this.editLoading = false
+    this.editLoading = false;
     this.eduProcess = res;
   }
   toUrl(url: string, params?: object) {
@@ -140,9 +138,12 @@ export class PageTextbookComponent implements OnInit {
       );
       return;
     }
-    if(this.eduProcess?.get('deadline') && new Date() > new Date(this.eduProcess?.get('deadline'))){
+    if (
+      this.eduProcess?.get('deadline') &&
+      new Date() > new Date(this.eduProcess?.get('deadline'))
+    ) {
       this.message.warning('流程已逾期');
-      return
+      return;
     }
     // this.eduProcess?.set('status', '400');
     // this.eduProcess?.set('releaseDate', new Date());

+ 1 - 1
projects/textbook/src/services/compute.ts

@@ -99,5 +99,5 @@ export const accDiv = function accDiv(arg1: number, arg2: number): number {
   r1 = Number(arg1.toString().replace('.', ''));
   r2 = Number(arg2.toString().replace('.', ''));
   let n = (r1 / r2) * Math.pow(10, t2 - t1);
-  return Math.round(n)
+  return Math.round(n * 100) / 100;
 }