Browse Source

巡检计划绑定模板

master
巴林闲侠 2 years ago
parent
commit
f0c654202b
  1. 16
      api/app/lib/controllers/patrolManage/patrolPlan.js
  2. 19
      api/app/lib/models/patrol_plan.js
  3. 2
      api/sequelize-automate.config.js
  4. 2
      script/1.0.3/schema/2.update_patrol_plan.sql
  5. 9
      web/client/src/sections/patrolManage/actions/template.js
  6. 25
      web/client/src/sections/patrolManage/components/planModal.js
  7. 12
      web/client/src/sections/patrolManage/containers/patrolPlan.js

16
api/app/lib/controllers/patrolManage/patrolPlan.js

@ -1,6 +1,6 @@
'use strict'; 'use strict';
async function getPatrolPlan(ctx, next) { async function getPatrolPlan (ctx, next) {
try { try {
const models = ctx.fs.dc.models; const models = ctx.fs.dc.models;
const { limit, page, userId } = ctx.query; const { limit, page, userId } = ctx.query;
@ -43,13 +43,13 @@ async function getPatrolPlan(ctx, next) {
} }
} }
async function createPatrolPlan(ctx, next) { async function createPatrolPlan (ctx, next) {
try { try {
const models = ctx.fs.dc.models; const models = ctx.fs.dc.models;
const data = ctx.request.body; const data = ctx.request.body;
const { name, way, structureId, startTime, endTime, frequency, points, userId } = data; const { name, way, structureId, startTime, endTime, frequency, points, userId, templateId } = data;
let plan = { name, way, structureId, startTime, endTime, frequency, points, userId }; let plan = { name, way, structureId, startTime, endTime, frequency, points, userId, templateId };
await models.PatrolPlan.create(plan); await models.PatrolPlan.create(plan);
@ -63,14 +63,14 @@ async function createPatrolPlan(ctx, next) {
} }
} }
async function updatePatrolPlan(ctx, next) { async function updatePatrolPlan (ctx, next) {
try { try {
let errMsg = '修改巡检计划失败'; let errMsg = '修改巡检计划失败';
const models = ctx.fs.dc.models; const models = ctx.fs.dc.models;
const data = ctx.request.body; const data = ctx.request.body;
const { name, way, structureId, startTime, endTime, frequency, points, userId } = data; const { name, way, structureId, startTime, endTime, frequency, points, userId, templateId } = data;
let plan = { name, way, structureId, startTime, endTime, frequency, points, userId }; let plan = { name, way, structureId, startTime, endTime, frequency, points, userId, templateId };
if (data && data.id) { if (data && data.id) {
await models.PatrolPlan.update(plan, { await models.PatrolPlan.update(plan, {
@ -91,7 +91,7 @@ async function updatePatrolPlan(ctx, next) {
} }
} }
async function delPatrolPlan(ctx, next) { async function delPatrolPlan (ctx, next) {
try { try {
let errMsg = '删除巡检计划失败'; let errMsg = '删除巡检计划失败';

19
api/app/lib/models/patrol_plan.js

@ -4,7 +4,7 @@
module.exports = dc => { module.exports = dc => {
const DataTypes = dc.ORM; const DataTypes = dc.ORM;
const sequelize = dc.orm; const sequelize = dc.orm;
const PatrolPlan = sequelize.define("PatrolPlan", { const PatrolPlan = sequelize.define("patrolPlan", {
id: { id: {
type: DataTypes.INTEGER, type: DataTypes.INTEGER,
allowNull: false, allowNull: false,
@ -12,8 +12,7 @@ module.exports = dc => {
comment: null, comment: null,
primaryKey: true, primaryKey: true,
field: "id", field: "id",
autoIncrement: true, autoIncrement: true
unique: "patrol_plan_id_uindex"
}, },
name: { name: {
type: DataTypes.STRING, type: DataTypes.STRING,
@ -81,20 +80,30 @@ module.exports = dc => {
userId: { userId: {
type: DataTypes.INTEGER, type: DataTypes.INTEGER,
allowNull: true, allowNull: true,
defaultValue: null,
comment: null, comment: null,
primaryKey: false, primaryKey: false,
field: "user_id", field: "user_id",
autoIncrement: false, autoIncrement: false
}, },
patrolCount: { patrolCount: {
type: DataTypes.INTEGER, type: DataTypes.INTEGER,
allowNull: false, allowNull: false,
defaultValue: 0, defaultValue: "0",
comment: null, comment: null,
primaryKey: false, primaryKey: false,
field: "patrol_count", field: "patrol_count",
autoIncrement: false autoIncrement: false
}, },
templateId: {
type: DataTypes.INTEGER,
allowNull: true,
defaultValue: null,
comment: null,
primaryKey: false,
field: "template_id",
autoIncrement: false
}
}, { }, {
tableName: "patrol_plan", tableName: "patrol_plan",
comment: "", comment: "",

2
api/sequelize-automate.config.js

@ -26,7 +26,7 @@ module.exports = {
dir: './app/lib/models', // 指定输出 models 文件的目录 dir: './app/lib/models', // 指定输出 models 文件的目录
typesDir: 'models', // 指定输出 TypeScript 类型定义的文件目录,只有 TypeScript / Midway 等会有类型定义 typesDir: 'models', // 指定输出 TypeScript 类型定义的文件目录,只有 TypeScript / Midway 等会有类型定义
emptyDir: false, // !!! 谨慎操作 生成 models 之前是否清空 `dir` 以及 `typesDir` emptyDir: false, // !!! 谨慎操作 生成 models 之前是否清空 `dir` 以及 `typesDir`
tables: ['patrol_template','patrol_template_check_items'], // 指定生成哪些表的 models,如 ['user', 'user_post'];如果为 null,则忽略改属性 tables: ['patrol_plan'], // 指定生成哪些表的 models,如 ['user', 'user_post'];如果为 null,则忽略改属性
skipTables: [], // 指定跳过哪些表的 models,如 ['user'];如果为 null,则忽略改属性 skipTables: [], // 指定跳过哪些表的 models,如 ['user'];如果为 null,则忽略改属性
tsNoCheck: false, // 是否添加 `@ts-nocheck` 注释到 models 文件中 tsNoCheck: false, // 是否添加 `@ts-nocheck` 注释到 models 文件中
ignorePrefix: ['t_',], // 生成的模型名称忽略的前缀,因为 项目中有以下表名是以 t_ 开头的,在实际模型中不需要, 可以添加多个 [ 't_data_', 't_',] ,长度较长的 前缀放前面 ignorePrefix: ['t_',], // 生成的模型名称忽略的前缀,因为 项目中有以下表名是以 t_ 开头的,在实际模型中不需要, 可以添加多个 [ 't_data_', 't_',] ,长度较长的 前缀放前面

2
script/1.0.3/schema/2.update_patrol_plan.sql

@ -0,0 +1,2 @@
alter table patrol_plan
add template_id int;

9
web/client/src/sections/patrolManage/actions/template.js

@ -3,17 +3,18 @@
import { basicAction } from '@peace/utils' import { basicAction } from '@peace/utils'
import { ApiTable } from '$utils' import { ApiTable } from '$utils'
export function getPatrolTemplate() { export function getPatrolTemplate () {
return dispatch => basicAction({ return dispatch => basicAction({
type: 'get', type: 'get',
dispatch: dispatch, dispatch: dispatch,
actionType: 'GET_PATROL_TEMPLATE', actionType: 'GET_PATROL_TEMPLATE',
url: ApiTable.patrolTemplate, url: ApiTable.patrolTemplate,
msg: { error: '获取巡检模板失败' }, msg: { error: '获取巡检模板失败' },
reducer: { name: 'patrolTemplate' }
}); });
} }
export function createPatrolTemplate(data) { export function createPatrolTemplate (data) {
return dispatch => basicAction({ return dispatch => basicAction({
type: 'post', type: 'post',
data, data,
@ -24,7 +25,7 @@ export function createPatrolTemplate(data) {
}); });
} }
export function delPatrolTemplate(id) { export function delPatrolTemplate (id) {
return dispatch => basicAction({ return dispatch => basicAction({
type: 'del', type: 'del',
dispatch: dispatch, dispatch: dispatch,
@ -34,7 +35,7 @@ export function delPatrolTemplate(id) {
}); });
} }
export function updatePatrolTemplate(data) { export function updatePatrolTemplate (data) {
return dispatch => basicAction({ return dispatch => basicAction({
type: 'put', type: 'put',
data, data,

25
web/client/src/sections/patrolManage/components/planModal.js

@ -6,7 +6,7 @@ import moment from 'moment';
const { RangePicker } = DatePicker; const { RangePicker } = DatePicker;
const PlanModal = ({ visible, onCreate, onCancel, dispatch, userLoading, userList, structureList, struLoading, type, curRecord }) => { const PlanModal = ({ visible, onCreate, onCancel, dispatch, userLoading, userList, structureList, struLoading, type, curRecord, templateLoading, patrolTemplate }) => {
const [userOpt, setUserOpt] = useState(); const [userOpt, setUserOpt] = useState();
const [struOpt, setStruOpt] = useState(); const [struOpt, setStruOpt] = useState();
const [pointOpt, setPointOpt] = useState(); const [pointOpt, setPointOpt] = useState();
@ -144,6 +144,21 @@ const PlanModal = ({ visible, onCreate, onCancel, dispatch, userLoading, userLis
> >
<Input addonAfter={selectAfter} disabled={type === 'view'} /> <Input addonAfter={selectAfter} disabled={type === 'view'} />
</Form.Item> </Form.Item>
<Form.Item
name="templateId"
label="巡检模板"
rules={[
{ required: true, message: '请选择巡检模板' },
]}
>
<Select
disabled={type === 'view'}
options={patrolTemplate.map(t => {
return { label: t.name, value: t.id }
})}
loading={templateLoading}
/>
</Form.Item>
<Form.Item <Form.Item
name="time" name="time"
label="任务周期" label="任务周期"
@ -189,14 +204,16 @@ const PlanModal = ({ visible, onCreate, onCancel, dispatch, userLoading, userLis
); );
}; };
function mapStateToProps(state) { function mapStateToProps (state) {
const { auth, userList, structureList } = state const { auth, userList, structureList, patrolTemplate } = state
return { return {
user: auth.user, user: auth.user,
userList: userList.data || [], userList: userList.data || [],
structureList: structureList.data || [], structureList: structureList.data || [],
patrolTemplate: (patrolTemplate.data || { rows: [] }).rows,
userLoading: userList.isRequesting, userLoading: userList.isRequesting,
struLoading: structureList.isRequesting struLoading: structureList.isRequesting,
templateLoading: patrolTemplate.isRequesting,
} }
} }
export default connect(mapStateToProps)(PlanModal); export default connect(mapStateToProps)(PlanModal);

12
web/client/src/sections/patrolManage/containers/patrolPlan.js

@ -1,12 +1,13 @@
import React, { useState, useRef } from 'react'; import React, { useState, useRef, useEffect } from 'react';
import { connect } from 'react-redux'; import { connect } from 'react-redux';
import { Button, Popconfirm } from 'antd'; import { Button, Popconfirm } from 'antd';
import ProTable from '@ant-design/pro-table'; import ProTable from '@ant-design/pro-table';
import PlanModal from '../components/planModal'; import PlanModal from '../components/planModal';
import { createPatrolPlan, delPatrolPlan, updatePatrolPlan, getPatrolPlan } from '../actions/plan'; import { createPatrolPlan, delPatrolPlan, updatePatrolPlan, getPatrolPlan } from '../actions/plan';
import { getPatrolTemplate } from '../actions/template';
import moment from 'moment'; import moment from 'moment';
function PatrolPlan(props) { function PatrolPlan (props) {
const { dispatch, user } = props; const { dispatch, user } = props;
const tableRef = useRef(); const tableRef = useRef();
const [dataSource, setDataSource] = useState([{}]); const [dataSource, setDataSource] = useState([{}]);
@ -14,6 +15,10 @@ function PatrolPlan(props) {
const [type, setType] = useState(); const [type, setType] = useState();
const [curRecord, setCurRecord] = useState(); const [curRecord, setCurRecord] = useState();
useEffect(() => {
dispatch(getPatrolTemplate({}))
}, [])
const onCreate = (values) => { const onCreate = (values) => {
if (type === 'create') { if (type === 'create') {
dispatch(createPatrolPlan(values)).then(res => { dispatch(createPatrolPlan(values)).then(res => {
@ -155,8 +160,9 @@ function PatrolPlan(props) {
) )
} }
function mapStateToProps(state) { function mapStateToProps (state) {
const { auth } = state const { auth } = state
console.log(state);
return { return {
user: auth.user user: auth.user
} }

Loading…
Cancel
Save