feat(asset): 添加资产报修维修功能模块
- 新增报修单创建页面,支持资产选择和故障描述录入 - 添加报修操作上下文类,统一管理操作人信息 - 创建报修订单实体类,定义完整的报修流程字段结构 - 实现报修订单控制器,提供从新增到完成的完整业务流程 - 添加报修订单数据访问层,支持查询和状态变更操作 - 集成报表单模板,实现前端表单验证和交互逻辑main
parent
f50c0f9aa3
commit
5f15c3f1f9
@ -0,0 +1,303 @@
|
||||
<?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="com.ruoyi.asset.mapper.AmsRepairOrderMapper">
|
||||
|
||||
<resultMap type="AmsRepairOrder" id="AmsRepairOrderResult">
|
||||
<result property="repairId" column="repair_id" />
|
||||
<result property="repairNo" column="repair_no" />
|
||||
<result property="assetId" column="asset_id" />
|
||||
<result property="assetCode" column="asset_code" />
|
||||
<result property="assetName" column="asset_name" />
|
||||
<result property="categoryId" column="category_id" />
|
||||
<result property="categoryCode" column="category_code" />
|
||||
<result property="categoryName" column="category_name" />
|
||||
<result property="specModel" column="spec_model" />
|
||||
<result property="brand" column="brand" />
|
||||
<result property="reportUserId" column="report_user_id" />
|
||||
<result property="reportUserName" column="report_user_name" />
|
||||
<result property="faultDesc" column="fault_desc" />
|
||||
<result property="reportTime" column="report_time" />
|
||||
<result property="expectedFinishTime" column="expected_finish_time" />
|
||||
<result property="repairerType" column="repairer_type" />
|
||||
<result property="repairUserId" column="repair_user_id" />
|
||||
<result property="repairUserName" column="repair_user_name" />
|
||||
<result property="repairOrgName" column="repair_org_name" />
|
||||
<result property="repairContactPhone" column="repair_contact_phone" />
|
||||
<result property="repairStartTime" column="repair_start_time" />
|
||||
<result property="repairFinishTime" column="repair_finish_time" />
|
||||
<result property="repairResult" column="repair_result" />
|
||||
<result property="repairCost" column="repair_cost" />
|
||||
<result property="beforeAssetStatus" column="before_asset_status" />
|
||||
<result property="rejectReason" column="reject_reason" />
|
||||
<result property="orderStatus" column="order_status" />
|
||||
<result property="createBy" column="create_by" />
|
||||
<result property="createTime" column="create_time" />
|
||||
<result property="updateBy" column="update_by" />
|
||||
<result property="updateTime" column="update_time" />
|
||||
<result property="remark" column="remark" />
|
||||
<result property="delFlag" column="del_flag" />
|
||||
</resultMap>
|
||||
|
||||
<resultMap type="AmsAsset" id="AvailableRepairAssetResult">
|
||||
<result property="assetId" column="asset_id" />
|
||||
<result property="assetCode" column="asset_code" />
|
||||
<result property="assetName" column="asset_name" />
|
||||
<result property="categoryId" column="category_id" />
|
||||
<result property="categoryCode" column="category_code" />
|
||||
<result property="categoryName" column="category_name" />
|
||||
<result property="specModel" column="spec_model" />
|
||||
<result property="brand" column="brand" />
|
||||
<result property="assetStatus" column="asset_status" />
|
||||
<result property="warehouseId" column="warehouse_id" />
|
||||
<result property="warehouseCode" column="warehouse_code" />
|
||||
<result property="warehouseName" column="warehouse_name" />
|
||||
<result property="locationId" column="location_id" />
|
||||
<result property="locationCode" column="location_code" />
|
||||
<result property="locationName" column="location_name" />
|
||||
<result property="tagCode" column="tag_code" />
|
||||
</resultMap>
|
||||
|
||||
<sql id="selectAmsRepairOrderVo">
|
||||
select repair_id, repair_no, asset_id, asset_code, asset_name, category_id, category_code, category_name, spec_model, brand, report_user_id, report_user_name, fault_desc, report_time, expected_finish_time, repairer_type, repair_user_id, repair_user_name, repair_org_name, repair_contact_phone, repair_start_time, repair_finish_time, repair_result, repair_cost, before_asset_status, reject_reason, order_status, create_by, create_time, update_by, update_time, remark, del_flag from ams_repair_order
|
||||
</sql>
|
||||
|
||||
<select id="selectAmsRepairOrderList" parameterType="AmsRepairOrder" resultMap="AmsRepairOrderResult">
|
||||
<include refid="selectAmsRepairOrderVo"/>
|
||||
<where>
|
||||
del_flag = '0'
|
||||
<if test="repairNo != null and repairNo != ''"> and repair_no like concat(#{repairNo}, '%')</if>
|
||||
<if test="assetId != null "> and asset_id = #{assetId}</if>
|
||||
<if test="assetCode != null and assetCode != ''"> and asset_code like concat(#{assetCode}, '%')</if>
|
||||
<if test="assetName != null and assetName != ''"> and asset_name like concat('%', #{assetName}, '%')</if>
|
||||
<if test="categoryId != null "> and category_id = #{categoryId}</if>
|
||||
<if test="categoryCode != null and categoryCode != ''"> and category_code = #{categoryCode}</if>
|
||||
<if test="categoryName != null and categoryName != ''"> and category_name like concat('%', #{categoryName}, '%')</if>
|
||||
<if test="specModel != null and specModel != ''"> and spec_model = #{specModel}</if>
|
||||
<if test="brand != null and brand != ''"> and brand = #{brand}</if>
|
||||
<if test="reportUserId != null "> and report_user_id = #{reportUserId}</if>
|
||||
<if test="reportUserName != null and reportUserName != ''"> and report_user_name like concat('%', #{reportUserName}, '%')</if>
|
||||
<if test="faultDesc != null and faultDesc != ''"> and fault_desc = #{faultDesc}</if>
|
||||
<if test="reportTime != null "> and report_time = #{reportTime}</if>
|
||||
<if test="params.beginReportTime != null and params.beginReportTime != ''">
|
||||
and report_time >= #{params.beginReportTime}
|
||||
</if>
|
||||
<if test="params.endReportTime != null and params.endReportTime != ''">
|
||||
and report_time < date_add(#{params.endReportTime}, interval 1 day)
|
||||
</if>
|
||||
<if test="expectedFinishTime != null "> and expected_finish_time = #{expectedFinishTime}</if>
|
||||
<if test="repairerType != null and repairerType != ''"> and repairer_type = #{repairerType}</if>
|
||||
<if test="repairUserId != null "> and repair_user_id = #{repairUserId}</if>
|
||||
<if test="repairUserName != null and repairUserName != ''"> and repair_user_name like concat('%', #{repairUserName}, '%')</if>
|
||||
<if test="repairOrgName != null and repairOrgName != ''"> and repair_org_name like concat('%', #{repairOrgName}, '%')</if>
|
||||
<if test="repairContactPhone != null and repairContactPhone != ''"> and repair_contact_phone = #{repairContactPhone}</if>
|
||||
<if test="repairStartTime != null "> and repair_start_time = #{repairStartTime}</if>
|
||||
<if test="repairFinishTime != null "> and repair_finish_time = #{repairFinishTime}</if>
|
||||
<if test="repairResult != null and repairResult != ''"> and repair_result = #{repairResult}</if>
|
||||
<if test="repairCost != null "> and repair_cost = #{repairCost}</if>
|
||||
<if test="beforeAssetStatus != null and beforeAssetStatus != ''"> and before_asset_status = #{beforeAssetStatus}</if>
|
||||
<if test="rejectReason != null and rejectReason != ''"> and reject_reason = #{rejectReason}</if>
|
||||
<if test="orderStatus != null and orderStatus != ''"> and order_status = #{orderStatus}</if>
|
||||
<if test='params.overdueFlag != null and params.overdueFlag == "Y"'>
|
||||
and expected_finish_time is not null
|
||||
and expected_finish_time < now()
|
||||
and order_status != 'REPAIR_DONE'
|
||||
</if>
|
||||
<if test='params.overdueFlag != null and params.overdueFlag == "N"'>
|
||||
and (
|
||||
expected_finish_time is null
|
||||
or expected_finish_time >= now()
|
||||
or order_status = 'REPAIR_DONE'
|
||||
)
|
||||
</if>
|
||||
</where>
|
||||
order by create_time desc, repair_id desc
|
||||
</select>
|
||||
|
||||
<select id="selectAmsRepairOrderByRepairId" parameterType="Long" resultMap="AmsRepairOrderResult">
|
||||
<include refid="selectAmsRepairOrderVo"/>
|
||||
where repair_id = #{repairId} and del_flag = '0'
|
||||
</select>
|
||||
|
||||
<select id="selectAmsRepairOrderByRepairIdForUpdate" parameterType="Long" resultMap="AmsRepairOrderResult">
|
||||
<include refid="selectAmsRepairOrderVo"/>
|
||||
where repair_id = #{repairId} and del_flag = '0'
|
||||
for update
|
||||
</select>
|
||||
|
||||
<insert id="insertAmsRepairOrder" parameterType="AmsRepairOrder" useGeneratedKeys="true" keyProperty="repairId">
|
||||
insert into ams_repair_order
|
||||
<trim prefix="(" suffix=")" suffixOverrides=",">
|
||||
<if test="repairNo != null and repairNo != ''">repair_no,</if>
|
||||
<if test="assetId != null">asset_id,</if>
|
||||
<if test="assetCode != null and assetCode != ''">asset_code,</if>
|
||||
<if test="assetName != null and assetName != ''">asset_name,</if>
|
||||
<if test="categoryId != null">category_id,</if>
|
||||
<if test="categoryCode != null">category_code,</if>
|
||||
<if test="categoryName != null">category_name,</if>
|
||||
<if test="specModel != null">spec_model,</if>
|
||||
<if test="brand != null">brand,</if>
|
||||
<if test="reportUserId != null">report_user_id,</if>
|
||||
<if test="reportUserName != null">report_user_name,</if>
|
||||
<if test="faultDesc != null">fault_desc,</if>
|
||||
<if test="reportTime != null">report_time,</if>
|
||||
<if test="expectedFinishTime != null">expected_finish_time,</if>
|
||||
<if test="repairerType != null and repairerType != ''">repairer_type,</if>
|
||||
<if test="repairUserId != null">repair_user_id,</if>
|
||||
<if test="repairUserName != null">repair_user_name,</if>
|
||||
<if test="repairOrgName != null">repair_org_name,</if>
|
||||
<if test="repairContactPhone != null">repair_contact_phone,</if>
|
||||
<if test="repairStartTime != null">repair_start_time,</if>
|
||||
<if test="repairFinishTime != null">repair_finish_time,</if>
|
||||
<if test="repairResult != null">repair_result,</if>
|
||||
<if test="repairCost != null">repair_cost,</if>
|
||||
<if test="beforeAssetStatus != null">before_asset_status,</if>
|
||||
<if test="rejectReason != null">reject_reason,</if>
|
||||
<if test="orderStatus != null and orderStatus != ''">order_status,</if>
|
||||
<if test="createBy != null">create_by,</if>
|
||||
<if test="createTime != null">create_time,</if>
|
||||
<if test="updateBy != null">update_by,</if>
|
||||
<if test="updateTime != null">update_time,</if>
|
||||
<if test="remark != null">remark,</if>
|
||||
<if test="delFlag != null and delFlag != ''">del_flag,</if>
|
||||
</trim>
|
||||
<trim prefix="values (" suffix=")" suffixOverrides=",">
|
||||
<if test="repairNo != null and repairNo != ''">#{repairNo},</if>
|
||||
<if test="assetId != null">#{assetId},</if>
|
||||
<if test="assetCode != null and assetCode != ''">#{assetCode},</if>
|
||||
<if test="assetName != null and assetName != ''">#{assetName},</if>
|
||||
<if test="categoryId != null">#{categoryId},</if>
|
||||
<if test="categoryCode != null">#{categoryCode},</if>
|
||||
<if test="categoryName != null">#{categoryName},</if>
|
||||
<if test="specModel != null">#{specModel},</if>
|
||||
<if test="brand != null">#{brand},</if>
|
||||
<if test="reportUserId != null">#{reportUserId},</if>
|
||||
<if test="reportUserName != null">#{reportUserName},</if>
|
||||
<if test="faultDesc != null">#{faultDesc},</if>
|
||||
<if test="reportTime != null">#{reportTime},</if>
|
||||
<if test="expectedFinishTime != null">#{expectedFinishTime},</if>
|
||||
<if test="repairerType != null and repairerType != ''">#{repairerType},</if>
|
||||
<if test="repairUserId != null">#{repairUserId},</if>
|
||||
<if test="repairUserName != null">#{repairUserName},</if>
|
||||
<if test="repairOrgName != null">#{repairOrgName},</if>
|
||||
<if test="repairContactPhone != null">#{repairContactPhone},</if>
|
||||
<if test="repairStartTime != null">#{repairStartTime},</if>
|
||||
<if test="repairFinishTime != null">#{repairFinishTime},</if>
|
||||
<if test="repairResult != null">#{repairResult},</if>
|
||||
<if test="repairCost != null">#{repairCost},</if>
|
||||
<if test="beforeAssetStatus != null">#{beforeAssetStatus},</if>
|
||||
<if test="rejectReason != null">#{rejectReason},</if>
|
||||
<if test="orderStatus != null and orderStatus != ''">#{orderStatus},</if>
|
||||
<if test="createBy != null">#{createBy},</if>
|
||||
<if test="createTime != null">#{createTime},</if>
|
||||
<if test="updateBy != null">#{updateBy},</if>
|
||||
<if test="updateTime != null">#{updateTime},</if>
|
||||
<if test="remark != null">#{remark},</if>
|
||||
<if test="delFlag != null and delFlag != ''">#{delFlag},</if>
|
||||
</trim>
|
||||
</insert>
|
||||
|
||||
<update id="updateAmsRepairOrder" parameterType="AmsRepairOrder">
|
||||
update ams_repair_order
|
||||
set repair_no = #{repairNo},
|
||||
asset_id = #{assetId},
|
||||
asset_code = #{assetCode},
|
||||
asset_name = #{assetName},
|
||||
category_id = #{categoryId},
|
||||
category_code = #{categoryCode},
|
||||
category_name = #{categoryName},
|
||||
spec_model = #{specModel},
|
||||
brand = #{brand},
|
||||
report_user_id = #{reportUserId},
|
||||
report_user_name = #{reportUserName},
|
||||
fault_desc = #{faultDesc},
|
||||
report_time = #{reportTime},
|
||||
expected_finish_time = #{expectedFinishTime},
|
||||
repairer_type = #{repairerType},
|
||||
repair_user_id = #{repairUserId},
|
||||
repair_user_name = #{repairUserName},
|
||||
repair_org_name = #{repairOrgName},
|
||||
repair_contact_phone = #{repairContactPhone},
|
||||
repair_start_time = #{repairStartTime},
|
||||
repair_finish_time = #{repairFinishTime},
|
||||
repair_result = #{repairResult},
|
||||
repair_cost = #{repairCost},
|
||||
before_asset_status = #{beforeAssetStatus},
|
||||
reject_reason = #{rejectReason},
|
||||
order_status = #{orderStatus},
|
||||
create_by = #{createBy},
|
||||
create_time = #{createTime},
|
||||
update_by = #{updateBy},
|
||||
update_time = #{updateTime},
|
||||
remark = #{remark},
|
||||
del_flag = #{delFlag}
|
||||
where repair_id = #{repairId} and del_flag = '0'
|
||||
<if test="params.expectedOrderStatus != null and params.expectedOrderStatus != ''">
|
||||
and order_status = #{params.expectedOrderStatus}
|
||||
</if>
|
||||
</update>
|
||||
|
||||
<!-- 逻辑删除:仅草稿单允许删除 -->
|
||||
<update id="deleteAmsRepairOrderByRepairId" parameterType="Long">
|
||||
update ams_repair_order set del_flag = '1' where repair_id = #{repairId} and del_flag = '0' and order_status = 'DRAFT'
|
||||
</update>
|
||||
|
||||
<update id="deleteAmsRepairOrderByRepairIds" parameterType="String">
|
||||
update ams_repair_order set del_flag = '1' where repair_id in
|
||||
<foreach item="repairId" collection="array" open="(" separator="," close=")">
|
||||
#{repairId}
|
||||
</foreach>
|
||||
and del_flag = '0' and order_status = 'DRAFT'
|
||||
</update>
|
||||
|
||||
<select id="countOtherActiveRepairOrderByAssetId" resultType="int">
|
||||
select count(1)
|
||||
from ams_repair_order
|
||||
where asset_id = #{assetId}
|
||||
and del_flag = '0'
|
||||
and order_status in
|
||||
<foreach item="status" collection="statuses" open="(" separator="," close=")">
|
||||
#{status}
|
||||
</foreach>
|
||||
<if test="currentRepairId != null">
|
||||
and repair_id != #{currentRepairId}
|
||||
</if>
|
||||
</select>
|
||||
|
||||
<select id="selectAvailableRepairAssetList" resultMap="AvailableRepairAssetResult">
|
||||
select asset.asset_id, asset.asset_code, asset.asset_name, asset.category_id,
|
||||
asset.category_code, asset.category_name, asset.spec_model, asset.brand,
|
||||
asset.asset_status, asset.warehouse_id, asset.warehouse_code, asset.warehouse_name,
|
||||
asset.location_id, asset.location_code, asset.location_name, asset.tag_code
|
||||
from ams_asset asset
|
||||
where asset.del_flag = '0'
|
||||
and asset.asset_status in
|
||||
<foreach item="status" collection="statuses" open="(" separator="," close=")">
|
||||
#{status}
|
||||
</foreach>
|
||||
and not exists (
|
||||
select 1
|
||||
from ams_repair_order r
|
||||
where r.asset_id = asset.asset_id
|
||||
and r.del_flag = '0'
|
||||
and r.order_status in
|
||||
<foreach item="rStatus" collection="activeRepairStatuses" open="(" separator="," close=")">
|
||||
#{rStatus}
|
||||
</foreach>
|
||||
<if test="currentRepairId != null">
|
||||
and r.repair_id != #{currentRepairId}
|
||||
</if>
|
||||
)
|
||||
<if test="asset.assetCode != null and asset.assetCode != ''">
|
||||
and asset.asset_code like concat('%', #{asset.assetCode}, '%')
|
||||
</if>
|
||||
<if test="asset.assetName != null and asset.assetName != ''">
|
||||
and asset.asset_name like concat('%', #{asset.assetName}, '%')
|
||||
</if>
|
||||
<if test="asset.categoryName != null and asset.categoryName != ''">
|
||||
and asset.category_name like concat('%', #{asset.categoryName}, '%')
|
||||
</if>
|
||||
order by asset.asset_id
|
||||
</select>
|
||||
</mapper>
|
||||
@ -0,0 +1,174 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="zh" xmlns:th="http://www.thymeleaf.org" >
|
||||
<head>
|
||||
<th:block th:include="include :: header('新增报修维修单')" />
|
||||
<th:block th:include="include :: datetimepicker-css" />
|
||||
</head>
|
||||
<body class="white-bg">
|
||||
<div class="wrapper wrapper-content animated fadeInRight ibox-content">
|
||||
<form class="form-horizontal m" id="form-repair-add">
|
||||
<h4 class="form-header h4">基本信息</h4>
|
||||
<div class="row">
|
||||
<div class="col-xs-6">
|
||||
<div class="form-group">
|
||||
<label class="col-sm-4 control-label is-required">选择资产:</label>
|
||||
<div class="col-sm-8">
|
||||
<div class="input-group">
|
||||
<input id="assetId" name="assetId" type="hidden" required>
|
||||
<input id="assetCode" name="assetCode" class="form-control" type="text" placeholder="请选择报修资产" readonly required>
|
||||
<span class="input-group-btn">
|
||||
<button type="button" class="btn btn-primary" onclick="selectAsset()"><i class="fa fa-search"></i> 选择</button>
|
||||
</span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-xs-6">
|
||||
<div class="form-group">
|
||||
<label class="col-sm-4 control-label">资产名称:</label>
|
||||
<div class="col-sm-8">
|
||||
<input id="assetName" name="assetName" class="form-control" type="text" readonly>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="row">
|
||||
<div class="col-xs-6">
|
||||
<div class="form-group">
|
||||
<label class="col-sm-4 control-label">资产类别:</label>
|
||||
<div class="col-sm-8">
|
||||
<input id="categoryName" name="categoryName" class="form-control" type="text" readonly>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-xs-6">
|
||||
<div class="form-group">
|
||||
<label class="col-sm-4 control-label">规格型号:</label>
|
||||
<div class="col-sm-8">
|
||||
<input id="specModel" name="specModel" class="form-control" type="text" readonly>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="row">
|
||||
<div class="col-xs-6">
|
||||
<div class="form-group">
|
||||
<label class="col-sm-4 control-label">品牌:</label>
|
||||
<div class="col-sm-8">
|
||||
<input id="brand" name="brand" class="form-control" type="text" readonly>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-xs-6">
|
||||
<div class="form-group">
|
||||
<label class="col-sm-4 control-label is-required">预计完成日期:</label>
|
||||
<div class="col-sm-8">
|
||||
<div class="input-group date">
|
||||
<input name="expectedFinishTime" class="form-control" placeholder="yyyy-MM-dd" type="text" required>
|
||||
<span class="input-group-addon"><i class="fa fa-calendar"></i></span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="row">
|
||||
<div class="col-xs-6">
|
||||
<div class="form-group">
|
||||
<label class="col-sm-4 control-label">报修人:</label>
|
||||
<div class="col-sm-8">
|
||||
<input name="reportUserId" th:value="${defaultReportUserId}" type="hidden">
|
||||
<input name="reportUserName" th:value="${defaultReportUserName}" class="form-control" type="text" readonly>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-xs-6">
|
||||
<div class="form-group">
|
||||
<label class="col-sm-4 control-label">报修时间:</label>
|
||||
<div class="col-sm-8">
|
||||
<input name="reportTime" th:value="${#dates.format(#dates.createNow(), 'yyyy-MM-dd HH:mm:ss')}" class="form-control" type="text" readonly>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="row">
|
||||
<div class="col-xs-12">
|
||||
<div class="form-group">
|
||||
<label class="col-sm-2 control-label is-required">故障描述:</label>
|
||||
<div class="col-sm-10">
|
||||
<textarea name="faultDesc" maxlength="500" class="form-control" rows="3" required placeholder="请详细描述资产故障表现..."></textarea>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="row">
|
||||
<div class="col-xs-12">
|
||||
<div class="form-group">
|
||||
<label class="col-sm-2 control-label">备注:</label>
|
||||
<div class="col-sm-10">
|
||||
<textarea name="remark" maxlength="500" class="form-control" rows="2" placeholder="备注信息..."></textarea>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
<th:block th:include="include :: footer" />
|
||||
<th:block th:include="include :: datetimepicker-js" />
|
||||
<script th:inline="javascript">
|
||||
var prefix = ctx + "asset/repair"
|
||||
$("#form-repair-add").validate({
|
||||
focusCleanup: true
|
||||
});
|
||||
|
||||
function submitHandler() {
|
||||
if ($.validate.form()) {
|
||||
$.operate.save(prefix + "/add", $('#form-repair-add').serialize());
|
||||
}
|
||||
}
|
||||
|
||||
function selectAsset() {
|
||||
var url = prefix + "/selectAsset";
|
||||
$.modal.openOptions({
|
||||
title: "选择可报修资产",
|
||||
url: url,
|
||||
width: "1200",
|
||||
height: "680",
|
||||
callBack: function(index, layero) {
|
||||
var iframeWindow = layero.find("iframe")[0].contentWindow;
|
||||
var selected = iframeWindow.getSelectedAssets();
|
||||
if (!selected || selected.length === 0) {
|
||||
$.modal.alertWarning("请选择一条资产记录");
|
||||
return;
|
||||
}
|
||||
if (selected.length > 1) {
|
||||
$.modal.alertWarning("一期报修仅支持一单一资产,请只选择一条资产");
|
||||
return;
|
||||
}
|
||||
var asset = selected[0];
|
||||
$("#assetId").val(asset.assetId);
|
||||
$("#assetCode").val(asset.assetCode);
|
||||
$("#assetName").val(asset.assetName);
|
||||
$("#categoryName").val(asset.categoryName);
|
||||
$("#specModel").val(asset.specModel || "-");
|
||||
$("#brand").val(asset.brand || "-");
|
||||
|
||||
$.modal.close(index);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
$("input[name='expectedFinishTime']").datetimepicker({
|
||||
format: "yyyy-mm-dd",
|
||||
minView: "month",
|
||||
todayBtn: true,
|
||||
autoclose: true,
|
||||
startDate: new Date() // 不能选择早于当天的日期
|
||||
});
|
||||
</script>
|
||||
</body>
|
||||
</html>
|
||||
@ -0,0 +1,187 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="zh" xmlns:th="http://www.thymeleaf.org" >
|
||||
<head>
|
||||
<th:block th:include="include :: header('修改报修维修单')" />
|
||||
<th:block th:include="include :: datetimepicker-css" />
|
||||
</head>
|
||||
<body class="white-bg">
|
||||
<div class="wrapper wrapper-content animated fadeInRight ibox-content">
|
||||
<form class="form-horizontal m" id="form-repair-edit" th:object="${amsRepairOrder}">
|
||||
<input name="repairId" th:field="*{repairId}" type="hidden">
|
||||
<h4 class="form-header h4">基本信息</h4>
|
||||
<div class="row">
|
||||
<div class="col-xs-6">
|
||||
<div class="form-group">
|
||||
<label class="col-sm-4 control-label">报修单号:</label>
|
||||
<div class="col-sm-8">
|
||||
<input name="repairNo" th:field="*{repairNo}" class="form-control" type="text" readonly>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-xs-6">
|
||||
<div class="form-group">
|
||||
<label class="col-sm-4 control-label is-required">选择资产:</label>
|
||||
<div class="col-sm-8">
|
||||
<div class="input-group">
|
||||
<input id="assetId" name="assetId" th:field="*{assetId}" type="hidden" required>
|
||||
<input id="assetCode" name="assetCode" th:field="*{assetCode}" class="form-control" type="text" placeholder="请选择报修资产" readonly required>
|
||||
<span class="input-group-btn">
|
||||
<button type="button" class="btn btn-primary" onclick="selectAsset()"><i class="fa fa-search"></i> 选择</button>
|
||||
</span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="row">
|
||||
<div class="col-xs-6">
|
||||
<div class="form-group">
|
||||
<label class="col-sm-4 control-label">资产名称:</label>
|
||||
<div class="col-sm-8">
|
||||
<input id="assetName" name="assetName" th:field="*{assetName}" class="form-control" type="text" readonly>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-xs-6">
|
||||
<div class="form-group">
|
||||
<label class="col-sm-4 control-label">资产类别:</label>
|
||||
<div class="col-sm-8">
|
||||
<input id="categoryName" name="categoryName" th:field="*{categoryName}" class="form-control" type="text" readonly>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="row">
|
||||
<div class="col-xs-6">
|
||||
<div class="form-group">
|
||||
<label class="col-sm-4 control-label">规格型号:</label>
|
||||
<div class="col-sm-8">
|
||||
<input id="specModel" name="specModel" th:field="*{specModel}" class="form-control" type="text" readonly>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-xs-6">
|
||||
<div class="form-group">
|
||||
<label class="col-sm-4 control-label">品牌:</label>
|
||||
<div class="col-sm-8">
|
||||
<input id="brand" name="brand" th:field="*{brand}" class="form-control" type="text" readonly>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="row">
|
||||
<div class="col-xs-6">
|
||||
<div class="form-group">
|
||||
<label class="col-sm-4 control-label is-required">预计完成日期:</label>
|
||||
<div class="col-sm-8">
|
||||
<div class="input-group date">
|
||||
<input name="expectedFinishTime" th:value="${#dates.format(amsRepairOrder.expectedFinishTime, 'yyyy-MM-dd')}" class="form-control" placeholder="yyyy-MM-dd" type="text" required>
|
||||
<span class="input-group-addon"><i class="fa fa-calendar"></i></span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-xs-6">
|
||||
<div class="form-group">
|
||||
<label class="col-sm-4 control-label">报修人:</label>
|
||||
<div class="col-sm-8">
|
||||
<input name="reportUserId" th:field="*{reportUserId}" type="hidden">
|
||||
<input name="reportUserName" th:field="*{reportUserName}" class="form-control" type="text" readonly>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="row">
|
||||
<div class="col-xs-6">
|
||||
<div class="form-group">
|
||||
<label class="col-sm-4 control-label">报修时间:</label>
|
||||
<div class="col-sm-8">
|
||||
<input name="reportTime" th:value="${#dates.format(amsRepairOrder.reportTime, 'yyyy-MM-dd HH:mm:ss')}" class="form-control" type="text" readonly>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="row">
|
||||
<div class="col-xs-12">
|
||||
<div class="form-group">
|
||||
<label class="col-sm-2 control-label is-required">故障描述:</label>
|
||||
<div class="col-sm-10">
|
||||
<textarea name="faultDesc" maxlength="500" class="form-control" rows="3" required placeholder="请详细描述资产故障表现...">[[*{faultDesc}]]</textarea>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="row">
|
||||
<div class="col-xs-12">
|
||||
<div class="form-group">
|
||||
<label class="col-sm-2 control-label">备注:</label>
|
||||
<div class="col-sm-10">
|
||||
<textarea name="remark" maxlength="500" class="form-control" rows="2" placeholder="备注信息...">[[*{remark}]]</textarea>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
<th:block th:include="include :: footer" />
|
||||
<th:block th:include="include :: datetimepicker-js" />
|
||||
<script th:inline="javascript">
|
||||
var prefix = ctx + "asset/repair";
|
||||
$("#form-repair-edit").validate({
|
||||
focusCleanup: true
|
||||
});
|
||||
|
||||
function submitHandler() {
|
||||
if ($.validate.form()) {
|
||||
$.operate.save(prefix + "/edit", $('#form-repair-edit').serialize());
|
||||
}
|
||||
}
|
||||
|
||||
function selectAsset() {
|
||||
var repairId = $("input[name='repairId']").val();
|
||||
var url = prefix + "/selectAsset?repairId=" + repairId;
|
||||
$.modal.openOptions({
|
||||
title: "选择可报修资产",
|
||||
url: url,
|
||||
width: "1200",
|
||||
height: "680",
|
||||
callBack: function(index, layero) {
|
||||
var iframeWindow = layero.find("iframe")[0].contentWindow;
|
||||
var selected = iframeWindow.getSelectedAssets();
|
||||
if (!selected || selected.length === 0) {
|
||||
$.modal.alertWarning("请选择一条资产记录");
|
||||
return;
|
||||
}
|
||||
if (selected.length > 1) {
|
||||
$.modal.alertWarning("一期报修仅支持一单一资产,请只选择一条资产");
|
||||
return;
|
||||
}
|
||||
var asset = selected[0];
|
||||
$("#assetId").val(asset.assetId);
|
||||
$("#assetCode").val(asset.assetCode);
|
||||
$("#assetName").val(asset.assetName);
|
||||
$("#categoryName").val(asset.categoryName);
|
||||
$("#specModel").val(asset.specModel || "-");
|
||||
$("#brand").val(asset.brand || "-");
|
||||
|
||||
$.modal.close(index);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
$("input[name='expectedFinishTime']").datetimepicker({
|
||||
format: "yyyy-mm-dd",
|
||||
minView: "month",
|
||||
todayBtn: true,
|
||||
autoclose: true,
|
||||
startDate: new Date()
|
||||
});
|
||||
</script>
|
||||
</body>
|
||||
</html>
|
||||
@ -0,0 +1,252 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="zh" xmlns:th="http://www.thymeleaf.org" xmlns:shiro="http://www.pollix.at/thymeleaf/shiro">
|
||||
<head>
|
||||
<th:block th:include="include :: header('报修维修管理列表')" />
|
||||
</head>
|
||||
<body class="gray-bg">
|
||||
<div class="container-div">
|
||||
<div class="row">
|
||||
<div class="col-sm-12 search-collapse">
|
||||
<form id="formId">
|
||||
<div class="select-list">
|
||||
<ul>
|
||||
<li>
|
||||
<label>报修单号:</label>
|
||||
<input type="text" name="repairNo"/>
|
||||
</li>
|
||||
<li>
|
||||
<label>资产编码:</label>
|
||||
<input type="text" name="assetCode"/>
|
||||
</li>
|
||||
<li>
|
||||
<label>资产名称:</label>
|
||||
<input type="text" name="assetName"/>
|
||||
</li>
|
||||
<li>
|
||||
<label>报修人:</label>
|
||||
<input type="text" name="reportUserName"/>
|
||||
</li>
|
||||
<li class="select-time">
|
||||
<label>报修时间:</label>
|
||||
<input type="text" class="time-input" id="startTime" placeholder="开始时间" name="params[beginReportTime]"/>
|
||||
<span>-</span>
|
||||
<input type="text" class="time-input" id="endTime" placeholder="结束时间" name="params[endReportTime]"/>
|
||||
</li>
|
||||
<li>
|
||||
<label>维修方:</label>
|
||||
<select name="repairerType" th:with="type=${@dict.getType('ams_repairer_type')}">
|
||||
<option value="">所有</option>
|
||||
<option th:each="dict : ${type}" th:text="${dict.dictLabel}" th:value="${dict.dictValue}"></option>
|
||||
</select>
|
||||
</li>
|
||||
<li>
|
||||
<label>单据状态:</label>
|
||||
<select name="orderStatus" th:with="type=${@dict.getType('ams_repair_status')}">
|
||||
<option value="">所有</option>
|
||||
<option th:each="dict : ${type}" th:text="${dict.dictLabel}" th:value="${dict.dictValue}"></option>
|
||||
</select>
|
||||
</li>
|
||||
<li>
|
||||
<label>是否超期:</label>
|
||||
<select name="params[overdueFlag]">
|
||||
<option value="">所有</option>
|
||||
<option value="Y">已超期</option>
|
||||
<option value="N">未超期</option>
|
||||
</select>
|
||||
</li>
|
||||
<li>
|
||||
<a class="btn btn-primary btn-rounded btn-sm" onclick="$.table.search()"><i class="fa fa-search"></i> 搜索</a>
|
||||
<a class="btn btn-warning btn-rounded btn-sm" onclick="$.form.reset()"><i class="fa fa-refresh"></i> 重置</a>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
|
||||
<div class="btn-group-sm" id="toolbar" role="group">
|
||||
<a class="btn btn-success" onclick="$.operate.add()" shiro:hasPermission="asset:repair:add">
|
||||
<i class="fa fa-plus"></i> 新增报修
|
||||
</a>
|
||||
<a class="btn btn-warning" onclick="$.table.exportExcel()" shiro:hasPermission="asset:repair:export">
|
||||
<i class="fa fa-download"></i> 导出
|
||||
</a>
|
||||
</div>
|
||||
<div class="col-sm-12 select-table table-striped">
|
||||
<table id="bootstrap-table"></table>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<th:block th:include="include :: footer" />
|
||||
<script th:inline="javascript">
|
||||
var editFlag = [[${@permission.hasPermi('asset:repair:edit')}]];
|
||||
var removeFlag = [[${@permission.hasPermi('asset:repair:remove')}]];
|
||||
var submitFlag = [[${@permission.hasPermi('asset:repair:submit')}]];
|
||||
var confirmFlag = [[${@permission.hasPermi('asset:repair:confirm')}]];
|
||||
var rejectFlag = [[${@permission.hasPermi('asset:repair:reject')}]];
|
||||
var startFlag = [[${@permission.hasPermi('asset:repair:start')}]];
|
||||
var finishFlag = [[${@permission.hasPermi('asset:repair:finish')}]];
|
||||
|
||||
var repairerTypeDatas = [[${@dict.getType('ams_repairer_type')}]];
|
||||
var orderStatusDatas = [[${@dict.getType('ams_repair_status')}]];
|
||||
var prefix = ctx + "asset/repair";
|
||||
|
||||
$(function() {
|
||||
var options = {
|
||||
url: prefix + "/list",
|
||||
viewUrl: prefix + "/view/{id}",
|
||||
createUrl: prefix + "/add",
|
||||
updateUrl: prefix + "/edit/{id}",
|
||||
removeUrl: prefix + "/remove",
|
||||
exportUrl: prefix + "/export",
|
||||
modalName: "报修维修单",
|
||||
columns: [{
|
||||
checkbox: true
|
||||
},
|
||||
{
|
||||
field: 'repairId',
|
||||
title: '维修单ID',
|
||||
visible: false
|
||||
},
|
||||
{
|
||||
field: 'repairNo',
|
||||
title: '报修单号'
|
||||
},
|
||||
{
|
||||
field: 'assetCode',
|
||||
title: '资产编码'
|
||||
},
|
||||
{
|
||||
field: 'assetName',
|
||||
title: '资产名称'
|
||||
},
|
||||
{
|
||||
field: 'categoryName',
|
||||
title: '资产类别'
|
||||
},
|
||||
{
|
||||
field: 'specModel',
|
||||
title: '规格型号',
|
||||
visible: false
|
||||
},
|
||||
{
|
||||
field: 'brand',
|
||||
title: '品牌',
|
||||
visible: false
|
||||
},
|
||||
{
|
||||
field: 'reportUserName',
|
||||
title: '报修人'
|
||||
},
|
||||
{
|
||||
field: 'faultDesc',
|
||||
title: '故障描述',
|
||||
formatter: function(value, row, index) {
|
||||
return $.table.tooltip(value, 15);
|
||||
}
|
||||
},
|
||||
{
|
||||
field: 'reportTime',
|
||||
title: '报修时间'
|
||||
},
|
||||
{
|
||||
field: 'expectedFinishTime',
|
||||
title: '预计完成时间',
|
||||
visible: false
|
||||
},
|
||||
{
|
||||
field: 'repairerType',
|
||||
title: '维修方',
|
||||
formatter: function(value, row, index) {
|
||||
return $.table.selectDictLabel(repairerTypeDatas, value) || "-";
|
||||
}
|
||||
},
|
||||
{
|
||||
field: 'repairUserName',
|
||||
title: '维修人'
|
||||
},
|
||||
{
|
||||
field: 'repairOrgName',
|
||||
title: '维修单位',
|
||||
visible: false
|
||||
},
|
||||
{
|
||||
field: 'repairStartTime',
|
||||
title: '开始时间',
|
||||
visible: false
|
||||
},
|
||||
{
|
||||
field: 'repairFinishTime',
|
||||
title: '完成时间'
|
||||
},
|
||||
{
|
||||
field: 'repairCost',
|
||||
title: '维修费用'
|
||||
},
|
||||
{
|
||||
field: 'orderStatus',
|
||||
title: '单据状态',
|
||||
formatter: function(value, row, index) {
|
||||
return $.table.selectDictLabel(orderStatusDatas, value);
|
||||
}
|
||||
},
|
||||
{
|
||||
field: 'rejectReason',
|
||||
title: '驳回原因',
|
||||
visible: false
|
||||
},
|
||||
{
|
||||
title: '操作',
|
||||
align: 'center',
|
||||
formatter: function(value, row, index) {
|
||||
var actions = [];
|
||||
actions.push('<a class="btn btn-info btn-xs" href="javascript:void(0)" onclick="$.operate.view(\'' + row.repairId + '\')"><i class="fa fa-eye"></i>查看</a> ');
|
||||
|
||||
if (row.orderStatus === "DRAFT") {
|
||||
actions.push('<a class="btn btn-success btn-xs ' + editFlag + '" href="javascript:void(0)" onclick="$.operate.edit(\'' + row.repairId + '\')"><i class="fa fa-edit"></i>编辑</a> ');
|
||||
actions.push('<a class="btn btn-primary btn-xs ' + submitFlag + '" href="javascript:void(0)" onclick="submitRepair(\'' + row.repairId + '\')"><i class="fa fa-upload"></i>提交</a> ');
|
||||
actions.push('<a class="btn btn-danger btn-xs ' + removeFlag + '" href="javascript:void(0)" onclick="$.operate.remove(\'' + row.repairId + '\')"><i class="fa fa-remove"></i>删除</a>');
|
||||
} else if (row.orderStatus === "PENDING_CONFIRM") {
|
||||
actions.push('<a class="btn btn-primary btn-xs ' + confirmFlag + '" href="javascript:void(0)" onclick="confirmRepair(\'' + row.repairId + '\')"><i class="fa fa-check"></i>确认受理</a> ');
|
||||
actions.push('<a class="btn btn-warning btn-xs ' + rejectFlag + '" href="javascript:void(0)" onclick="rejectRepair(\'' + row.repairId + '\')"><i class="fa fa-reply"></i>驳回</a>');
|
||||
} else if (row.orderStatus === "WAIT_REPAIR") {
|
||||
actions.push('<a class="btn btn-primary btn-xs ' + startFlag + '" href="javascript:void(0)" onclick="startRepair(\'' + row.repairId + '\')"><i class="fa fa-wrench"></i>开始维修</a>');
|
||||
} else if (row.orderStatus === "REPAIRING") {
|
||||
actions.push('<a class="btn btn-primary btn-xs ' + finishFlag + '" href="javascript:void(0)" onclick="finishRepair(\'' + row.repairId + '\')"><i class="fa fa-check-square-o"></i>完成维修</a>');
|
||||
}
|
||||
|
||||
return actions.join('');
|
||||
}
|
||||
}]
|
||||
};
|
||||
$.table.init(options);
|
||||
});
|
||||
|
||||
function submitRepair(repairId) {
|
||||
$.modal.confirm("提交后报修单不可再修改或删除,是否继续?", function() {
|
||||
$.operate.post(prefix + "/submit/" + repairId, {});
|
||||
});
|
||||
}
|
||||
|
||||
function confirmRepair(repairId) {
|
||||
$.modal.confirm("您确定要受理该报修申请吗?", function() {
|
||||
$.operate.post(prefix + "/confirm/" + repairId, {});
|
||||
});
|
||||
}
|
||||
|
||||
function rejectRepair(repairId) {
|
||||
layer.prompt({ title: "请输入驳回原因", formType: 2, maxlength: 500 }, function(text, index) {
|
||||
layer.close(index);
|
||||
$.operate.post(prefix + "/reject/" + repairId, { rejectReason: text });
|
||||
});
|
||||
}
|
||||
|
||||
function startRepair(repairId) {
|
||||
$.modal.open("开始资产维修", prefix + "/start/" + repairId, "800", "500");
|
||||
}
|
||||
|
||||
function finishRepair(repairId) {
|
||||
$.modal.open("完成资产维修", prefix + "/finish/" + repairId, "800", "500");
|
||||
}
|
||||
</script>
|
||||
</body>
|
||||
</html>
|
||||
@ -0,0 +1,81 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="zh" xmlns:th="http://www.thymeleaf.org">
|
||||
<head>
|
||||
<th:block th:include="include :: header('选择可报修资产')" />
|
||||
</head>
|
||||
<body class="gray-bg">
|
||||
<div class="container-div">
|
||||
<div class="row">
|
||||
<div class="col-sm-12 search-collapse">
|
||||
<form id="formId">
|
||||
<div class="select-list">
|
||||
<ul>
|
||||
<li><label>资产编码:</label><input type="text" name="assetCode"></li>
|
||||
<li><label>资产名称:</label><input type="text" name="assetName"></li>
|
||||
<li><label>资产类别:</label><input type="text" name="categoryName"></li>
|
||||
<li>
|
||||
<a class="btn btn-primary btn-rounded btn-sm" onclick="$.table.search()">
|
||||
<i class="fa fa-search"></i> 搜索
|
||||
</a>
|
||||
<a class="btn btn-warning btn-rounded btn-sm" onclick="$.form.reset()">
|
||||
<i class="fa fa-refresh"></i> 重置
|
||||
</a>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
<div class="col-sm-12 select-table table-striped">
|
||||
<table id="bootstrap-table"></table>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<th:block th:include="include :: footer" />
|
||||
<script th:inline="javascript">
|
||||
var prefix = ctx + "asset/repair";
|
||||
var repairId = [[${repairId}]];
|
||||
|
||||
$(function() {
|
||||
var url = prefix + "/availableAssetList";
|
||||
if (repairId) {
|
||||
url += "?repairId=" + repairId;
|
||||
}
|
||||
$.table.init({
|
||||
url: url,
|
||||
showSearch: false,
|
||||
showRefresh: true,
|
||||
showToggle: false,
|
||||
showColumns: false,
|
||||
modalName: "可报修资产",
|
||||
columns: [
|
||||
{ checkbox: true },
|
||||
{ field: "assetCode", title: "资产编码" },
|
||||
{ field: "assetName", title: "资产名称" },
|
||||
{ field: "categoryName", title: "资产类别" },
|
||||
{ field: "specModel", title: "规格型号", formatter: function(value) { return value || "-"; } },
|
||||
{ field: "brand", title: "品牌", formatter: function(value) { return value || "-"; } },
|
||||
{
|
||||
field: "assetStatus",
|
||||
title: "资产状态",
|
||||
formatter: function(value, row, index) {
|
||||
if (value === 'IN_STOCK') {
|
||||
return '<span class="label label-primary">在库</span>';
|
||||
} else if (value === 'IN_USE') {
|
||||
return '<span class="label label-info">在用</span>';
|
||||
}
|
||||
return value;
|
||||
}
|
||||
},
|
||||
{ field: "warehouseName", title: "当前仓库", formatter: function(value) { return value || "-"; } },
|
||||
{ field: "locationName", title: "当前位置", formatter: function(value) { return value || "-"; } },
|
||||
{ field: "tagCode", title: "RFID标签", formatter: function(value) { return value || "-"; } }
|
||||
]
|
||||
});
|
||||
});
|
||||
|
||||
function getSelectedAssets() {
|
||||
return $("#bootstrap-table").bootstrapTable("getSelections");
|
||||
}
|
||||
</script>
|
||||
</body>
|
||||
</html>
|
||||
@ -0,0 +1,130 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="zh" xmlns:th="http://www.thymeleaf.org" >
|
||||
<head>
|
||||
<th:block th:include="include :: header('开始维修录入')" />
|
||||
</head>
|
||||
<body class="white-bg">
|
||||
<div class="wrapper wrapper-content animated fadeInRight ibox-content">
|
||||
<form class="form-horizontal m" id="form-repair-start" th:object="${amsRepairOrder}">
|
||||
<input name="repairId" th:field="*{repairId}" type="hidden">
|
||||
|
||||
<div class="form-group">
|
||||
<label class="col-sm-3 control-label is-required">维修方类型:</label>
|
||||
<div class="col-sm-8">
|
||||
<select id="repairerType" name="repairerType" class="form-control" th:with="type=${@dict.getType('ams_repairer_type')}" required>
|
||||
<option th:each="dict : ${type}" th:text="${dict.dictLabel}" th:value="${dict.dictValue}"></option>
|
||||
</select>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- 内修展示 -->
|
||||
<div class="form-group" id="div-internal-repairer">
|
||||
<label class="col-sm-3 control-label is-required">维修人:</label>
|
||||
<div class="col-sm-8">
|
||||
<select id="repairUserId" name="repairUserId" class="form-control">
|
||||
<option value="">-- 请选择系统用户 --</option>
|
||||
<option th:each="user : ${userList}" th:text="${user.userName}" th:value="${user.userId}" th:data-name="${user.userName}" th:data-phone="${user.phonenumber}"></option>
|
||||
</select>
|
||||
<input id="manualRepairUserName" class="form-control" type="text" placeholder="或手工填写内部维修人姓名" style="margin-top: 8px;">
|
||||
<input type="hidden" id="repairUserName" name="repairUserName">
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- 外修展示 -->
|
||||
<div class="form-group" id="div-external-org" style="display: none;">
|
||||
<label class="col-sm-3 control-label is-required">外部维修单位:</label>
|
||||
<div class="col-sm-8">
|
||||
<input id="repairOrgName" name="repairOrgName" class="form-control" type="text" placeholder="请输入外部维修公司名称">
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="form-group" id="div-external-repairer" style="display: none;">
|
||||
<label class="col-sm-3 control-label">维修联系人:</label>
|
||||
<div class="col-sm-8">
|
||||
<input id="externalRepairUserName" name="externalRepairUserName" class="form-control" type="text" placeholder="请输入维修人员姓名">
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="form-group">
|
||||
<label class="col-sm-3 control-label">联系电话:</label>
|
||||
<div class="col-sm-8">
|
||||
<input id="repairContactPhone" name="repairContactPhone" class="form-control" type="text" placeholder="请输入联系电话">
|
||||
</div>
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
<th:block th:include="include :: footer" />
|
||||
<script th:inline="javascript">
|
||||
var prefix = ctx + "asset/repair";
|
||||
|
||||
$("#form-repair-start").validate({
|
||||
focusCleanup: true
|
||||
});
|
||||
|
||||
function submitHandler() {
|
||||
if ($.validate.form()) {
|
||||
var repairerType = $("#repairerType").val();
|
||||
if (repairerType === 'INTERNAL') {
|
||||
var userId = $("#repairUserId").val();
|
||||
var userName = userId ? $("#repairUserId").find("option:selected").data("name") : $("#manualRepairUserName").val();
|
||||
if (!userName) {
|
||||
$.modal.alertWarning("请选择系统用户或填写内部维修人姓名");
|
||||
return;
|
||||
}
|
||||
$("#repairUserName").val(userName);
|
||||
} else if (repairerType === 'EXTERNAL') {
|
||||
var orgName = $("#repairOrgName").val();
|
||||
if (!orgName) {
|
||||
$.modal.alertWarning("请输入外部维修单位");
|
||||
return;
|
||||
}
|
||||
var extUserName = $("#externalRepairUserName").val();
|
||||
$("#repairUserName").val(extUserName);
|
||||
}
|
||||
|
||||
$.operate.save(prefix + "/start", $('#form-repair-start').serialize());
|
||||
}
|
||||
}
|
||||
|
||||
$(function() {
|
||||
$("#repairerType").change(function() {
|
||||
var type = $(this).val();
|
||||
if (type === 'INTERNAL') {
|
||||
$("#div-internal-repairer").show();
|
||||
$("#div-external-org").hide();
|
||||
$("#div-external-repairer").hide();
|
||||
|
||||
// 清空外修输入,并清空联系电话(切换时重置)
|
||||
$("#repairOrgName").val("");
|
||||
$("#externalRepairUserName").val("");
|
||||
$("#repairContactPhone").val("");
|
||||
} else {
|
||||
$("#div-internal-repairer").hide();
|
||||
$("#div-external-org").show();
|
||||
$("#div-external-repairer").show();
|
||||
|
||||
// 清空内修输入,并清空联系电话(切换时重置)
|
||||
$("#repairUserId").val("");
|
||||
$("#manualRepairUserName").val("");
|
||||
$("#repairUserName").val("");
|
||||
$("#repairContactPhone").val("");
|
||||
}
|
||||
});
|
||||
|
||||
// 监听内部维修人选择,自动带出表 sys_user 中该用户的手机号码
|
||||
$("#repairUserId").change(function() {
|
||||
var phone = $(this).find("option:selected").data("phone");
|
||||
if (phone) {
|
||||
$("#repairContactPhone").val(phone);
|
||||
} else {
|
||||
$("#repairContactPhone").val("");
|
||||
}
|
||||
});
|
||||
|
||||
// 初始化触发
|
||||
$("#repairerType").trigger("change");
|
||||
$("#repairUserId").trigger("change");
|
||||
});
|
||||
</script>
|
||||
</body>
|
||||
</html>
|
||||
@ -0,0 +1,244 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="zh" xmlns:th="http://www.thymeleaf.org" >
|
||||
<head>
|
||||
<th:block th:include="include :: header('报修维修单详细')" />
|
||||
</head>
|
||||
<body class="white-bg">
|
||||
<div class="wrapper wrapper-content animated fadeInRight ibox-content">
|
||||
<form class="form-horizontal" th:object="${amsRepairOrder}">
|
||||
<h4 class="form-header h4">基本信息</h4>
|
||||
<div class="row">
|
||||
<div class="col-xs-6">
|
||||
<div class="form-group">
|
||||
<label class="col-sm-4 control-label">报修单号:</label>
|
||||
<div class="col-sm-8">
|
||||
<p class="form-control-plaintext" th:text="*{repairNo}"></p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-xs-6">
|
||||
<div class="form-group">
|
||||
<label class="col-sm-4 control-label">单据状态:</label>
|
||||
<div class="col-sm-8">
|
||||
<p class="form-control-plaintext">
|
||||
<span class="label label-primary" th:if="*{orderStatus == 'DRAFT'}">草稿</span>
|
||||
<span class="label label-warning" th:if="*{orderStatus == 'PENDING_CONFIRM'}">待受理</span>
|
||||
<span class="label label-danger" th:if="*{orderStatus == 'REJECTED'}">已驳回</span>
|
||||
<span class="label label-info" th:if="*{orderStatus == 'WAIT_REPAIR'}">待维修</span>
|
||||
<span class="label label-info" th:if="*{orderStatus == 'REPAIRING'}">维修中</span>
|
||||
<span class="label label-success" th:if="*{orderStatus == 'REPAIR_DONE'}">维修完成</span>
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="row">
|
||||
<div class="col-xs-6">
|
||||
<div class="form-group">
|
||||
<label class="col-sm-4 control-label">资产编码:</label>
|
||||
<div class="col-sm-8">
|
||||
<p class="form-control-plaintext" th:text="*{assetCode}"></p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-xs-6">
|
||||
<div class="form-group">
|
||||
<label class="col-sm-4 control-label">资产名称:</label>
|
||||
<div class="col-sm-8">
|
||||
<p class="form-control-plaintext" th:text="*{assetName}"></p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="row">
|
||||
<div class="col-xs-6">
|
||||
<div class="form-group">
|
||||
<label class="col-sm-4 control-label">资产类别:</label>
|
||||
<div class="col-sm-8">
|
||||
<p class="form-control-plaintext" th:text="*{categoryName}"></p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-xs-6">
|
||||
<div class="form-group">
|
||||
<label class="col-sm-4 control-label">规格型号:</label>
|
||||
<div class="col-sm-8">
|
||||
<p class="form-control-plaintext" th:text="*{specModel ?: '-'}"></p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="row">
|
||||
<div class="col-xs-6">
|
||||
<div class="form-group">
|
||||
<label class="col-sm-4 control-label">品牌:</label>
|
||||
<div class="col-sm-8">
|
||||
<p class="form-control-plaintext" th:text="*{brand ?: '-'}"></p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-xs-6">
|
||||
<div class="form-group">
|
||||
<label class="col-sm-4 control-label">报修前资产状态:</label>
|
||||
<div class="col-sm-8">
|
||||
<p class="form-control-plaintext">
|
||||
<span th:if="*{beforeAssetStatus == 'IN_STOCK'}" class="label label-primary">在库</span>
|
||||
<span th:if="*{beforeAssetStatus == 'IN_USE'}" class="label label-info">在用</span>
|
||||
<span th:if="*{beforeAssetStatus == null}">-</span>
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<h4 class="form-header h4">故障及申报信息</h4>
|
||||
<div class="row">
|
||||
<div class="col-xs-6">
|
||||
<div class="form-group">
|
||||
<label class="col-sm-4 control-label">报修人:</label>
|
||||
<div class="col-sm-8">
|
||||
<p class="form-control-plaintext" th:text="*{reportUserName}"></p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-xs-6">
|
||||
<div class="form-group">
|
||||
<label class="col-sm-4 control-label">报修时间:</label>
|
||||
<div class="col-sm-8">
|
||||
<p class="form-control-plaintext" th:text="*{#dates.format(reportTime, 'yyyy-MM-dd HH:mm:ss')}"></p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="row">
|
||||
<div class="col-xs-6">
|
||||
<div class="form-group">
|
||||
<label class="col-sm-4 control-label">预计完成日期:</label>
|
||||
<div class="col-sm-8">
|
||||
<p class="form-control-plaintext" th:text="*{#dates.format(expectedFinishTime, 'yyyy-MM-dd')}"></p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-xs-6" th:if="*{orderStatus == 'REJECTED'}">
|
||||
<div class="form-group">
|
||||
<label class="col-sm-4 control-label text-danger">驳回原因:</label>
|
||||
<div class="col-sm-8">
|
||||
<p class="form-control-plaintext text-danger" th:text="*{rejectReason}"></p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="row">
|
||||
<div class="col-xs-12">
|
||||
<div class="form-group">
|
||||
<label class="col-sm-2 control-label">故障描述:</label>
|
||||
<div class="col-sm-10">
|
||||
<p class="form-control-plaintext" style="white-space: pre-wrap;" th:text="*{faultDesc}"></p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="row">
|
||||
<div class="col-xs-12">
|
||||
<div class="form-group">
|
||||
<label class="col-sm-2 control-label">备注:</label>
|
||||
<div class="col-sm-10">
|
||||
<p class="form-control-plaintext" th:text="*{remark ?: '-'}"></p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- 仅在进入维修环节后展示 -->
|
||||
<div th:if="*{orderStatus == 'REPAIRING' || orderStatus == 'REPAIR_DONE'}">
|
||||
<h4 class="form-header h4">维修过程及结果</h4>
|
||||
<div class="row">
|
||||
<div class="col-xs-6">
|
||||
<div class="form-group">
|
||||
<label class="col-sm-4 control-label">维修方类型:</label>
|
||||
<div class="col-sm-8">
|
||||
<p class="form-control-plaintext" th:text="*{repairerType == 'INTERNAL' ? '内部维修' : '外部维修'}"></p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-xs-6">
|
||||
<div class="form-group">
|
||||
<label class="col-sm-4 control-label" th:text="*{repairerType == 'INTERNAL' ? '维修人:' : '外部维修单位:'}"></label>
|
||||
<div class="col-sm-8">
|
||||
<p class="form-control-plaintext" th:text="*{repairerType == 'INTERNAL' ? repairUserName : repairOrgName}"></p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="row">
|
||||
<div class="col-xs-6" th:if="*{repairerType == 'EXTERNAL' && repairUserName != null && repairUserName != ''}">
|
||||
<div class="form-group">
|
||||
<label class="col-sm-4 control-label">维修联系人:</label>
|
||||
<div class="col-sm-8">
|
||||
<p class="form-control-plaintext" th:text="*{repairUserName}"></p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-xs-6">
|
||||
<div class="form-group">
|
||||
<label class="col-sm-4 control-label">联系电话:</label>
|
||||
<div class="col-sm-8">
|
||||
<p class="form-control-plaintext" th:text="*{repairContactPhone ?: '-'}"></p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="row">
|
||||
<div class="col-xs-6">
|
||||
<div class="form-group">
|
||||
<label class="col-sm-4 control-label">维修开始时间:</label>
|
||||
<div class="col-sm-8">
|
||||
<p class="form-control-plaintext" th:text="*{#dates.format(repairStartTime, 'yyyy-MM-dd HH:mm:ss')}"></p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-xs-6" th:if="*{orderStatus == 'REPAIR_DONE'}">
|
||||
<div class="form-group">
|
||||
<label class="col-sm-4 control-label">维修完成时间:</label>
|
||||
<div class="col-sm-8">
|
||||
<p class="form-control-plaintext" th:text="*{#dates.format(repairFinishTime, 'yyyy-MM-dd HH:mm:ss')}"></p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="row" th:if="*{orderStatus == 'REPAIR_DONE'}">
|
||||
<div class="col-xs-6">
|
||||
<div class="form-group">
|
||||
<label class="col-sm-4 control-label">维修费用:</label>
|
||||
<div class="col-sm-8">
|
||||
<p class="form-control-plaintext" th:text="*{'¥' + #numbers.formatDecimal(repairCost, 1, 2)}"></p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="row" th:if="*{orderStatus == 'REPAIR_DONE'}">
|
||||
<div class="col-xs-12">
|
||||
<div class="form-group">
|
||||
<label class="col-sm-2 control-label">维修结果:</label>
|
||||
<div class="col-sm-10">
|
||||
<p class="form-control-plaintext" style="white-space: pre-wrap;" th:text="*{repairResult}"></p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
<th:block th:include="include :: footer" />
|
||||
</body>
|
||||
</html>
|
||||
Loading…
Reference in New Issue