Sfoglia il codice sorgente

Merge branch 'develop'

ly 10 mesi fa
parent
commit
1873cf0968

+ 17 - 1
src/api/business/production/onceWorkOrder.js

@@ -90,4 +90,20 @@ export function continueHandleApi(data){
     method: 'post',
     data: data
   })
-}
+}
+export function entrustSourceApi(query) {
+  request.defaults.baseURL = '/ezhizao-yzbh-production'
+  return request({
+    url: '/business/onceWorkOrder/entrustSource',
+    method: 'get',
+    params: query
+  })
+}
+export function selectRecordByOrderIdApi(query){
+  request.defaults.baseURL = '/ezhizao-yzbh-production'
+  return request({
+    url: '/business/onceWorkOrder/selectRecordByOrderId',
+    method: 'get',
+    params: query
+  })
+}

+ 3 - 1
src/directive/index.js

@@ -1,9 +1,11 @@
 import hasRole from './permission/hasRole'
-import hasPermi from './permission/hasPermi'
+import {hasPermi,hasNoPermi} from './permission/hasPermi'
+//import {hasNoPermi} from './permission/Permi'
 import copyText from './common/copyText'
 
 export default function directive(app){
   app.directive('hasRole', hasRole)
   app.directive('hasPermi', hasPermi)
+  app.directive('hasNoPermi', hasNoPermi)
   app.directive('copyText', copyText)
 }

+ 23 - 1
src/directive/permission/hasPermi.js

@@ -5,7 +5,7 @@
 
 import useUserStore from '@/store/modules/user'
 
-export default {
+export const hasPermi =  {
   mounted(el, binding, vnode) {
     const { value } = binding
     const all_permission = "*:*:*";
@@ -27,3 +27,25 @@ export default {
     }
   }
 }
+export const hasNoPermi =  {
+  mounted(el, binding, vnode) {
+    const { value } = binding
+    const all_permission = "*:*:*";
+    const permissions = useUserStore().permissions
+    // debugger
+
+    if (value && value instanceof Array && value.length > 0) {
+      const permissionFlag = value
+
+      const hasPermissions = permissions.some(permission => {
+        return all_permission === permission || permissionFlag.includes(permission)
+      })
+      // console.log(hasPermissions)
+      if (hasPermissions) {
+        el.parentNode && el.parentNode.removeChild(el)
+      }
+    } else {
+      throw new Error(`请设置操作权限标签值`)
+    }
+  }
+}

+ 4 - 0
src/plugins/auth.js

@@ -29,6 +29,10 @@ export default {
   hasPermi(permission) {
     return authPermission(permission);
   },
+  // 验证用户是否没有某权限
+  hasNoPermi(permission) {
+    return !authPermission(permission);
+  },
   // 验证用户是否含有指定权限,只需包含其中一个
   hasPermiOr(permissions) {
     return permissions.some(item => {

+ 3 - 3
src/views/business/crm/order/form.vue

@@ -217,7 +217,7 @@
                         <el-col :span="4" style="padding-top: 18px">
                           <el-form-item label="服务月数">
                             <el-input-number v-if="editStatus" v-model="item.serviceNum" :step="1" step-strictly
-                                             :min="0" :controls="false" @change="
+                                             :min="0" :disabled="item.disabled" :controls="false" @change="
                                 (arg) =>
                                   inputChangeHandler(
                                     'loop',
@@ -232,7 +232,7 @@
                         <el-col :span="4" style="padding-top: 18px">
                           <el-form-item label="赠送月数">
                             <el-input-number v-if="editStatus" v-model="item.freeNum" :step="1" step-strictly :min="0"
-                                             :controls="false" @change="
+                                             :disabled="item.disabled"     :controls="false" @change="
                                 (arg) =>
                                   inputChangeHandler(
                                     'loop',
@@ -709,7 +709,7 @@
                   <i class="fa fa-th-list" aria-hidden="true" /> 合同附件
                 </div>
                 <div class="details-btns-container" style="display: flex">
-                  <el-upload v-if="editStatus && type != 'alterOrder'" action="#" :http-request="upload"
+                  <el-upload v-if="editStatus" action="#" :http-request="upload"
                              :with-credentials="true" :show-file-list="false" multiple>
                     <el-button style="margin-top: 10px; margin-bottom:10px;" size="small" type="primary"
                                icon="Upload">点击上传</el-button>

+ 107 - 92
src/views/business/production/onceWork/index.vue

@@ -16,38 +16,59 @@
     </div>
     <!-- v-hasPermi="['business:entrust:workOrder:current:export']"> -->
     <!-- 搜索区 -->
-    <el-form  class="list-search-container" size="small" :model="queryParams" ref="queryRef" :inline="true"
+    <el-form  class="list-search-container"  :model="queryParams" ref="queryRef" :inline="true"
       label-width="78px">
       <el-form-item label="客户名称:" prop="companyName">
-        <el-input v-model="queryParams.companyName" style="width: 150px" placeholder="请输入客户名称" clearable
+        <el-input v-model="queryParams.companyName" size="small" style="width: 150px" placeholder="请输入客户名称" clearable
           @keyup.enter="handleQuery" />
       </el-form-item>
       <el-form-item label="工单状态:" prop="recordStatus">
-        <el-select v-model="queryParams.recordStatus" placeholder="请选择工单状态" clearable @change="handleQuery">
+        <el-select size="small" v-model="queryParams.recordStatus" placeholder="请选择工单状态" clearable @change="handleQuery">
           <el-option v-for="item in selectStatus" :key="item.value" :label="item.label" :value="item.value" />
         </el-select>
       </el-form-item>
       <el-form-item label="领取人:" prop="handlerName">
-        <el-input v-model="queryParams.handlerName" style="width: 150px" placeholder="请输入领取人" clearable
+        <el-input size="small" v-model="queryParams.handlerName" style="width: 150px" placeholder="请输入领取人" clearable
           @keyup.enter="handleQuery" />
       </el-form-item>
       <el-form-item label="项目:" prop="taskTypeName">
-        <el-input v-model="queryParams.taskTypeName" style="width: 150px" placeholder="请输入项目" clearable
+        <el-input size="small" v-model="queryParams.taskTypeName" style="width: 150px" placeholder="请输入项目" clearable
           @keyup.enter="handleQuery" />
       </el-form-item>
-      <el-form-item label="结果情况:" prop="resultStatus">
-        <el-select v-model="queryParams.resultStatus" placeholder="请选择结果情况" clearable @change="handleQuery">
+      <el-form-item label="任务结果:" prop="resultStatus">
+        <el-select size="small" v-model="queryParams.resultStatus" placeholder="请选择任务结果" clearable @change="handleQuery">
           <el-option v-for="item in resultStatus" :key="item.value" :label="item.label" :value="item.value" />
         </el-select>
       </el-form-item>
+      <el-form-item label="来源:" prop="formTenantId">
+        <el-select size="small" v-model="queryParams.formTenantId" placeholder="请选择来源" clearable @change="handleQuery">
+          <el-option v-for="(value,key) in entrustSource" :key="key" :label="value == null?'数据缺失':value" :value="key" />
+        </el-select>
+      </el-form-item>
+      <el-form-item  label="委托时间:" prop="entrustTimeFilter">
+        <el-date-picker v-model="queryParams.entrustTimeFilter" size="small" type="daterange" clearable
+                        format="YYYY - MM - DD " value-format="YYYY-MM-DD" range-separator="至" start-placeholder="委托时间"
+                        end-placeholder="委托时间" style="width: 100%;"></el-date-picker>
+      </el-form-item>
+      <el-form-item  label="领取时间:" prop="handlerTimeFilter">
+        <el-date-picker v-model="queryParams.handlerTimeFilter" size="small" type="daterange" clearable
+                        format="YYYY - MM - DD " value-format="YYYY-MM-DD" range-separator="至" start-placeholder="领取时间"
+                        end-placeholder="领取时间" style="width: 100%;"></el-date-picker>
+      </el-form-item>
+      <el-form-item  label="完成时间:" prop="finishTimeFilter">
+        <el-date-picker v-model="queryParams.finishTimeFilter" size="small" type="daterange" clearable
+                        format="YYYY - MM - DD " value-format="YYYY-MM-DD" range-separator="至" start-placeholder="完成时间"
+                        end-placeholder="完成时间" style="width: 100%;"></el-date-picker>
+      </el-form-item>
       <!-- <el-form-item v-if="tenant.versionId !== '4'" label="是否自己负责:" v-hasPermi="['business:once:person']">
         <el-switch v-model="oneself" @change="handleOneself" />
       </el-form-item> -->
       <el-form-item>
-        <el-button type="primary" icon="Search" @click="handleQuery">搜索</el-button>
-        <el-button icon="Refresh" @click="resetQuery">重置</el-button>
+        <el-button type="primary" icon="Search" size="small" @click="handleQuery">搜索</el-button>
+        <el-button icon="Refresh" size="small" @click="resetQuery">重置</el-button>
       </el-form-item>
     </el-form>
+
     <div v-if="flag && flag2 && tenant.versionId !== '4'">
       <el-tabs v-model="activeName" class="demo-tabs" @tab-click="handleClick">
         <el-tab-pane label="全部" name="first">
@@ -61,14 +82,14 @@
       @selection-change="handleSelectionChange">
       <el-table-column type="selection" width="55" align="center" />
       <!-- <el-table-column label="工单号" align="center" prop="workOrderNo" width="200" /> -->
-      <el-table-column label="客户名称" align="center" min-width="250" prop="companyName" />
+      <el-table-column fixed  label="客户名称" align="center" min-width="250" prop="companyName" />
       <!-- <el-table-column
         label="税号"
         align="center"
         prop="socialCreditCode"
         min-width="150"
       /> -->
-      <el-table-column label="来源" align="center" prop="accountName" min-width="150" v-if="tenant.versionId == '4'" />
+      <el-table-column label="来源" align="center" prop="accountName" min-width="150" />
       <!-- <el-table-column label="工单类型" align="center" prop="amount" width="80">
         <template #default="scope">
           {{ scope.row.type === 1 ? "循环工单" : "代办工单" }}
@@ -82,95 +103,24 @@
           }}
         </template>
       </el-table-column>
-      <el-table-column label="说明" align="center" prop="explain" min-width="180" />
-      <el-table-column label="合同" align="center" min-width="50" >
-        <template #default="scope">
-          <el-button link type="primary" size="small" @click="viewContract(scope.row)">查看</el-button>
-        </template>
-      </el-table-column>
-      <el-table-column label="委托时间" align="center" min-width="140">
-        <template #default="scope">
-          {{
-          scope.row.record != undefined
-          ? scope.row.record.entrustTime
-          : ""
-          }}
-        </template>
-      </el-table-column>
-      <el-table-column label="执行人" align="center" width="100" :show-overflow-tooltip="true">
-        <template #default="scope">
-          {{
-          scope.row.entrust != null
-          ? scope.row.entrust.toAccountName
-          : scope.row.serviceName
-          }}
-        </template>
-      </el-table-column>
       <el-table-column label="领取人" align="center" min-width="100" :show-overflow-tooltip="true">
         <template #default="scope">
           {{
-          scope.row.record != undefined
-          ? scope.row.record.handlerName
-          : ""
+            scope.row.record != undefined
+                ? scope.row.record.handlerName
+                : ""
           }}
         </template>
       </el-table-column>
       <el-table-column label="领取时间" align="center" min-width="140">
         <template #default="scope">
           {{
-          scope.row.record != undefined
-          ? scope.row.record.handlerTime
-          : ""
+            scope.row.record != undefined
+                ? scope.row.record.handlerTime
+                : ""
           }}
         </template>
       </el-table-column>
-      <el-table-column label="已收款" prop="arriveAmount" align="center" min-width="60">
-        <template #default="scope">
-          {{rowNum(scope.row.arriveAmount)}}
-        </template>
-      </el-table-column>
-
-      <el-table-column label="任务进度" align="center" prop="onWorkDetail" min-width="250">
-        <template #default="scope">
-          <el-button link type="primary" size="small" @click="viewOnWorkDetail(scope.row,true)"
-                     >{{textFormat(scope.row.onWorkDetail)}}</el-button>
-          <el-button v-if="scope.row.record != null&&scope.row.record.status !== 3&&scope.row.record.status !== 4&&scope.row.record.handlerId  ===  useUserStore().user.userId" style="margin: 0" link type="primary" icon="Edit"
-                     @click="viewOnWorkDetail(scope.row,false)" />
-        </template>
-      </el-table-column>
-
-      <el-table-column label="完成人" align="center" min-width="100">
-        <template #default="scope">
-          {{
-          scope.row.record != undefined
-          ? scope.row.record.recorderName
-          : ""
-          }}
-        </template>
-      </el-table-column>
-      <el-table-column label="完成时间" align="center" min-width="140">
-        <template #default="scope">
-          {{
-          scope.row.record != undefined
-          ? scope.row.record.finishTime
-          : ""
-          }}
-        </template>
-      </el-table-column>
-      <el-table-column label="结果情况" align="center" min-width="140">
-        <template #default="scope">
-          <div v-if="scope.row.record == null || scope.row.record.status===0">
-            {{}}
-          </div>
-          <div v-else>
-            <el-button link type="primary" size="small" @click="viewResult(scope.row,true)"
-            >{{resultLable(scope.row)}}</el-button>
-            <el-button v-if="scope.row.record.handlerId  ===  useUserStore().user.userId"  link type="primary" icon="Edit" size="small" style="margin: 0"
-                       @click="viewResult(scope.row,false)" />
-          </div>
-
-        </template>
-      </el-table-column>
       <el-table-column label="状态" align="center" width="100">
         <template #default="scope">
           <div :style="getStatusStyle(scope.row)">
@@ -215,7 +165,67 @@
           </div>
         </template>
       </el-table-column>
-      <el-table-column label="操作" width="130" align="center" prop="">
+      <el-table-column label="完成时间" align="center" min-width="140">
+        <template #default="scope">
+          {{
+            scope.row.record != undefined
+                ? scope.row.record.finishTime
+                : ""
+          }}
+        </template>
+      </el-table-column>
+      <el-table-column label="委托时间" align="center" min-width="140">
+        <template #default="scope">
+          {{
+            scope.row.record != undefined
+                ? scope.row.record.entrustTime
+                : ""
+          }}
+        </template>
+      </el-table-column>
+      <el-table-column label="任务进度" align="center" prop="onWorkDetail" min-width="250">
+        <template #default="scope">
+          <el-button link type="primary" size="small" @click="viewOnWorkDetail(scope.row,true)"
+          >{{textFormat(scope.row.onWorkDetail)}}</el-button>
+          <el-button v-if="scope.row.record != null&&scope.row.record.status !== 3&&scope.row.record.status !== 4&&scope.row.record.handlerId  ===  useUserStore().user.userId" style="margin: 0" link type="primary" icon="Edit"
+                     @click="viewOnWorkDetail(scope.row,false)" />
+        </template>
+      </el-table-column>
+      <el-table-column label="合同" align="center" min-width="50" >
+        <template #default="scope">
+          <el-button link type="primary" size="small" @click="viewContract(scope.row)">查看</el-button>
+        </template>
+      </el-table-column>
+      <el-table-column label="执行人" align="center" width="100" :show-overflow-tooltip="true">
+        <template #default="scope">
+          {{
+            scope.row.entrust != null
+                ? scope.row.entrust.toAccountName
+                : scope.row.serviceName
+          }}
+        </template>
+      </el-table-column>
+      <el-table-column label="已收款" prop="arriveAmount" align="center" min-width="60">
+        <template #default="scope">
+          {{rowNum(scope.row.arriveAmount)}}
+        </template>
+      </el-table-column>
+      <el-table-column label="交接单" align="center" min-width="140">
+        <template #default="scope">
+          <div v-if="scope.row.record == null || scope.row.record.status===0">
+            {{}}
+          </div>
+          <div v-else>
+            <el-button link type="primary" size="small" @click="viewResult(scope.row,true)"
+            >{{resultLable(scope.row)}}</el-button>
+            <el-button v-if="null != scope.row.record" v-hasPermi="['business:production:onceWork:perEdit']"  link type="primary" icon="Edit" size="small" style="margin: 0"
+                       @click="viewResult(scope.row,false)" />
+          </div>
+
+        </template>
+      </el-table-column>
+      <el-table-column label="说明" align="center" prop="explain" min-width="180" />
+      <el-table-column fixed="right"  label="操作" width="130" align="center" prop="">
         <template #default="scope">
 
           <el-button v-if="scope.row.record != null && scope.row.record.status === 4" size="small" type="primary" link
@@ -231,7 +241,7 @@
             领取
           </el-button>
           <el-button
-            v-if="scope.row.record !== undefined && scope.row.record.status == 1 && scope.row.record.handlerId  ===  useUserStore().user.userId"
+            v-if="scope.row.record !== undefined && scope.row.record.status === 1 && scope.row.record.handlerId  ===  useUserStore().user.userId"
             size="small" type="primary" link v-hasPermi="['business:production:onceWork:finished']"
             @click="finishedHandle3(scope.row)">
             取消领取
@@ -254,8 +264,7 @@
 
   import {
     listOnceWorkOrder,
-    saveDetail,
-    exportOnceWork,receive,continueHandleApi
+    exportOnceWork,receive,continueHandleApi,entrustSourceApi
   } from "@/api/business/production/onceWorkOrder";
   import { toRefs } from "vue";
   import useUserStore from "@/store/modules/user";
@@ -315,6 +324,7 @@
   const tenant = useUserStore().tenant;
   const list = ref([]);
   const loading = ref(true);
+  const entrustSource = ref();
   const ids = ref([]);
   const selections = ref([]);
   const oneself = ref(false);
@@ -353,9 +363,14 @@
   function getList() {
     loading.value = true;
     listOnceWorkOrder(queryParams.value).then((response) => {
+      list.value = [];
       list.value = response.rows;
       total.value = response.total;
       loading.value = false;
+      entrustSourceApi().then((res)=>{
+        entrustSource.value = res.data;
+        console.log(res.data)
+      })
     });
   }
 

+ 25 - 13
src/views/business/production/onceWork/resultDialog.vue

@@ -4,11 +4,14 @@
     <el-form :model="sumbitForm" label-width="auto" :rules="rules" ref="workDetailForm" style="max-width: 600px">
       <div v-if="falg">
         <el-form-item>
-          任务结果:{{sumbitForm.resultStatus === 2?'暂停办理':sumbitForm.resultStatus === 0?'终止任务':'完成任务'}}
+          &nbsp;&nbsp;  &nbsp;任务结果:{{sumbitForm.resultStatus === 2?'暂停办理':sumbitForm.resultStatus === 0?'终止任务':'完成任务'}}
+        </el-form-item>
+        <el-form-item v-if="sumbitForm.resultStatus === 0 ||sumbitForm.resultStatus === 1">
+          &nbsp;&nbsp;  &nbsp;完成时间:{{finishTime}}
         </el-form-item>
       </div>
       <div v-else>
-        <el-form-item v-if="handlerId === useUserStore().user.userId" prop="resultStatus" label="任务结果">
+        <el-form-item prop="resultStatus" label="任务结果:">
           <div>
             <el-select
                 v-model="sumbitForm.resultStatus"
@@ -27,13 +30,14 @@
         </el-form-item>
       </div>
       <div class="imgClass" v-if="falg">
-        <el-col :span="24">
+        <div style="white-space: nowrap;">上传交接单:</div>
+        <el-col :span="20">
           <el-row :gutter="10">
             <el-col v-for="(o, index) in filesTable" :key="o.id" :span="8"
                     style="margin-bottom: 10px; position: relative">
               <el-card :body-style="{ padding: '0px' }">
                 <!-- <img :src="`${baseUrl}${o.fileUrl}`" class="image" style="max-width: 100%; height: 200px" @click="handleImageView(o.fileUrl)" /> -->
-                <el-image :src="`${baseUrl}${o.fileUrl}`" class="image" style="max-width: 100%; height: 200px"
+                <el-image :src="`${baseUrl}${o.fileUrl}`" class="image" style="max-width: 100%; height: 150px"
                           :preview-teleported="true" fit="contain" :preview-src-list="preList" :initial-index="index"
                 />
               </el-card>
@@ -43,24 +47,24 @@
 
       </div>
       <div ref="uploadDiv" v-else>
-        <el-form-item>
+        <el-form-item label="上传交接单:">
           <el-col  :span="24">
             <el-row :gutter="10">
               <el-col v-for="(o, index) in fileEntityList" :key="o.id" :span="8"
                       style="margin-bottom: 10px; position: relative">
                 <el-card :body-style="{ padding: '0px' }">
                   <!-- <img :src="`${baseUrl}${o.fileUrl}`" class="image" style="max-width: 100%; height: 200px" @click="handleImageView(o.fileUrl)" /> -->
-                  <el-image :src="`${baseUrl}${o.fileUrl}`" class="image" style="     background-color: black;max-width: 100%; height: 200px"
+                  <el-image :src="`${baseUrl}${o.fileUrl}`" class="image" style="     background-color: black;max-width: 100%; height: 150px"
                             :preview-teleported="true" fit="contain" :preview-src-list="viewList" :initial-index="index"
                   />
 
-                  <Delete @click="deleteCol(o.id,o.fileUrl)" style="width: 130px; height: 20px;" />
+                  <Delete @click="deleteCol(o.id,o.fileUrl)" style="width: 110px; height: 20px;" />
                 </el-card>
               </el-col>
             </el-row>
           </el-col>
         </el-form-item>
-        <el-form-item v-if="handlerId === useUserStore().user.userId">
+        <el-form-item label="  " >
           <el-upload
 
               v-show="uploadHidden"
@@ -86,11 +90,12 @@
         </el-form-item>
         <input type="text" style="opacity: 0" ref="fileIpt">
       </div>
+
     </el-form>
     <template #footer>
       <div class="dialog-footer">
         <el-button @click="outerVisible = false">关闭</el-button>
-        <el-button type="primary" v-if="!falg && handlerId === useUserStore().user.userId" v-hasPermi="['business:production:onceWork:finished']" @click="onsumbit">提交</el-button>
+        <el-button type="primary" v-if="!falg" v-hasPermi="['business:production:onceWork:finished']" @click="onsumbit">提交</el-button>
       </div>
     </template>
   </el-dialog>
@@ -102,6 +107,7 @@ import { uploadFile } from "@/api/tool/file";
 import {computed, defineProps, getCurrentInstance, reactive, toRefs} from "vue";
 import useUserStore from "@/store/modules/user";
 import {
+  selectRecordByOrderIdApi,
   updateRecordStatus,
   FileList,uploadFiles,delFile
 } from "@/api/business/production/onceWorkOrder";
@@ -135,7 +141,7 @@ const viewList = ref([]);
 const falg = ref(false);
 let refile = null;
 let fileEntity:Ifile = {};
-
+const finishTime = ref();
 interface Ifile{
   id?:number;
   fileName?:string;
@@ -212,7 +218,11 @@ function openView(id,status,userId,resultStatus,view){
   }else{
     sumbitForm.resultStatus = null;
   }
-
+  if(resultStatus === 0 ||resultStatus === 1){
+    selectRecordByOrderIdApi({"workOrderId":id}).then((res:any)=>{
+      finishTime.value = res.data[0].finishTime;
+    })
+  }
   sumbitForm.file = null;
   formHidden.value = status;
   falg.value = view;
@@ -225,6 +235,7 @@ function openView(id,status,userId,resultStatus,view){
   filesTable.value = null;
   pasteList.value =[];
   preList.value = [];
+  viewList.value = [];
   fileEntityList.value = [];
   FileList({"masterTableName":"biz_work_order_record","masterId":id}).then((response) => {
     filesTable.value = response.data
@@ -294,7 +305,8 @@ const handlePase = (e)=>{
           fileEntity.originalFileName = res.originalFilename;
           fileEntity.fileUrl = res.fileName;
         }
-        viewList.value.push(`${baseUrl}+${res.url}`);
+        console.log(res.url);
+        viewList.value.push(`${baseUrl}\\${res.fileName}`);
         fileEntityList.value.push(fileEntity);
       })
     })
@@ -345,7 +357,7 @@ const handleOnChange = (e)=>{
           fileEntity.originalFileName = res.originalFilename;
           fileEntity.fileUrl = res.fileName;
         }
-        viewList.value.push(`${baseUrl}+${res.url}`);
+        viewList.value.push(`${baseUrl}\\${res.fileName}`);
         fileEntityList.value.push(fileEntity);
       })
   }