浏览代码

筹建完善

guarantee-lsq 1 年之前
父节点
当前提交
349808af2a

+ 8 - 0
src/api/preparation/preparation.js

@@ -242,6 +242,14 @@ export function finish (parameter) {
   })
 }
 
+export function finishFee (parameter) {
+  return axios({
+    url: '/preparation/preparations/finish/fee/' + parameter.id,
+    method: 'PUT',
+    data: parameter
+  })
+}
+
 export function handleVerifyByDTO (parameter) {
   return axios({
     url: '/preparation/preparations/verify/' + parameter.id,

+ 1 - 1
src/api/upms/user.js

@@ -242,7 +242,7 @@ export function queryUserByRoleName (parameter) {
 
 export function queryUserByRoleNameAndDept (parameter) {
   return axios({
-    url: `/upms/users/query/roleName/${parameter.roleName}/{${parameter.deptId}}`,
+    url: `/upms/users/query/roleName/${parameter.roleName}/${parameter.deptId}`,
     method: 'get',
     headers: {
       'Content-Type': 'application/json;charset=UTF-8'

+ 9 - 5
src/views/preparation/preparation/Preparation.vue

@@ -53,10 +53,14 @@
         <span slot="action" slot-scope="record">
           <template>
             <a @click="handleView(record)">工单详情</a>
-            <!--            <operation-button
-              v-if="$auth('preparation-preparations-edit')"
+            <operation-button
+              v-if="record.status === DictCache.VALUE.REPAIR_PREPARATION_STATUS.APPLY_MANAGER_VERIFY_BACK ||
+record.status === DictCache.VALUE.REPAIR_PREPARATION_STATUS.APPLY_LEADER_VERIFY_BACK ||
+record.status === DictCache.VALUE.REPAIR_PREPARATION_STATUS.RECEIVE_VERIFY_BACK ||
+record.status === DictCache.VALUE.REPAIR_PREPARATION_STATUS.FIRST_PROCESSING_VERIFY_BACK ||
+record.status === DictCache.VALUE.REPAIR_PREPARATION_STATUS.SECOND_PROCESSING_BACK"
               @click="handleEdit(record)"
-            >修改</operation-button>-->
+            >修改</operation-button>
             <!--            <a-divider v-if="record.status === 1" type="vertical" />-->
             <a-divider type="vertical" />
             <a @click="handlePrint(record)">打印</a>
@@ -156,10 +160,10 @@ export default {
           dataIndex: 'limitHours'
         },
         {
-          title: '报修状态',
+          title: '工单状态',
           checked: true,
           dataIndex: 'status',
-          width: 150,
+          width: 190,
           scopedSlots: { customRender: 'status' }
         },
         {

+ 14 - 11
src/views/preparation/preparation/modules/Detail.vue

@@ -52,27 +52,31 @@
       <a-button style="margin-left: 8px" type="primary" @click="handleCancel">返回</a-button>
       <a-button
         v-if="DictCache.VALUE.REPAIR_PREPARATION_STATUS.NOT_ALLOCATED === model.status ||
-          DictCache.VALUE.REPAIR_PREPARATION_STATUS.APPLY_MANAGER_VERIFY_SUCCESS === model.status"
+          DictCache.VALUE.REPAIR_PREPARATION_STATUS.APPLY_MANAGER_VERIFY_SUCCESS === model.status ||
+DictCache.VALUE.REPAIR_PREPARATION_STATUS.APPLY_LEADER_VERIFY_SUCCESS === model.status ||
+DictCache.VALUE.REPAIR_PREPARATION_STATUS.FIRST_PROCESSING_VERIFYING === model.status ||
+DictCache.VALUE.REPAIR_PREPARATION_STATUS.SECOND_PROCESSING_VERIFYING === model.status"
         style="margin-left: 16px"
         type="default"
         @click="handleVerify()">审核</a-button>
-      <a-button v-if="DictCache.VALUE.REPAIR_PREPARATION_STATUS.WAIT_DISPATCH === model.status " style="margin-left: 16px" type="default" @click="handleAssign">派单</a-button>
-      <a-button v-if="DictCache.VALUE.REPAIR_PREPARATION_STATUS.PROCESSING === model.status" style="margin-left: 8px" type="default" @click="handleFinish()">完成维修</a-button>
+      <a-button v-if="DictCache.VALUE.REPAIR_PREPARATION_STATUS.PROCESSING === model.status " style="margin-left: 16px" type="default" @click="handleAssign">费用填报</a-button>
+      <a-button v-if="DictCache.VALUE.REPAIR_PREPARATION_STATUS.SECOND_PROCESSING === model.status" style="margin-left: 8px" type="default" @click="handleFinish()">完成工单</a-button>
     </div>
     <assign-form ref="assignForm" @ok="handleCancel" />
-    <finish-form ref="finishForm" @ok="handleCancel" />
+    <fee-form ref="feeForm" @ok="handleCancel" />
     <verify-form ref="verifyForm" @ok="handleCancel" />
     <dispatch-form ref="dispatchForm" @ok="handleCancel" />
+    <finish-form ref="finishForm" @ok="handleCancel" />
   </a-card>
 </template>
 
 <script>
 import DetailList from '@/components/tools/DetailList'
 import DispatchForm from './DispatchForm'
+import FeeForm from './FeeForm'
 import FinishForm from './FinishForm'
 import VerifyForm from './VerifyForm'
 import DictCache from '@/utils/dict'
-import { fetchPreparation } from '@/api/preparation/preparation'
 const DetailListItem = DetailList.Item
 
 export default {
@@ -81,8 +85,9 @@ export default {
     DetailList,
     DetailListItem,
     DispatchForm,
-    FinishForm,
-    VerifyForm
+    FeeForm,
+    VerifyForm,
+    FinishForm
   },
   data () {
     return {
@@ -144,10 +149,8 @@ export default {
       this.$emit('ok')
     },
     handleAssign () {
-      fetchPreparation({ id: this.model.id }).then(res => {
-        const modal = this.$refs.assignForm
-        modal.base(res.data)
-      })
+      const modal = this.$refs.feeForm
+      modal.base(this.model)
     },
     // 审核 - 主管 - 负责人 - 收件负责人
     handleVerify () {

+ 24 - 10
src/views/preparation/preparation/modules/DispatchForm.vue

@@ -18,18 +18,18 @@
             :labelCol="BaseTool.Constant.labelCol2"
             :wrapperCol="BaseTool.Constant.wrapperCol2"
           >
-            <a-radio-group v-model="verifyStatus">
+            <a-radio-group v-model="verifyStatus" @change="changeOpinion">
               <a-radio :value="1">派单</a-radio>
               <a-radio :value="2">拒绝</a-radio>
               <a-radio :value="3">回退</a-radio>
             </a-radio-group>
           </a-form-item>
         </row-item>
-        <row-item>
+        <row-item v-show="dispatchFlag">
           <a-form-item
             label="执行部门"
-            :labelCol="BaseTool.Constant.labelCol"
-            :wrapperCol="BaseTool.Constant.wrapperCol"
+            :labelCol="BaseTool.Constant.labelCol2"
+            :wrapperCol="BaseTool.Constant.wrapperCol2"
           >
             <a-tree-select
               style="width: 100%"
@@ -47,8 +47,8 @@
         <row-item>
           <a-form-item
             label="执行人"
-            :labelCol="BaseTool.Constant.labelCol"
-            :wrapperCol="BaseTool.Constant.wrapperCol"
+            :labelCol="BaseTool.Constant.labelCol2"
+            :wrapperCol="BaseTool.Constant.wrapperCol2"
           >
             <a-select v-decorator="['repairUserId', { rules: [{required: true, message: '执行人不能为空'}]}]" placeholder="请选择">
               <a-select-option
@@ -68,7 +68,7 @@
           >
             <a-textarea
               :rows="4"
-              v-decorator="['verifyRemark']"/>
+              v-model="verifyRemark"/>
           </a-form-item>
         </row-item>
       </row-list>
@@ -96,7 +96,9 @@ export default {
       executeDeptList: {},
       repairUserList: [],
       // 下拉框map
-      model: null
+      model: null,
+      verifyRemark: '派单',
+      dispatchFlag: true
     }
   },
   components: {
@@ -116,15 +118,26 @@ export default {
       })
     },
     handleChange (value, label, extra) {
-      alert(value)
       this.getRepairUser(value)
     },
     getRepairUser (deptId) {
       // 获取执行人集合
       queryUserByRoleNameAndDept({ roleName: 'PREPARATION_USER', deptId: deptId }).then(res => {
-        this.verifyUserList = res.data
+        this.repairUserList = res.data
       })
     },
+    changeOpinion (e) {
+      const val = e.target.value
+      this.dispatchFlag = false
+      if (val === 1) {
+        this.verifyRemark = '派单'
+        this.dispatchFlag = true
+      } else if (val === 2) {
+        this.verifyRemark = '拒绝'
+      } else if (val === 3) {
+        this.verifyRemark = '回退'
+      }
+    },
     base (record) {
       this.visible = true
       this.model = record
@@ -146,6 +159,7 @@ export default {
         }
         // 具体处理
         values.verifyStatus = this.verifyStatus
+        values.verifyRemark = this.verifyRemark
         console.log(values)
         dispatchModelByDTO(values)
           .then(() => {

+ 187 - 0
src/views/preparation/preparation/modules/FeeForm.vue

@@ -0,0 +1,187 @@
+<template>
+  <a-modal
+    :title="modalTitle"
+    :width="800"
+    :visible="visible"
+    :confirmLoading="confirmLoading"
+    class="ant-modal2"
+    @cancel="handleCancel"
+  >
+    <a-form :form="form">
+      <a-form-item v-show="false" >
+        <a-input v-decorator="['id']" type="hidden"/>
+      </a-form-item>
+
+      <row-list :col="2">
+        <row-item>
+          <a-form-item
+            label="费用金额"
+            :labelCol="BaseTool.Constant.labelCol"
+            :wrapperCol="BaseTool.Constant.wrapperCol"
+          >
+            <a-input-number
+              style="width: 100%"
+              :min="0"
+              :formatter="BaseTool.Amount.formatter"
+              :parser="BaseTool.Amount.parser"
+              v-decorator="['fee', {rules: [{required: true, message: '费用预算不能为空'}]}]" />
+          </a-form-item>
+        </row-item>
+      </row-list>
+      <row-list :col="1">
+        <row-item>
+          <a-form-item
+            label="相关图片"
+            :labelCol="BaseTool.Constant.labelCol2"
+            :wrapperCol="BaseTool.Constant.wrapperCol2"
+          >
+            <a-upload
+              :action="uploadUrl"
+              :multiple="true"
+              list-type="picture"
+              :file-list="defaultRepairFileList"
+              @change="handleRepairFileChange"
+              accept="image/*"
+              :headers="headers"
+            >
+              <a-button> <a-icon type="upload" /> 上传图片 </a-button>
+            </a-upload>
+          </a-form-item>
+        </row-item>
+        <row-item>
+          <a-form-item
+            label="相关文件"
+            :labelCol="BaseTool.Constant.labelCol2"
+            :wrapperCol="BaseTool.Constant.wrapperCol2"
+          >
+            <a-upload
+              :action="uploadUrl"
+              :multiple="true"
+              :file-list="defaultFileList"
+              @change="handleFileChange"
+              :headers="headers"
+            >
+              <a-button> <a-icon type="upload" /> 上传文件 </a-button>
+            </a-upload>
+          </a-form-item>
+        </row-item>
+<!--        <row-item>
+          <a-form-item
+            label="维修描述"
+            :labelCol="BaseTool.Constant.labelCol2"
+            :wrapperCol="BaseTool.Constant.wrapperCol2"
+          >
+            <a-textarea v-decorator="['repairContent']"/>
+          </a-form-item>
+        </row-item>-->
+      </row-list>
+    </a-form>
+    <template slot="footer">
+      <a-button :loading="confirmLoading" type="primary" @click="save()">保存</a-button>
+    </template>
+  </a-modal>
+</template>
+
+<script>
+import pick from 'lodash.pick'
+import { finishFee } from '@/api/preparation/preparation'
+import { uploadUrl } from '@/api/upms/file'
+import Vue from 'vue'
+import { ACCESS_TOKEN } from '@/store/mutation-types'
+
+export default {
+  name: 'FeeForm',
+  data () {
+    return {
+      model: null,
+      confirmLoading: false,
+      modalTitle: null,
+      form: this.$form.createForm(this),
+      visible: false,
+      // 下拉框map
+      headers: {
+        Authorization: 'Bearer ' + Vue.ls.get(ACCESS_TOKEN)
+      },
+      uploadUrl: uploadUrl,
+      defaultRepairFileList: [],
+      repairFileList: [], // 维修图片,
+      defaultFileList: [], // 维修文件
+      fileList: [],
+      userList: []
+    }
+  },
+  components: {
+  },
+  props: {
+  },
+  created () {
+    // 下拉框map
+  },
+  methods: {
+    base (record) {
+      this.visible = true
+      this.model = record
+      this.defaultFileList = []
+      this.repairFileList = []
+      this.modalTitle = '费用填报'
+      this.repairFileList = record.repairFileList
+      this.defaultRepairFileList = this.BaseTool.UPLOAD.transImg(this.repairFileList)
+      const { form: { setFieldsValue } } = this
+      this.$nextTick(() => {
+        setFieldsValue(Object.assign(pick(record, [
+          'id'
+        ])))
+      })
+    },
+    handleFileChange (info) {
+      this.defaultFileList = info.fileList
+      this.fileList = this.setFileList(info, 19)
+    },
+    handleRepairFileChange (info) {
+      this.defaultRepairFileList = info.fileList
+      this.repairFileList = this.setFileList(info, 12)
+    },
+    setFileList (info, type) {
+      const file = info.file
+      const fileList = info.fileList
+      if (file.status === 'done') {
+        return this.BaseTool.UPLOAD.getUploadFileDTO(fileList, type)
+      } else if (file.status === 'removed') {
+        return this.BaseTool.UPLOAD.getUploadFileDTO(fileList, type)
+      } else if (file.status === 'error') {
+        this.$message.error('上传失败')
+        return []
+      }
+    },
+    save () {
+      const { form: { validateFieldsAndScroll } } = this
+      this.confirmLoading = true
+      validateFieldsAndScroll((errors, values) => {
+        if (errors) {
+          this.confirmLoading = false
+          return
+        }
+        // 日期处理
+        values.imageList = this.repairFileList
+        values.fileList = this.fileList // 维修文件
+        finishFee(values).then(() => {
+          this.$message.info('费用填报已提交,等待申请人审核')
+          this.handleCancel(values)
+        }).catch(() => {
+          this.confirmLoading = false
+        })
+      })
+    },
+    handleCancel (values) {
+      this.visible = false
+      this.confirmLoading = false
+      this.form.resetFields()
+      if (this.BaseTool.Object.isNotBlank(values)) {
+        this.$emit('ok')
+      } else {
+        this.$emit('ok')
+      }
+    }
+  }
+}
+</script>

+ 5 - 108
src/views/preparation/preparation/modules/FinishForm.vue

@@ -12,62 +12,10 @@
         <a-input v-decorator="['id']" type="hidden"/>
       </a-form-item>
 
-      <row-list :col="2">
-        <row-item>
-          <a-form-item
-            label="费用金额"
-            :labelCol="BaseTool.Constant.labelCol"
-            :wrapperCol="BaseTool.Constant.wrapperCol"
-          >
-            <a-input-number
-              style="width: 100%"
-              :min="0"
-              :formatter="BaseTool.Amount.formatter"
-              :parser="BaseTool.Amount.parser"
-              v-decorator="['fee', {rules: [{required: true, message: '费用预算不能为空'}]}]" />
-          </a-form-item>
-        </row-item>
-      </row-list>
       <row-list :col="1">
         <row-item>
           <a-form-item
-            label="图片"
-            :labelCol="BaseTool.Constant.labelCol2"
-            :wrapperCol="BaseTool.Constant.wrapperCol2"
-          >
-            <a-upload
-              :action="uploadUrl"
-              :multiple="true"
-              list-type="picture"
-              :file-list="defaultRepairFileList"
-              @change="handleRepairFileChange"
-              accept="image/*"
-              :headers="headers"
-            >
-              <a-button> <a-icon type="upload" /> 上传图片 </a-button>
-            </a-upload>
-          </a-form-item>
-        </row-item>
-        <row-item>
-          <a-form-item
-            label="文件"
-            :labelCol="BaseTool.Constant.labelCol2"
-            :wrapperCol="BaseTool.Constant.wrapperCol2"
-          >
-            <a-upload
-              :action="uploadUrl"
-              :multiple="true"
-              :file-list="defaultFileList"
-              @change="handleFileChange"
-              :headers="headers"
-            >
-              <a-button> <a-icon type="upload" /> 上传文件 </a-button>
-            </a-upload>
-          </a-form-item>
-        </row-item>
-        <row-item>
-          <a-form-item
-            label="维修描述"
+            label="执行描述"
             :labelCol="BaseTool.Constant.labelCol2"
             :wrapperCol="BaseTool.Constant.wrapperCol2"
           >
@@ -85,29 +33,16 @@
 <script>
 import pick from 'lodash.pick'
 import { finish } from '@/api/preparation/preparation'
-import { uploadUrl } from '@/api/upms/file'
-import Vue from 'vue'
-import { ACCESS_TOKEN } from '@/store/mutation-types'
 
 export default {
-  name: 'BaseRepairApplicationForm',
+  name: 'FinishForm',
   data () {
     return {
       model: null,
       confirmLoading: false,
       modalTitle: null,
       form: this.$form.createForm(this),
-      visible: false,
-      // 下拉框map
-      headers: {
-        Authorization: 'Bearer ' + Vue.ls.get(ACCESS_TOKEN)
-      },
-      uploadUrl: uploadUrl,
-      defaultRepairFileList: [],
-      repairFileList: [], // 维修图片,
-      defaultFileList: [], // 维修文件
-      fileList: [],
-      userList: []
+      visible: false
     }
   },
   components: {
@@ -121,49 +56,14 @@ export default {
     base (record) {
       this.visible = true
       this.model = record
-      this.defaultFileList = []
-      this.repairFileList = []
-      // 如果是空标识添加
-      if (this.BaseTool.Object.isBlank(record)) {
-        this.modalTitle = '添加'
-        return
-      }
-      this.modalTitle = '维修完成'
-      this.repairFileList = record.repairFileList
-      this.defaultRepairFileList = this.BaseTool.UPLOAD.transImg(this.repairFileList)
+      this.modalTitle = '完成工单'
       const { form: { setFieldsValue } } = this
-      // 日期处理
-      if (record.repairEndTime !== null) {
-        record.repairEndTime = this.BaseTool.Date.formatter(record.repairEndTime, this.BaseTool.Date.PICKER_NORM_DATETIME_PATTERN)
-      } else {
-        record.repairEndTime = this.BaseTool.Date.formatter(new Date(), this.BaseTool.Date.PICKER_NORM_DATETIME_PATTERN)
-      }
       this.$nextTick(() => {
         setFieldsValue(Object.assign(pick(record, [
           'id'
         ])))
       })
     },
-    handleFileChange (info) {
-      this.defaultFileList = info.fileList
-      this.fileList = this.setFileList(info, 19)
-    },
-    handleRepairFileChange (info) {
-      this.defaultRepairFileList = info.fileList
-      this.repairFileList = this.setFileList(info, 12)
-    },
-    setFileList (info, type) {
-      const file = info.file
-      const fileList = info.fileList
-      if (file.status === 'done') {
-        return this.BaseTool.UPLOAD.getUploadFileDTO(fileList, type)
-      } else if (file.status === 'removed') {
-        return this.BaseTool.UPLOAD.getUploadFileDTO(fileList, type)
-      } else if (file.status === 'error') {
-        this.$message.error('上传失败')
-        return []
-      }
-    },
     save () {
       const { form: { validateFieldsAndScroll } } = this
       this.confirmLoading = true
@@ -172,11 +72,8 @@ export default {
           this.confirmLoading = false
           return
         }
-        // 日期处理
-        values.imageList = this.repairFileList
-        values.fileList = this.fileList // 维修文件
         finish(values).then(() => {
-          this.$message.info('已完成筹建维修')
+          this.$message.info('完成工单')
           this.handleCancel(values)
         }).catch(() => {
           this.confirmLoading = false

+ 17 - 3
src/views/preparation/preparation/modules/VerifyForm.vue

@@ -18,7 +18,7 @@
             :labelCol="BaseTool.Constant.labelCol2"
             :wrapperCol="BaseTool.Constant.wrapperCol2"
           >
-            <a-radio-group v-model="verifyStatus">
+            <a-radio-group v-model="verifyStatus" @change="changeOpinion">
               <a-radio :value="1">通过</a-radio>
               <a-radio :value="2">拒绝</a-radio>
               <a-radio :value="3">回退</a-radio>
@@ -33,7 +33,7 @@
           >
             <a-textarea
               :rows="4"
-              v-decorator="['verifyRemark']"/>
+              v-model="verifyRemark"/>
           </a-form-item>
         </row-item>
       </row-list>
@@ -58,7 +58,8 @@ export default {
       visible: false,
       verifyStatus: 1,
       // 下拉框map
-      model: null
+      model: null,
+      verifyRemark: '同意'
     }
   },
   components: {
@@ -68,6 +69,18 @@ export default {
   created () {
   },
   methods: {
+    changeOpinion (e) {
+      const val = e.target.value
+      this.dispatchFlag = false
+      if (val === 1) {
+        this.verifyRemark = '同意'
+        this.dispatchFlag = true
+      } else if (val === 2) {
+        this.verifyRemark = '拒绝'
+      } else if (val === 3) {
+        this.verifyRemark = '回退'
+      }
+    },
     base (record) {
       this.visible = true
       this.model = record
@@ -99,6 +112,7 @@ export default {
         }
         // 具体处理
         values.verifyStatus = this.verifyStatus
+        values.verifyRemark = this.verifyRemark
         console.log(values)
         handleVerifyByDTO(values)
           .then(() => {