整合出校报备与报备审核

dev_yly
mfay 4 years ago
parent 1fc066b64a
commit 92d87c1133
  1. 1
      IOReportSysBE/WW_verify_oybSbwfJxjOnBTrL.txt
  2. 9
      IOReportSysBE/src/main/java/edu/ncst/ioreport/controller/IORecordsController.java
  3. 8
      IOReportSysBE/src/main/java/edu/ncst/ioreport/mapper/IORecordsMapper.java
  4. 8
      IOReportSysBE/src/main/java/edu/ncst/ioreport/model/IORecords.java
  5. 2
      IOReportSysBE/src/main/java/edu/ncst/ioreport/service/IIORecordService.java
  6. 43
      IOReportSysBE/src/main/java/edu/ncst/ioreport/service/impl/IORecordServiceImpl.java
  7. 1
      IOReportSysBE/src/main/java/edu/ncst/ioreport/service/impl/ResourceServiceImpl.java
  8. 17
      IOReportSysBE/src/main/java/edu/ncst/ioreport/service/impl/UserServiceImpl.java
  9. 3
      IOReportSysBE/src/main/java/edu/ncst/ioreport/vo/param/QRecord.java
  10. 6
      IOReportSysBE/src/main/resources/application.yml
  11. 38
      IOReportSysBE/src/main/resources/mapping/IORecordMapper.xml
  12. 2
      IOReportSysMP/miniprogram/components/yinput/yinput.js
  13. 86
      IOReportSysMP/miniprogram/pages/audit/detail/index.js
  14. 38
      IOReportSysMP/miniprogram/pages/audit/detail/index.ts
  15. 16
      IOReportSysMP/miniprogram/pages/audit/detail/index.wxml
  16. 94
      IOReportSysMP/miniprogram/pages/audit/list/auditList.js
  17. 37
      IOReportSysMP/miniprogram/pages/audit/list/auditList.ts
  18. 4
      IOReportSysMP/miniprogram/pages/audit/list/auditList.wxml
  19. 6
      IOReportSysMP/miniprogram/pages/index/index.scss
  20. 23
      IOReportSysMP/miniprogram/pages/report/detail/reportDetail.js
  21. 20
      IOReportSysMP/miniprogram/pages/report/detail/reportDetail.ts
  22. 11
      IOReportSysMP/miniprogram/pages/report/detail/reportDetail.wxml
  23. 5
      IOReportSysMP/miniprogram/pages/report/enter/enterReport.js
  24. 8
      IOReportSysMP/miniprogram/pages/report/enter/enterReport.wxml
  25. 109
      IOReportSysMP/miniprogram/pages/report/out/outerReport.js
  26. 31
      IOReportSysMP/miniprogram/pages/report/out/outerReport.scss
  27. 88
      IOReportSysMP/miniprogram/pages/report/out/outerReport.ts
  28. 79
      IOReportSysMP/miniprogram/pages/report/out/outerReport.wxml
  29. 1
      IOReportSysMP/miniprogram/pages/report/out/outerReport.wxss
  30. 80
      IOReportSysMP/miniprogram/services/api-lock.json
  31. 30
      IOReportSysMP/miniprogram/services/api.d.ts
  32. 10
      IOReportSysMP/miniprogram/services/baseClass.js
  33. 11
      IOReportSysMP/miniprogram/services/baseClass.ts
  34. 2
      IOReportSysMP/miniprogram/services/mods/iORecords/addIORecord.js
  35. 4
      IOReportSysMP/miniprogram/services/mods/iORecords/addIORecord.ts
  36. 21
      IOReportSysMP/miniprogram/services/mods/iORecords/getIORecordsAuditList.js
  37. 29
      IOReportSysMP/miniprogram/services/mods/iORecords/getIORecordsAuditList.ts
  38. 4
      IOReportSysMP/miniprogram/services/mods/iORecords/index.js
  39. 8
      IOReportSysMP/miniprogram/services/mods/iORecords/index.ts

@ -30,7 +30,12 @@ public class IORecordsController {
List<IORecords> ioRecordsList = iioRecordService.getIORecordsList(param);
return ResultUtils.success(ioRecordsList);
}
@ApiOperation("获取报备记录列表")
@PostMapping("/audit-list")
public ResultVO<List<IORecords>> getIORecordsAuditList(@RequestBody QRecord param){
List<IORecords> ioRecordsList = iioRecordService.getIORecordsAuditList(param);
return ResultUtils.success(ioRecordsList);
}
@ApiOperation("根据记录ID获取记录详细信息")
@GetMapping("/detail")
public ResultVO<IORecords> getIORecordByID(@RequestParam(name = "ID") Integer ID){
@ -38,7 +43,7 @@ public class IORecordsController {
return ResultUtils.success(record);
}
@ApiOperation("根据记录ID获取记录详细信息")
@ApiOperation("新增一条报备记录")
@PostMapping("/add")
public ResultVO<Integer> addIORecord(@RequestBody IORecords param){
int id = iioRecordService.addIORecord(param);

@ -1,11 +1,19 @@
package edu.ncst.ioreport.mapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.core.toolkit.Constants;
import edu.ncst.ioreport.model.IORecords;
import edu.ncst.ioreport.model.Resource;
import org.apache.ibatis.annotations.Param;
import org.springframework.stereotype.Repository;
import java.util.List;
@Repository
public interface IORecordsMapper extends BaseMapper<IORecords> {
int insertAndGetId(IORecords record);
List<IORecords> selectAuditList(@Param(Constants.WRAPPER) QueryWrapper<IORecords> queryWrapper);
IORecords selectDetail(@Param(Constants.WRAPPER) QueryWrapper<IORecords> queryWrapper);
}

@ -1,6 +1,8 @@
package edu.ncst.ioreport.model;
import com.alibaba.fastjson.annotation.JSONField;
import com.baomidou.mybatisplus.annotation.*;
import com.fasterxml.jackson.annotation.JsonFormat;
import edu.ncst.ioreport.vo.QRToken;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
@ -46,27 +48,31 @@ public class IORecords {
@ApiModelProperty(value = "出入校时间")
@NotNull(message = "出入校时间不能为空")
@JSONField(format = "yyyy-MM-dd HH:mm")
private Date commitTime;
@ApiModelProperty(value = "院级审核人")
private Integer deptAuditorID;
@ApiModelProperty(value = "院级审核时间")
@JSONField(format = "yyyy-MM-dd HH:mm:ss")
private Date deptAuditTime;
@ApiModelProperty(value = "校级审核人")
private Integer schoolAuditorID;
@ApiModelProperty(value = "校级审核时间")
@JSONField(format = "yyyy-MM-dd HH:mm:ss")
private Date schoolAuditTime;
@ApiModelProperty(value = "核验人")
private Integer validatorID;
@ApiModelProperty(value = "核验时间")
@JSONField(format = "yyyy-MM-dd HH:mm:ss")
private Date validateTime;
@ApiModelProperty(value = "单据状态:0-保存;1-提交待审核;2-院级审核通过;3-校级审核通过;4-核验通过;9-院级审核不通过;8-校级审核不通过;7-核验不通过")
@ApiModelProperty(value = "单据状态:SUBMIT-提交待审核;DEPT_PASS-院级审核通过;SCHOOL_PASS-校级审核通过;VERIFY_PASS-核验通过;DEPT_DENY-院级审核不通过;SCHOOL_DENY-校级审核不通过;VERIFY_DENY-核验不通过;INVALID-无效")
private String status;
@ApiModelProperty(value = "教师")

@ -12,4 +12,6 @@ public interface IIORecordService {
IORecords getIORecordsDetail(Integer ID);
int addIORecord(IORecords record);
List<IORecords> getIORecordsAuditList(QRecord param);
}

@ -3,6 +3,7 @@ package edu.ncst.ioreport.service.impl;
import com.alibaba.fastjson.JSON;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.StringUtils;
import com.sun.org.apache.xpath.internal.operations.Bool;
import edu.ncst.ioreport.exception.BusinessException;
import edu.ncst.ioreport.exception.CodeMsg;
import edu.ncst.ioreport.mapper.IORecordsMapper;
@ -38,14 +39,52 @@ public class IORecordServiceImpl implements IIORecordService {
return list;
}
@Override
public List<IORecords> getIORecordsAuditList(QRecord query) {
IORecords ioRecords = new IORecords();
UserInfoVO user = SessionUtils.getCurrentUser();
if(user.getTeacherID().compareTo(query.getTeacherID()) !=0){
throw new BusinessException(CodeMsg.BUSINESS_ERROR.fillArgs("用户信息不匹配"));
}
Boolean canAccess = false;
Boolean schoolAudit = false;
for(String role:user.getRoles()){
if(role.contains("ADMIN")){
canAccess=true;
if(role.compareTo("S_ADMIN")==0){
schoolAudit = true;
}
}
}
if(!canAccess){
throw new BusinessException(CodeMsg.CAN_NOT_DATA_ACCESS);
}
QueryWrapper<IORecords> queryWrapper = new QueryWrapper(ioRecords);
queryWrapper.eq(query.getStatus()!=null,"status",query.getStatus());
queryWrapper.eq(query.getType()!=null,"ioType",query.getType());
if(schoolAudit){
queryWrapper.eq(query.getStatus()==null,"status","DEPT_PASS");
}else{
queryWrapper.eq("uu.departmentID",user.getDepartmentID());
queryWrapper.eq(query.getStatus()==null,"status","SUBMIT");
}
List<IORecords> list = recordsMapper.selectAuditList(queryWrapper);
return list;
}
@Override
public IORecords getIORecordsDetail(Integer ID) {
if(null==ID){
throw new BusinessException(CodeMsg.PARAM_ERROR.fillArgs("记录单ID为空"));
}
IORecords records = recordsMapper.selectById(ID);
QueryWrapper<IORecords> queryWrapper = new QueryWrapper<>();
queryWrapper.eq("id",ID);
IORecords records = recordsMapper.selectDetail(queryWrapper);
if(records.getStatus().compareTo("SCHOOL_PASS")==0){
if(!stringRedisTemplate.hasKey("qrToken_"+ID)){
@ -72,7 +111,7 @@ public class IORecordServiceImpl implements IIORecordService {
public int addIORecord(IORecords record) {
UserInfoVO user = SessionUtils.getCurrentUser();
List<String> roles = user.getRoles();
if(roles==null||(roles.size()==1&&user.getRoles().get(0).compareTo("DOOR_GUARD")==0)){
if(roles==null||(roles.size()==1&&user.getRoles().get(0).compareTo("DOORMEN")==0)){
throw new BusinessException(CodeMsg.CAN_NOT_DATA_ACCESS);
}
if(user.getTeacherID().compareTo(record.getTeacherID())!=0){

@ -57,6 +57,7 @@ public class ResourceServiceImpl implements IResourceService {
urls.add("/api/user/current");
urls.add("/api/records/detail");
urls.add("/api/records/list");
urls.add("/api/records/audit-list");
urls.add("/api/records/add");
return urls;
}

@ -25,7 +25,7 @@ public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements IU
@Override
public User getUserInfo(QUser query) {
User vo = new User();
vo.setTeacherID("1001");
vo.setTeacherID("1");
vo.setAddress("address 1111111");
vo.setUserName("zhangsan");
vo.setName("张三");
@ -36,7 +36,7 @@ public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements IU
public ListResultVO<User> getUserList(QUser query) {
User user = new User();
user.setAddress("address 1111111");
user.setTeacherID("1001");
user.setTeacherID("1");
user.setName("张三");
user.setIsInSchool(true);
ListResultVO listResultVO = new ListResultVO();
@ -57,7 +57,7 @@ public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements IU
BeanUtils.copyProperties(userinfo,user);
Department dept =new Department();
dept.setDepartment("人工智能");
dept.setDepartmentID("01");
dept.setDepartmentID("1");
user.setDept(dept);
user.setMobile("123344444");
return user;
@ -65,18 +65,19 @@ public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements IU
@Override
public UserDetails loadUserByWechatId(String wechatId) {
//用你的数据库信息来替换,查库获取用户信息'
User user = new User();
user.setAddress("address 1111111");
user.setTeacherID("1001");
user.setTeacherID("1");
user.setUserID(Integer.valueOf(1));
user.setName("张三");
List<String> roles = new ArrayList<>();
roles.add("Admin");//Teacher;Doorman
roles.add("S_ADMIN");//Teacher;DOORMEN;D_ADMIN;ADMIN
user.setRoles(roles);
user.setIsInSchool(true);
Department dept =new Department();
dept.setDepartment("人工智能");
dept.setDepartmentID("01");
dept.setDepartmentID("1");
user.setDept(dept);
return user;
}
@ -85,10 +86,10 @@ public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements IU
public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException {
User user = new User();
user.setAddress("address 1111111");
user.setTeacherID("1001");
user.setTeacherID("1");
user.setName("张三");
List<String> roles = new ArrayList<>();
roles.add("Admin");
roles.add("S_ADMIN");
user.setIsInSchool(true);
return user;
}

@ -11,6 +11,9 @@ import java.util.Date;
@ApiModel(description = "出入报备记录查询对象")
@Data
public class QRecord extends Query {
@ApiModelProperty(value = "用户id")
private Integer userID;
@ApiModelProperty(value = "教师工号")
private String teacherID;

@ -18,6 +18,12 @@ spring:
matching-strategy: ant_path_matcher
async:
request-timeout: 120000 #设置restful的api超时时间为60秒
jackson:
date-format:
## 格式为yyyy-MM-dd HH:mm:ss
date-format: yyyy-MM-dd HH:mm:ss
## 定时区,解决8小时的时间差问题
time-zone: GMT+8
server:
port: 8085
tomcat:

@ -1,7 +1,7 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="edu.ncst.ioreport.mapper.IORecordsMapper">
<resultMap id="Custodian" type="edu.ncst.ioreport.model.IORecords" autoMapping="true">
<resultMap id="IORecord" type="edu.ncst.ioreport.model.IORecords" autoMapping="true">
<association property="teacher" columnPrefix="t_" autoMapping="true"/>
<association property="deptAuditor" columnPrefix="d_" autoMapping="true"/>
<association property="schoolAuditor" columnPrefix="s_" autoMapping="true"/>
@ -12,4 +12,40 @@
insert into iorecords (teacherid,iotype,outerResidence,innerResidence,reason,committime,status)
values(#{teacherID},#{ioType},#{outerResidence},#{innerResidence},#{reason},#{commitTime},#{status})
</insert>
<select id="selectAuditList" resultMap="IORecord">
select r.*,
uu.name as t_name,uu.userID as t_userID,uu.teacherID as t_teacherID,uu.mobile as t_mobile,
du.name as d_name,du.userID as d_userID,du.teacherID as d_teacherID,du.mobile as d_mobile,
su.name as s_name,su.userID as s_userID,su.teacherID as s_teacherID,su.mobile as s_mobile,
vu.name as v_name,vu.userID as v_userID,vu.teacherID as v_teacherID,vu.mobile as v_mobile
from iorecords r
LEFT JOIN user uu on r.teacherID = uu.teacherID
LEFT JOIN user du on r.DeptAuditorID = du.teacherID
LEFT JOIN user su on r.SchoolAuditorID = su.teacherID
LEFT JOIN user vu on r.ValidatorID = vu.teacherID
<where>
<if test="ew!= null and ew.emptyOfWhere == false">
${ew.sqlSegment}
</if>
</where>
</select>
<select id="selectDetail" resultMap="IORecord">
select r.*,
uu.name as t_name,uu.userID as t_userID,uu.teacherID as t_teacherID,uu.mobile as t_mobile,
du.name as d_name,du.userID as d_userID,du.teacherID as d_teacherID,du.mobile as d_mobile,
su.name as s_name,su.userID as s_userID,su.teacherID as s_teacherID,su.mobile as s_mobile,
vu.name as v_name,vu.userID as v_userID,vu.teacherID as v_teacherID,vu.mobile as v_mobile
from iorecords r
LEFT JOIN user uu on r.teacherID = uu.teacherID
LEFT JOIN user du on r.DeptAuditorID = du.teacherID
LEFT JOIN user su on r.SchoolAuditorID = su.teacherID
LEFT JOIN user vu on r.ValidatorID = vu.teacherID
<where>
<if test="ew!= null and ew.emptyOfWhere == false">
${ew.sqlSegment}
</if>
</where>
</select>
</mapper>

@ -36,7 +36,7 @@ Component({
},
lifetimes: {
ready: function () {
var initValue = this.data.defaultValue || '';
var initValue = this.data.value || this.data.defaultValue || '';
this.dataset[this.data.bindValue] = initValue;
this.setData({ value: initValue });
},

@ -1,27 +1,89 @@
"use strict";
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
return new (P || (P = Promise))(function (resolve, reject) {
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
step((generator = generator.apply(thisArg, _arguments || [])).next());
});
};
var __generator = (this && this.__generator) || function (thisArg, body) {
var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
function verb(n) { return function (v) { return step([n, v]); }; }
function step(op) {
if (f) throw new TypeError("Generator is already executing.");
while (_) try {
if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
if (y = 0, t) op = [op[0] & 2, t.value];
switch (op[0]) {
case 0: case 1: t = op; break;
case 4: _.label++; return { value: op[1], done: false };
case 5: _.label++; y = op[1]; op = [0]; continue;
case 7: op = _.ops.pop(); _.trys.pop(); continue;
default:
if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
if (t[2]) _.ops.pop();
_.trys.pop(); continue;
}
op = body.call(thisArg, _);
} catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
}
};
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
var orderApi_1 = __importDefault(require("../../../api/orderApi/orderApi"));
var orderType = ['出校报备', '进校报备'];
var reportStatus = ['通过', '院级审核', '校级审核', '退回'];
var index_1 = __importDefault(require("../../../services/index"));
var ioRecordStatus = {
SAVE: '保存',
SUBMIT: "待审核",
DEPT_PASS: '院审通过',
SCHOOL_PASS: '校审通过',
VERIFY_PASS: '核验通过',
DEPT_DENY: '院审不通过',
SCHOOL_DENY: '校审不通过',
VERIFY_DENY: '核验不通过',
};
var ioRecordType = ['入校', '出校'];
Page({
data: {},
data: {
ioRecord: {},
teacher: {},
ioRecordType: ioRecordType,
ioRecordStatus: ioRecordStatus,
},
onLoad: function () {
var _this = this;
var reportID = wx.getStorageSync("auditList/auditList");
orderApi_1.default.getOrderDetailByOrderID(reportID).then(function (res) {
res.reportStatus = reportStatus[res.reportStatus];
res.reportType = orderType[res.reportType];
_this.setData(res);
return __awaiter(this, void 0, void 0, function () {
var reportID, res, record;
return __generator(this, function (_a) {
switch (_a.label) {
case 0:
reportID = wx.getStorageSync("auditList/auditList");
return [4 /*yield*/, index_1.default.API.iORecords.getIORecordByID.request({ ID: reportID })];
case 1:
res = _a.sent();
if (res && res.data) {
record = res.data;
console.log(record);
this.setData({ ioRecord: record ? record : null });
this.setData({ teacher: record ? record.teacher : null });
}
return [2 /*return*/];
}
});
});
},
onPass: function (event) {
orderApi_1.default.passOrder(event.currentTarget.dataset.reportID);
//orderApi.passOrder(event.currentTarget.dataset.reportID)
},
onDeny: function (event) {
orderApi_1.default.denyOrder(event.currentTarget.dataset.reportID);
//orderApi.denyOrder(event.currentTarget.dataset.reportID)
},
/**
* 生命周期函数--监听页面初次渲染完成

@ -1,24 +1,38 @@
import orderApi from "../../../api/orderApi/orderApi"
const orderType = ['出校报备', '进校报备']
const reportStatus = ['通过', '院级审核', '校级审核', '退回']
import services from "../../../services/index"
const ioRecordStatus = {
SAVE: '保存',
SUBMIT: "待审核",
DEPT_PASS:'院审通过',
SCHOOL_PASS:'校审通过',
VERIFY_PASS:'核验通过',
DEPT_DENY:'院审不通过',
SCHOOL_DENY:'校审不通过',
VERIFY_DENY:'核验不通过',
}
const ioRecordType = ['入校','出校']
Page({
data: {
ioRecord : {},
teacher:{},
ioRecordType,
ioRecordStatus,
},
onLoad() {
onLoad:async function() {
const reportID = wx.getStorageSync("auditList/auditList")
orderApi.getOrderDetailByOrderID(reportID).then(res => {
res.reportStatus = reportStatus[res.reportStatus as any] as any
res.reportType = orderType[res.reportType as any] as any
this.setData(res)
})
let res = await services.API.iORecords.getIORecordByID.request({ID:reportID});
if(res&&res.data){
let record = res.data;
console.log(record);
this.setData({ioRecord:record?record:null});
this.setData({teacher:record?record.teacher:null});
}
},
onPass(event: WechatMiniprogram.Input) {
orderApi.passOrder(event.currentTarget.dataset.reportID)
//orderApi.passOrder(event.currentTarget.dataset.reportID)
},
onDeny(event: WechatMiniprogram.Input) {
orderApi.denyOrder(event.currentTarget.dataset.reportID)
//orderApi.denyOrder(event.currentTarget.dataset.reportID)
},
/**
* --

@ -1,15 +1,15 @@
<navigationBar title="审核详情"></navigationBar>
<view class="report-info-container">
<view class="card-col-1">
<yinput onlyRead padding="6px" label="工号:" defaultValue="{{id}}" />
<yinput onlyRead padding="6px" label="姓名:" defaultValue="{{name}}" />
<yinput onlyRead padding="6px" label="工号:" defaultValue="{{teacher.teacherID}}" />
<yinput onlyRead padding="6px" label="姓名:" defaultValue="{{teacher.name}}" />
</view>
<yinput onlyRead padding="6px" label="手机号:" defaultValue="{{phone}}" />
<yinput onlyRead padding="6px" label="类型:" defaultValue="{{reportType}}" />
<yinput onlyRead padding="6px" label="状态:" defaultValue="{{reportStatus}}" />
<yinput onlyRead padding="6px" label="校内居住地:" defaultValue="{{phone}}" />
<yinput onlyRead padding="6px" label="校外居住地:" defaultValue="{{outerLocation}}" />
<yinput onlyRead padding="6px" label="事由:" defaultValue="{{reason}}" />
<yinput onlyRead padding="6px" label="手机号:" defaultValue="{{teacher.mobile}}" />
<yinput onlyRead padding="6px" label="类型:" defaultValue="{{ioRecordType[ioRecord.ioType]}}" />
<yinput onlyRead padding="6px" label="状态:" defaultValue="{{ioRecordStatus[ioRecord.status]}}" />
<yinput onlyRead padding="6px" label="校内居住地:" defaultValue="{{ioRecord.innerResidence}}" />
<yinput onlyRead padding="6px" label="校外居住地:" defaultValue="{{ioRecord.outerResidence}}" />
<yinput onlyRead padding="6px" label="事由:" defaultValue="{{ioRecord.reason}}" />
</view>
<view class="submit-button">
<ybutton bindtap="onPass" class="button-item" lineHeight="50px" title="通过" bgColor="var(--color-primary)" />

@ -1,5 +1,46 @@
"use strict";
// pages/my-report/myReport.ts
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
return new (P || (P = Promise))(function (resolve, reject) {
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
step((generator = generator.apply(thisArg, _arguments || [])).next());
});
};
var __generator = (this && this.__generator) || function (thisArg, body) {
var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
function verb(n) { return function (v) { return step([n, v]); }; }
function step(op) {
if (f) throw new TypeError("Generator is already executing.");
while (_) try {
if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
if (y = 0, t) op = [op[0] & 2, t.value];
switch (op[0]) {
case 0: case 1: t = op; break;
case 4: _.label++; return { value: op[1], done: false };
case 5: _.label++; y = op[1]; op = [0]; continue;
case 7: op = _.ops.pop(); _.trys.pop(); continue;
default:
if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
if (t[2]) _.ops.pop();
_.trys.pop(); continue;
}
op = body.call(thisArg, _);
} catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
}
};
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
var index_1 = __importDefault(require("../../../services/index"));
var constant_1 = __importDefault(require("../../../utils/constant"));
Page({
/**
* 页面的初始数据
@ -16,23 +57,52 @@ Page({
}
},
bindtap: function (event) {
var reportID = event.currentTarget.dataset.reportID;
wx.setStorageSync("auditList/auditList", reportID);
wx.navigateTo({ url: "../auditDetail/auditDetail" });
var reportid = event.currentTarget.dataset.reportid;
wx.setStorageSync("auditList/auditList", reportid);
wx.navigateTo({ url: "../detail/index" });
},
onSubmit: function (_a) {
var detail = _a.detail;
// orderApi.getOrderDetailFilter(detail.reportType, detail.reportStatus).then(res => {
// this.setData({reportInfos:res || []})
// })
onSubmit: function (detail) {
return __awaiter(this, void 0, void 0, function () {
var res;
return __generator(this, function (_a) {
switch (_a.label) {
case 0: return [4 /*yield*/, index_1.default.API.iORecords.getIORecordsList.request(detail)];
case 1:
res = _a.sent();
if (res && res.data) {
console.log(res.data);
this.setData({ reportInfos: res.data || [] });
}
return [2 /*return*/];
}
});
});
},
/**
* 生命周期函数--监听页面加载
*/
onLoad: function () {
// 单据id 报备时间 报备类型 审核人 审核状态
// 锁? 多人同时操作一个订单怎么办
// orderApi.getOrderInfo().then(res => this.setData({ reportInfos: res || [] }))
return __awaiter(this, void 0, void 0, function () {
var user, res;
return __generator(this, function (_a) {
switch (_a.label) {
case 0:
user = wx.getStorageSync(constant_1.default.USER_INFO);
console.log("user", user);
if (!user || !user.teacherID) {
wx.navigateTo({ url: "../../index/index.ts" });
}
return [4 /*yield*/, index_1.default.API.iORecords.getIORecordsAuditList.request({ teacherID: user.teacherID })];
case 1:
res = _a.sent();
if (res && res.data) {
console.log(res.data);
this.setData({ reportInfos: res.data || [] });
}
return [2 /*return*/];
}
});
});
},
/**
* 生命周期函数--监听页面初次渲染完成

@ -1,4 +1,8 @@
// pages/my-report/myReport.ts
import { QRecord } from "../../../services/baseClass"
import services from "../../../services/index"
import constant from "../../../utils/constant"
Page({
/**
@ -16,22 +20,34 @@ Page({
}
},
bindtap(event: WechatMiniprogram.Input) {
const { reportID } = event.currentTarget.dataset
wx.setStorageSync("auditList/auditList", reportID)
wx.navigateTo({ url: "../auditDetail/auditDetail" })
const { reportid } = event.currentTarget.dataset
wx.setStorageSync("auditList/auditList", reportid)
wx.navigateTo({ url: "../detail/index" })
},
onSubmit({ detail }: { detail: Record<string, string> }) {
// orderApi.getOrderDetailFilter(detail.reportType, detail.reportStatus).then(res => {
// this.setData({reportInfos:res || []})
// })
onSubmit:async function( detail : QRecord) {
let res = await services.API.iORecords.getIORecordsList.request(detail);
if(res&&res.data){
console.log(res.data)
this.setData({reportInfos:res.data||[]})
}
},
/**
* --
*/
onLoad() {
onLoad:async function() {
// 单据id 报备时间 报备类型 审核人 审核状态
// 锁? 多人同时操作一个订单怎么办
// orderApi.getOrderInfo().then(res => this.setData({ reportInfos: res || [] }))
const user = wx.getStorageSync(constant.USER_INFO);
console.log("user",user);
if(!user||!user.teacherID){
wx.navigateTo({url:"../../index/index.ts"})
}
let res = await services.API.iORecords.getIORecordsAuditList.request({teacherID:user.teacherID});
if(res&&res.data){
console.log(res.data)
this.setData({reportInfos:res.data||[]})
}
},
/**
@ -81,4 +97,5 @@ Page({
onShareAppMessage() {
}
})
})

@ -1,8 +1,8 @@
<view class="content-container">
<navigationBar title="审核列表" bindtap="bindTestTap"></navigationBar>
<navigationBar title="报备审核" bindtap="bindTestTap"></navigationBar>
<sysFilterBar bindonSubmit="onSubmit"></sysFilterBar>
<view class="cards-container">
<sysCard wx:for="{{reportInfos}}" reportStatus="{{item.reportStatus}}" reportType="{{item.reportType == '0' ? '出校报备' : '进校报备'}}" reportDateTime="{{item.reportDateTime}}" reviewer="{{item.reviewer}}" data-reportID="{{item.reportID}}" bindtap="bindtap" wx:key="reportID" />
<sysCard wx:for="{{reportInfos}}" reportStatus="{{item.status}}" reportType="{{item.ioType == '0' ? '进校报备' : '出校报备'}}" reportDateTime="{{item.commitTime}}" reviewer="{{item.schoolAuditorID==0?'无':item.schoolAuditorID}}" data-reportID="{{item.id}}" bindtap="bindtap" wx:key="id" />
</view>
</view>

@ -17,8 +17,8 @@
.btn-list {
display: flex;
flex-direction: column;
$btn-item-height: 120rpx;
$btn-item-icon: 116rpx;
$btn-item-height: 110rpx;
$btn-item-icon: 80rpx;
.btn-item {
display: flex;
@ -42,7 +42,7 @@
border-radius: 25rpx;
height: $btn-item-height;
line-height: $btn-item-height;
font-size: 32px;
font-size: 40rpx;
font-weight: 600;
color: black;
display: block;

@ -43,6 +43,18 @@ var baseClass_1 = require("../../../services/baseClass");
var weapp_qrcode_1 = __importDefault(require("../../../utils/weapp-qrcode/weapp-qrcode"));
var index_1 = __importDefault(require("../../../services/index"));
var util_1 = require("../../../utils/util");
// 字典数据
var ioRecordType = ['入校', '出校'];
var ioRecordStatus = {
SAVE: '保存',
SUBMIT: "待审核",
DEPT_PASS: '院审通过',
SCHOOL_PASS: '校审通过',
VERIFY_PASS: '核验通过',
DEPT_DENY: '院审不通过',
SCHOOL_DENY: '校审不通过',
VERIFY_DENY: '核验不通过',
};
Page({
/**
* 页面的初始数据
@ -50,7 +62,9 @@ Page({
data: {
showQrcode: false,
ioRecord: baseClass_1.IORecords,
expireTime: null
expireTime: null,
ioRecordType: ioRecordType,
ioRecordStatus: ioRecordStatus,
},
onTest: function () {
console.log(this.data);
@ -83,8 +97,9 @@ Page({
res = _a.sent();
if (res && res.data) {
record = res.data;
console.log(record);
if (record.status == 'SCHOOL_PASS') {
console.log(record);
console.log('SCHOOL_PASS');
this.setData({ showQrcode: true });
qrToken = record.qrToken;
this.drawQrcode(qrToken);
@ -135,8 +150,8 @@ Page({
/**
* 生命周期函数--监听页面初次渲染完成
*/
onReady: function () {
},
// onReady() {
// },
/**
* 生命周期函数--监听页面显示
*/

@ -3,16 +3,16 @@ import QR from '../../../utils/weapp-qrcode/weapp-qrcode'
import services from "../../../services/index"
import { formatDateTimeStr } from '../../../utils/util'
// 字典数据
const ioRecordType = ['入','出']
const ioRecordType = ['入','出']
const ioRecordStatus = {
SAVE: '保存',
SUBMIT: "提交待审核",
HOSPITAL_PASS:'院通过',
SCHOOL_PASS:'校通过',
VERIFICATION_PASS:'核验通过',
HOSPITAL_NOT_PASS:'院不通过',
SCHOOL_NOT_PASS:'校不通过',
VERIFICATION_NOT_PASS:'核验不通过',
SUBMIT: "待审核",
DEPT_PASS:'院审通过',
SCHOOL_PASS:'校审通过',
VERIFY_PASS:'核验通过',
DEPT_DENY:'院审不通过',
SCHOOL_DENY:'校审不通过',
VERIFY_DENY:'核验不通过',
}
Page({
@ -46,9 +46,9 @@ Page({
let res = await services.API.iORecords.getIORecordByID.request({ID:reportID});
if(res&&res.data){
let record = res.data;
console.log(record);
if (record.status == 'SCHOOL_PASS') {
console.log(record);
console.log('SCHOOL_PASS');
this.setData({ showQrcode: true })
const qrToken = record.qrToken;
this.drawQrcode(qrToken);

@ -5,22 +5,21 @@
<text class="countdown">到期时间:{{expireTime}}</text>
</view>
<view class="audit-info-container">
<text>审核人: {{ioRecord.deptAuditorID}}</text>
<text>审核时间: {{ioRecord.deptAuditorTime}}</text>
<text>审核人: {{ioRecord.deptAuditor?ioRecord.deptAuditor.name:'无'}}</text>
<text>审核时间: {{ioRecord.deptAuditorTime?ioRecord.deptAuditorTime:'无'}}</text>
<text>状态: {{ioRecordStatus[ioRecord.status]}}</text>
</view>
<view class="report-info-container">
<view class="card-col-1">
<yinput onlyRead padding="3px" label="工号:" value="{{ioRecord.teacherID}}" />
<yinput onlyRead padding="3px" label="姓名:" value="{{ioRecord.teacherID}}" />
<yinput onlyRead padding="3px" label="姓名:" value="{{ioRecord.name}}" />
</view>
<yinput onlyRead padding="3px" label="手机号:" value="{{ioRecord.mobile?ioRecord.mobile:'无'}}" />
<view class="card-col-1">
<yinput onlyRead padding="3px" label="类型:" value="{{ioRecordType[ioRecord.ioType]}}" />
</view>
<view class="card-col-1">
<yinput onlyRead padding="3px" label="状态:" value="{{ioRecordStatus[ioRecord.status]}}" />
</view>
<yinput onlyRead padding="3px" label="申请时间:" value="{{ioRecord.commitTime}}" />
<yinput onlyRead padding="3px" label="校内居住地:" value="{{ioRecord.innerResidence}}" />
<yinput onlyRead padding="3px" label="校外居住地:" value="{{ioRecord.outerResidence}}" />
<yinput onlyRead padding="3px" label="事由:" value="{{ioRecord.reason}}" />

@ -77,11 +77,6 @@ Page({
applyTime: e.detail.value,
});
},
ioTypeChange: function (e) {
this.setData({
ioType: this.data.ioTypesArray[e.detail.value],
});
},
// 获取文本框字数
inputs: function (e) {
var _a;

@ -3,7 +3,7 @@
<view class="card-col-1">
<yinput onlyRead padding="16rpx" label="工号:" bindValue="teacherID" value="{{teacherID}}" wx:if=""></yinput>
<yinput onlyRead padding="0" label="姓名:" bindValue="name" value="{{name}}"></yinput>
<yinput onlyRead padding="0" label="报备类型:" bindValue="name" value="进校报备"></yinput>
<yinput onlyRead padding="0" label="类型:" bindValue="name" value="进校报备"></yinput>
</view>
<yinput onlyRead padding="16rpx" label="联系方式:" bindValue="mobile" value="{{mobile}}" wx:if="" ></yinput>
<yinput onlyRead padding="16rpx" label="学院: " bindValue="dept" value="{{dept.department}}" wx:if=""></yinput>
@ -15,7 +15,7 @@
<view class="weui-cells weui-cells_form">
<view class="weui-cell weui-cell_active">
<view class="weui-cell__hd">
<view class="weui-label" id="js_date" aria-hidden="true">申请日期</view>
<view class="weui-label" id="js_date" aria-hidden="true">进校日期</view>
</view>
<view class="weui-cell__bd">
<picker mode="date" aria-role="combobox" aria-labelledby="js_date" start="{{applyDate}}" bindchange="bindDateChange">
@ -25,7 +25,7 @@
</view>
<view class="weui-cell weui-cell_active">
<view class="weui-cell__hd">
<view class="weui-label" aria-hidden="true" id="js_time">申请时间</view>
<view class="weui-label" aria-hidden="true" id="js_time">进校时间</view>
</view>
<view class="weui-cell__bd">
<picker aria-role="combobox" aria-labelledby="js_time" mode="time" bindchange="bindTimeChange">
@ -51,7 +51,7 @@
</view>
<view class="weui-cell weui-cell_active">
<view class="weui-cell__bd">
<textarea class="weui-textarea" required placeholder="请填写进校事由" name="reason" bindinput="inputs" placeholder-class="weui-input__placeholder" rows="3">
<textarea class="weui-textarea" required placeholder="请填写进校事由" name="reason" bindinput="inputs" placeholder-class="weui-input__placeholder" rows="3">
</textarea>
<view aria-role="option" class="weui-textarea-counter">
<span>已输入{{text_len?text_len:0}}字</span>/50

@ -10,36 +10,123 @@ var __assign = (this && this.__assign) || function () {
};
return __assign.apply(this, arguments);
};
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
return new (P || (P = Promise))(function (resolve, reject) {
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
step((generator = generator.apply(thisArg, _arguments || [])).next());
});
};
var __generator = (this && this.__generator) || function (thisArg, body) {
var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
function verb(n) { return function (v) { return step([n, v]); }; }
function step(op) {
if (f) throw new TypeError("Generator is already executing.");
while (_) try {
if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
if (y = 0, t) op = [op[0] & 2, t.value];
switch (op[0]) {
case 0: case 1: t = op; break;
case 4: _.label++; return { value: op[1], done: false };
case 5: _.label++; y = op[1]; op = [0]; continue;
case 7: op = _.ops.pop(); _.trys.pop(); continue;
default:
if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
if (t[2]) _.ops.pop();
_.trys.pop(); continue;
}
op = body.call(thisArg, _);
} catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
}
};
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
var orderApi_1 = __importDefault(require("../../../api/orderApi/orderApi"));
var constant_1 = __importDefault(require("../../../utils/constant"));
var util_1 = require("../../../utils/util");
var index_1 = __importDefault(require("../../../services/index"));
var today = util_1.formatDateStr();
// pages/enterReport/enterReport.ts
Page({
/**
* 页面的初始数据
*/
data: {
rules: {
enterDate: { require: { value: true, } },
innerLocation: { require: { value: true, } },
outerLocation: { require: { value: true, } },
reason: { require: { value: true, } },
}
startDate: today,
applyDate: today,
applyTime: '08:30',
ioTypesArray: ['进校', '出校'],
ioRecord: {},
ioType: '进校'
},
bindDateChange: function (e) {
this.setData({
applyDate: e.detail.value,
});
},
bindTimeChange: function (e) {
this.setData({
applyTime: e.detail.value,
});
},
// 获取文本框字数
inputs: function (e) {
var _a;
var value = e.detail.value;
this.setData((_a = {
text_len: value.length,
detail: value
},
_a["formData.detail"] = value,
_a));
},
onSubmit: function (_a) {
var detail = _a.detail;
// TODO gen order
var submitDate = __assign(__assign({}, detail), { reportDateTime: detail.enterDate + ' ' + detail.enterTime });
orderApi_1.default.submitOrder(submitDate);
return __awaiter(this, void 0, void 0, function () {
var submitRecord, res, reportid;
return __generator(this, function (_b) {
switch (_b.label) {
case 0:
// TODO gen order
if (!this.data.teacherID) {
wx.showToast({
title: '提交失败,缺少用户信息',
icon: 'none'
});
}
submitRecord = __assign(__assign({}, detail.value), { ioType: '1', teacherID: this.data.teacherID, commitTime: this.data.applyDate + ' ' + this.data.applyTime + ":00" });
return [4 /*yield*/, index_1.default.API.iORecords.addIORecord.request(submitRecord)];
case 1:
res = _b.sent();
console.log(res);
if (res && res.data) {
reportid = res.data;
wx.setStorageSync("myReport/myReport", reportid);
wx.navigateTo({ url: "../detail/reportDetail" });
}
return [2 /*return*/];
}
});
});
},
/**
* 生命周期函数--监听页面加载
*/
onLoad: function () {
this.setData(__assign(__assign({}, this.data), wx.getStorageSync(constant_1.default.USER_INFO)));
// wx.removeStorageSync(constant.USER_INFO);
var user = wx.getStorageSync(constant_1.default.USER_INFO);
if (!user) {
wx.navigateTo({ url: "../../index/index" });
}
this.setData(__assign(__assign({}, this.data), user));
},
/**
* 生命周期函数--监听页面初次渲染完成

@ -1,28 +1,49 @@
.card-container {
margin: 20px;
margin: 20rpx;
background-color: var(--color-gray-0);
box-shadow: 0px 4px 4px rgba(0, 0, 0, 0.25);
font-size: 17px;
// font-weight: 550;
.card-col-1 {
padding: 24rpx 0;
display: flex;
width: auto;
& yinput:nth-child(1) {
flex: 4 1 50px;
margin: 0 5rpx;
}
& yinput:nth-child(2) {
flex: 7 1 50px;
margin:0 5rpx;
}
}
}
.input-container {
padding-bottom: 80rpx;
.card-col-1 {
display: flex;
margin: 0 2px;
:nth-child(n){
:nth-child(n) {
flex: 1 1 0;
}
}
}
.submit-button {
position: absolute;
position: fixed;
bottom: 0;
left: 0;
right: 0;
display: flex;
background-color: var(--color-primary);
color: white;
width: 100%;
border-radius: 0;
z-index: 99;
}

@ -1,39 +1,95 @@
import orderApi from "../../../api/orderApi/orderApi"
import constant from "../../../utils/constant"
import { IORecords, User } from '../../../services/baseClass'
import { formatDateStr} from "../../../utils/util"
import services from "../../../services/index"
const today = formatDateStr();
interface IPageData {
ioTypesArray:any[],
ioRecord:IORecords,
startDate:String,
applyDate:String,
applyTime:String,
ioType:String
}
interface IPage {
}
// pages/enterReport/enterReport.ts
Page({
Page<IPageData,IPage>({
/**
*
*/
data: {
rules: {
enterDate: { require: { value: true, } },
innerLocation: { require: { value: true, } },
outerLocation: { require: { value: true, } },
reason: { require: { value: true, } },
}
startDate:today,
applyDate:today,
applyTime:'08:30',
ioTypesArray:['进校','出校'],
ioRecord:{},
ioType:'进校'
},
onSubmit({ detail }: { detail: Order.submitEventDetail }) {
bindDateChange(e:any) {
this.setData({
applyDate: e.detail.value,
});
},
bindTimeChange(e:any) {
this.setData({
applyTime: e.detail.value,
});
},
// 获取文本框字数
inputs: function (e: any) {
var value = e.detail.value;
this.setData({
text_len: value.length,
detail: value,
[`formData.detail`]: value
})
},
onSubmit:async function({ detail }: { detail: any}) {
// TODO gen order
const submitDate: Order.submitDetail = {
...detail,
reportDateTime: detail.enterDate + ' ' + detail.enterTime,
if(!this.data.teacherID){
wx.showToast({
title: '提交失败,缺少用户信息',
icon: 'none'
});
}
const submitRecord: IORecords = {
...detail.value,
ioType:'1',
teacherID:this.data.teacherID,
commitTime: this.data.applyDate + ' ' + this.data.applyTime+":00",
}
let res = await services.API.iORecords.addIORecord.request(submitRecord);
console.log(res);
if(res&&res.data){
let reportid = res.data;
wx.setStorageSync("myReport/myReport", reportid)
wx.navigateTo({url:"../detail/reportDetail"});
}
orderApi.submitOrder(submitDate)
},
/**
* --
*/
onLoad() {
// wx.removeStorageSync(constant.USER_INFO);
let user = wx.getStorageSync(constant.USER_INFO);
if(!user){
wx.navigateTo({url:"../../index/index"})
}
this.setData({
...this.data,
...(wx.getStorageSync(constant.USER_INFO) as User.userInfo)
...(user as User)
})
},
/**
* --
*/

@ -1,22 +1,63 @@
<navigationBar title="出校报备"></navigationBar>
<yform rules="{{rules}}" bindonSubmit="onSubmit">
<view class="card-container">
<view class="card-col-1">
<yinput onlyRead padding="16rpx" label="工号:" bindValue="ID" defaultValue="{{id}}"></yinput>
<yinput onlyRead padding="16rpx" label="姓名:" bindValue="name" defaultValue="{{name}}"></yinput>
</view>
<yinput onlyRead padding="16rpx" label="联系方式:" bindValue="phone" defaultValue="{{phone}}"></yinput>
<yinput onlyRead padding="16rpx" label="学院: " bindValue="depart" defaultValue="{{department}}"></yinput>
<view class="card-container">
<view class="card-col-1">
<yinput onlyRead padding="16rpx" label="工号:" bindValue="teacherID" value="{{teacherID}}" wx:if=""></yinput>
<yinput onlyRead padding="0" label="姓名:" bindValue="name" value="{{name}}"></yinput>
<yinput onlyRead padding="0" label="类型:" bindValue="name" value="出校报备"></yinput>
</view>
<view class="input-container">
<sysInput label="报备类型: " bindValue="orderType" defaultValue="0" style="display: none;" />
<view class="card-col-1">
<ydatePicker label="出校日期" bindValue="enterDate" />
<ytimePicker label="出校时间" bindValue="enterTime" />
<yinput onlyRead padding="16rpx" label="联系方式:" bindValue="mobile" value="{{mobile}}" wx:if="" ></yinput>
<yinput onlyRead padding="16rpx" label="学院: " bindValue="dept" value="{{dept.department}}" wx:if=""></yinput>
</view>
<form bindsubmit="onSubmit" rules="{{rules}}">
<view class="weui-cells weui-cells_form">
<view class="weui-cell weui-cell_active">
<view class="weui-cell__hd">
<view class="weui-label" id="js_date" aria-hidden="true">出校日期</view>
</view>
<view class="weui-cell__bd">
<picker mode="date" aria-role="combobox" aria-labelledby="js_date" start="{{applyDate}}" bindchange="bindDateChange">
<view class="weui-input">{{applyDate}}</view>
</picker>
</view>
</view>
<view class="weui-cell weui-cell_active">
<view class="weui-cell__hd">
<view class="weui-label" aria-hidden="true" id="js_time">出校时间</view>
</view>
<view class="weui-cell__bd">
<picker aria-role="combobox" aria-labelledby="js_time" mode="time" bindchange="bindTimeChange">
<view class="weui-input">{{applyTime}}</view>
</picker>
</view>
</view>
<view class="weui-cell weui-cell_active">
<view class="weui-cell__hd">
<label class="weui-label" style="width: 5em;">校外住址</label>
</view>
<view class="weui-cell__bd weui-flex">
<input class="weui-input" required placeholder="请输入校外住址" placeholder-class="weui-input__placeholder" name="outerResidence" value="{{outerResidence}}"/>
</view>
</view>
<view class="weui-cell weui-cell_active">
<view class="weui-cell__hd">
<label class="weui-label" style="width: 5em;">校内住址</label>
</view>
<view class="weui-cell__bd weui-flex">
<input class="weui-input" required placeholder="请输入校内住址" placeholder-class="weui-input__placeholder" name="innerResidence" value="{{innerResidence}}"/>
</view>
</view>
<view class="weui-cell weui-cell_active">
<view class="weui-cell__bd">
<textarea class="weui-textarea" required placeholder="请填写出校事由" name="reason" bindinput="inputs" placeholder-class="weui-input__placeholder" rows="3">
</textarea>
<view aria-role="option" class="weui-textarea-counter">
<span>已输入{{text_len?text_len:0}}字</span>/50
</view>
</view>
</view>
</view>
<sysInput label="校内居住地: " bindValue="innerLocation" />
<sysInput label="校外居住地: " bindValue="outerLocation" />
<sysTextarea label="事由: " bindValue="reason" />
</view>
<ybutton class="submit-button" title="申请" bgColor="var(--color-primary)" />
</yform>
<button class="submit-button" style="width: 100%;" formType="submit">提交</button>
</form>

@ -1 +0,0 @@
/* pages/report/out/outerReport.wxss */

@ -9,13 +9,36 @@
"consumes": [
"application/json"
],
"description": "根据记录ID获取记录详细信息",
"description": "新增一条报备记录",
"name": "addIORecord",
"method": "post",
"path": "/api/records/add",
"response": {
"typeArgs": [
{
"typeArgs": [],
"typeName": "number",
"isDefsType": false,
"templateIndex": -1,
"compileTemplateKeyword": "#/definitions/",
"enum": [],
"typeProperties": []
}
],
"typeName": "ResultVO",
"isDefsType": true,
"templateIndex": -1,
"compileTemplateKeyword": "#/definitions/",
"enum": [],
"typeProperties": []
},
"parameters": [
{
"in": "body",
"description": "param",
"name": "param",
"required": true,
"dataType": {
"typeArgs": [],
"typeName": "IORecords",
"isDefsType": true,
@ -24,6 +47,38 @@
"enum": [],
"typeProperties": []
}
}
]
},
{
"consumes": [
"application/json"
],
"description": "获取报备记录列表",
"name": "getIORecordsAuditList",
"method": "post",
"path": "/api/records/audit-list",
"response": {
"typeArgs": [
{
"typeArgs": [
{
"typeArgs": [],
"typeName": "IORecords",
"isDefsType": true,
"templateIndex": -1,
"compileTemplateKeyword": "#/definitions/",
"enum": [],
"typeProperties": []
}
],
"typeName": "Array",
"isDefsType": false,
"templateIndex": -1,
"compileTemplateKeyword": "#/definitions/",
"enum": [],
"typeProperties": []
}
],
"typeName": "ResultVO",
"isDefsType": true,
@ -40,7 +95,7 @@
"required": true,
"dataType": {
"typeArgs": [],
"typeName": "IORecords",
"typeName": "QRecord",
"isDefsType": true,
"templateIndex": -1,
"compileTemplateKeyword": "#/definitions/",
@ -881,7 +936,7 @@
"typeProperties": []
},
"name": "status",
"description": "单据状态:0-保存;1-提交待审核;2-院级审核通过;3-校级审核通过;4-核验通过;9-院级审核不通过;8-校级审核不通过;7-核验不通过",
"description": "单据状态:SUBMIT-提交待审核;DEPT_PASS-院级审核通过;SCHOOL_PASS-校级审核通过;VERIFY_PASS-核验通过;DEPT_DENY-院级审核不通过;SCHOOL_DENY-校级审核不通过;VERIFY_DENY-核验不通过;INVALID-无效",
"required": false
},
{
@ -1046,7 +1101,7 @@
{
"dataType": {
"typeArgs": [],
"typeName": "string",
"typeName": "number",
"isDefsType": false,
"templateIndex": -1,
"compileTemplateKeyword": "#/definitions/",
@ -1156,6 +1211,20 @@
"name": "type",
"description": "记录类型",
"required": false
},
{
"dataType": {
"typeArgs": [],
"typeName": "number",
"isDefsType": false,
"templateIndex": -1,
"compileTemplateKeyword": "#/definitions/",
"enum": [],
"typeProperties": []
},
"name": "userID",
"description": "用户id",
"required": false
}
]
},
@ -1520,7 +1589,7 @@
"typeProperties": []
},
"name": "dept",
"description": "角色列表",
"description": "所属学院",
"required": false
},
{
@ -1534,6 +1603,7 @@
"typeProperties": []
},
"name": "enabled",
"description": "是否在校 1:在校 0:未在",
"required": false
},
{

@ -56,7 +56,7 @@ declare namespace defs {
/** 校级审核人 */
schoolAuditorID?: number;
/** 单据状态:0-保存;1-提交待审核;2-院级审核通过;3-校级审核通过;4-核验通过;9-院级审核不通过;8-校级审核不通过;7-核验不通过 */
/** 单据状态:SUBMIT-提交待审核;DEPT_PASS-院级审核通过;SCHOOL_PASS-校级审核通过;VERIFY_PASS-核验通过;DEPT_DENY-院级审核不通过;SCHOOL_DENY-校级审核不通过;VERIFY_DENY-核验不通过;INVALID-无效 */
status?: string;
/** 教师 */
@ -91,7 +91,7 @@ declare namespace defs {
export class QRToken {
/** expireTime */
expireTime?: string;
expireTime?: number;
/** recordID */
recordID?: number;
@ -115,6 +115,9 @@ declare namespace defs {
/** 记录类型 */
type?: string;
/** 用户id */
userID?: number;
}
export class QUser {
@ -189,10 +192,10 @@ declare namespace defs {
/** 所属单位 */
departmentID?: number;
/** 角色列表 */
/** 所属学院 */
dept?: defs.Department;
/** enabled */
/** 是否在校 1:在校 0:未在 */
enabled?: boolean;
/** 是否在校 1:在校 0:未在 */
@ -230,11 +233,11 @@ declare namespace API {
*/
export namespace iORecords {
/**
* ID获取记录详细信息
*
* /api/records/add
*/
export namespace addIORecord {
export type ResponseType = Promise<defs.ResultVO<defs.IORecords>>;
export type ResponseType = Promise<defs.ResultVO<number>>;
export const URL: string;
@ -244,6 +247,21 @@ declare namespace API {
): ResponseType;
}
/**
*
* /api/records/audit-list
*/
export namespace getIORecordsAuditList {
export type ResponseType = Promise<defs.ResultVO<Array<defs.IORecords>>>;
export const URL: string;
export function request(
bodyParams: defs.QRecord,
options?: WechatMiniprogram.RequestOption,
): ResponseType;
}
/**
* ID获取记录详细信息
* /api/records/detail

@ -47,7 +47,7 @@ var IORecords = /** @class */ (function () {
this.schoolAuditor = new User();
/** 校级审核人 */
this.schoolAuditorID = undefined;
/** 单据状态:0-保存;1-提交待审核;2-院级审核通过;3-校级审核通过;4-核验通过;9-院级审核不通过;8-校级审核不通过;7-核验不通过 */
/** 单据状态:SUBMIT-提交待审核;DEPT_PASS-院级审核通过;SCHOOL_PASS-校级审核通过;VERIFY_PASS-核验通过;DEPT_DENY-院级审核不通过;SCHOOL_DENY-校级审核不通过;VERIFY_DENY-核验不通过;INVALID-无效 */
this.status = '';
/** 教师 */
this.teacher = new User();
@ -80,7 +80,7 @@ exports.ListResultVO = ListResultVO;
var QRToken = /** @class */ (function () {
function QRToken() {
/** expireTime */
this.expireTime = '';
this.expireTime = undefined;
/** recordID */
this.recordID = undefined;
}
@ -101,6 +101,8 @@ var QRecord = /** @class */ (function () {
this.teacherID = '';
/** 记录类型 */
this.type = '';
/** 用户id */
this.userID = undefined;
}
return QRecord;
}());
@ -173,9 +175,9 @@ var User = /** @class */ (function () {
this.authorities = [];
/** 所属单位 */
this.departmentID = undefined;
/** 角色列表 */
/** 所属学院 */
this.dept = new Department();
/** enabled */
/** 是否在校 1:在校 0:未在 */
this.enabled = false;
/** 是否在校 1:在校 0:未在 */
this.isInSchool = false;

@ -51,7 +51,7 @@ export class IORecords {
/** 校级审核人 */
schoolAuditorID = undefined;
/** 单据状态:0-保存;1-提交待审核;2-院级审核通过;3-校级审核通过;4-核验通过;9-院级审核不通过;8-校级审核不通过;7-核验不通过 */
/** 单据状态:SUBMIT-提交待审核;DEPT_PASS-院级审核通过;SCHOOL_PASS-校级审核通过;VERIFY_PASS-核验通过;DEPT_DENY-院级审核不通过;SCHOOL_DENY-校级审核不通过;VERIFY_DENY-核验不通过;INVALID-无效 */
status = '';
/** 教师 */
@ -86,7 +86,7 @@ export class ListResultVO {
export class QRToken {
/** expireTime */
expireTime = '';
expireTime = undefined;
/** recordID */
recordID = undefined;
@ -110,6 +110,9 @@ export class QRecord {
/** 记录类型 */
type = '';
/** 用户id */
userID = undefined;
}
export class QUser {
@ -184,10 +187,10 @@ export class User {
/** 所属单位 */
departmentID = undefined;
/** 角色列表 */
/** 所属学院 */
dept = new Department();
/** enabled */
/** 是否在校 1:在校 0:未在 */
enabled = false;
/** 是否在校 1:在校 0:未在 */

@ -4,7 +4,7 @@ exports.request = exports.URL = void 0;
var util_1 = require("../../../utils/util");
exports.URL = '/api/records/add';
/**
* @desc 根据记录ID获取记录详细信息
* @desc 新增一条报备记录
*/
function request(bodyParams, options) {
var url = '/api/records/add';

@ -1,11 +1,11 @@
import { fetch } from '../../../utils/util';
export type ResponseType = Promise<defs.ResultVO<defs.IORecords>>;
export type ResponseType = Promise<defs.ResultVO<number>>;
export const URL = '/api/records/add';
/**
* @desc ID获取记录详细信息
* @desc
*/
export function request(
bodyParams: defs.IORecords,

@ -0,0 +1,21 @@
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.request = exports.URL = void 0;
var util_1 = require("../../../utils/util");
exports.URL = '/api/records/audit-list';
/**
* @desc 获取报备记录列表
*/
function request(bodyParams, options) {
var url = '/api/records/audit-list';
var fetchOption = Object.assign({
url: url,
method: 'POST',
headers: {
'Content-Type': 'application/json',
},
data: bodyParams,
}, options);
return util_1.fetch(fetchOption);
}
exports.request = request;

@ -0,0 +1,29 @@
import { fetch } from '../../../utils/util';
export type ResponseType = Promise<defs.ResultVO<Array<defs.IORecords>>>;
export const URL = '/api/records/audit-list';
/**
* @desc
*/
export function request(
bodyParams: defs.QRecord,
options?: WechatMiniprogram.RequestOption,
): ResponseType {
let url = '/api/records/audit-list';
const fetchOption = Object.assign(
{
url: url,
method: 'POST',
headers: {
'Content-Type': 'application/json',
},
data: bodyParams,
},
options,
);
return fetch(fetchOption);
}

@ -19,12 +19,14 @@ var __importStar = (this && this.__importStar) || function (mod) {
return result;
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.getIORecordsList = exports.getIORecordByID = exports.addIORecord = void 0;
exports.getIORecordsList = exports.getIORecordByID = exports.getIORecordsAuditList = exports.addIORecord = void 0;
/**
* @description 出入校报备记录控制器
*/
var addIORecord = __importStar(require("./addIORecord"));
exports.addIORecord = addIORecord;
var getIORecordsAuditList = __importStar(require("./getIORecordsAuditList"));
exports.getIORecordsAuditList = getIORecordsAuditList;
var getIORecordByID = __importStar(require("./getIORecordByID"));
exports.getIORecordByID = getIORecordByID;
var getIORecordsList = __importStar(require("./getIORecordsList"));

@ -2,7 +2,13 @@
* @description
*/
import * as addIORecord from './addIORecord';
import * as getIORecordsAuditList from './getIORecordsAuditList';
import * as getIORecordByID from './getIORecordByID';
import * as getIORecordsList from './getIORecordsList';
export { addIORecord, getIORecordByID, getIORecordsList };
export {
addIORecord,
getIORecordsAuditList,
getIORecordByID,
getIORecordsList,
};

Loading…
Cancel
Save