Pārlūkot izejas kodu

项目跟踪新增谁可见功能

songxy 8 mēneši atpakaļ
vecāks
revīzija
38f9154a7b

+ 1 - 1
client/src/styles/index.scss

@@ -101,4 +101,4 @@ li {
 .fontWeight {
   font-weight: bold;
   cursor: pointer;
-}
+}

+ 2 - 2
client/src/views/OaSystem/projectCenter/projectDetail/components/xmxx/index.vue

@@ -197,7 +197,7 @@
               </tr>
             </table>
           </div>
-          <div class="tableBox" v-show="isMaster">
+          <!-- <div class="tableBox" v-show="isMaster">
             <h4><i class="icon"></i>分包信息</h4>
             <table>
               <tr>
@@ -209,7 +209,7 @@
                 <td>{{ projectDetail['ysdyxx'] }}</td>
               </tr>
             </table>
-          </div>
+          </div> -->
           <div class="tableBox">
             <h4><i class="icon"></i>产值信息</h4>
             <table>

+ 3 - 0
client/src/views/OaSystem/projectCenter/projectTrack/common.ts

@@ -37,6 +37,7 @@ export interface IFormType {
   xzqmc: string
   zt: string
   visibleUserIds: string
+  editUserIds: string
   status: number
   bz: string
   year: string
@@ -74,6 +75,7 @@ export const useMixins = () => {
     xzqmc: '',
     zt: '',
     visibleUserIds: '',
+    editUserIds: '',
     status: 0,
     bz: '',
     year: ''
@@ -101,6 +103,7 @@ export const useMixins = () => {
         xzqmc: '',
         zt: '',
         visibleUserIds: '',
+        editUserIds: '',
         status: 0,
         bz: '',
         year: ''

+ 94 - 62
client/src/views/OaSystem/projectCenter/projectTrack/index.vue

@@ -50,7 +50,7 @@
             <img src="@/assets/imgs/OA/search.png" class="mr-8px" alt="" />
             查询</el-button
           >
-          <el-button type="primary" @click="addOrEditHandle()">
+          <el-button type="primary" @click="addOrEditHandle(null, true)">
             <img src="@/assets/imgs/OA/open.png" class="mr-8px" alt="" />
             新增</el-button
           >
@@ -153,30 +153,15 @@
             </template>
           </el-table-column>
 
-          <el-table-column label="操作" width="120" fixed="right">
+          <el-table-column label="操作" width="126" fixed="right">
             <template #default="scope">
-              <div style="display: flex">
-                <div
-                  class="operateBtn"
-                  style="margin-right: 8px"
-                  @click="addOrEditHandle(scope.row)"
-                >
-                  <span>编辑</span>
+              <div style="display: flex; padding: 0px 10px; justify-content: space-between">
+                <div style="margin-right: 8px" @click="addOrEditHandle(scope.row, false)">
+                  <span style="color: #2e77e6">查看</span>
+                </div>
+                <div v-if="scope.row.isEditor === 1" @click="addOrEditHandle(scope.row, true)">
+                  <span style="color: #2e77e6">编辑</span>
                 </div>
-                <dialog-confirm
-                  title="确认删除该吗?"
-                  confirmButtonText="确定"
-                  cancelButtonText="取消"
-                  @confirm="deleteHandle(scope.row)"
-                  placement="top-end"
-                  width="280"
-                >
-                  <template #reference>
-                    <div class="operateBtn">
-                      <span>删除</span>
-                    </div>
-                  </template>
-                </dialog-confirm>
               </div>
             </template>
           </el-table-column>
@@ -199,7 +184,7 @@
       <div class="cover-header">
         <h2>{{ dialogTitle }}</h2>
       </div>
-      <div class="cover-content">
+      <div :class="{ 'cover-content': true, 'form-disabled-style': !isEditor }">
         <el-form
           ref="ruleFormRef"
           :rules="rules"
@@ -209,9 +194,25 @@
           class="demo-ruleForm"
           status-icon
         >
-          <el-form-item label="项目名称" prop="xmmc">
-            <el-input v-model="formData.xmmc" />
-          </el-form-item>
+          <el-row :gutter="100">
+            <el-col :span="12">
+              <el-form-item label="项目名称" prop="xmmc">
+                <el-input v-model="formData.xmmc" :disabled="!isEditor" />
+              </el-form-item>
+            </el-col>
+            <el-col :span="12">
+              <el-form-item label="行政区" prop="xzqdm">
+                <DistrictTree
+                  class="form-item-disable-style"
+                  placeholder="请选择行政区"
+                  :disabled="!isEditor"
+                  v-model="formData.xzqdm"
+                  @node-click="(item, labels) => treeNodeClick(labels, 'xzqmc')"
+                  style="width: 100%"
+                />
+              </el-form-item>
+            </el-col>
+          </el-row>
           <el-row :gutter="100">
             <el-col :span="12">
               <el-form-item label="所属板块" prop="ssbk">
@@ -219,6 +220,7 @@
                   v-model="formData.ssbk"
                   placeholder="请选择所属板块"
                   clearable
+                  :disabled="!isEditor"
                   style="width: 100%"
                 >
                   <el-option
@@ -234,6 +236,7 @@
               <el-form-item label="所属部门" prop="xmbmId">
                 <DeptTree
                   v-model="formData.xmbmId"
+                  :disabled="!isEditor"
                   @node-click="(item) => treeNodeClick(item, 'xmbm')"
                   placeholder="请选择部门"
                 />
@@ -245,6 +248,7 @@
               <el-form-item label="跟踪人员" prop="gzryId">
                 <UserOrgTree
                   v-model="formData.gzryId"
+                  :disabled="!isEditor"
                   placeholder="请选择跟踪人员"
                   @node-click="(item) => treeNodeClick(item, 'gzry')"
                 />
@@ -254,6 +258,7 @@
               <el-form-item label="区域总监" prop="qyzjId">
                 <UserOrgTree
                   v-model="formData.qyzjId"
+                  :disabled="!isEditor"
                   placeholder="请选择区域总监"
                   @node-click="(item) => treeNodeClick(item, 'qyzj')"
                 />
@@ -267,6 +272,7 @@
                   :data="contractTree"
                   :props="{ label: 'name', value: 'id' }"
                   v-model="formData.jfId"
+                  :disabled="!isEditor"
                   :filter-method="filterNodeMethod"
                   @node-click="(item) => treeNodeClick(item, 'jf')"
                   style="width: 100%"
@@ -275,19 +281,19 @@
             </el-col>
             <el-col :span="12">
               <el-form-item label="甲方科室" prop="jfks">
-                <el-input v-model="formData.jfks" />
+                <el-input v-model="formData.jfks" :disabled="!isEditor" />
               </el-form-item>
             </el-col>
           </el-row>
           <el-row :gutter="100">
             <el-col :span="12">
               <el-form-item label="甲方对接人" prop="jfdjr">
-                <el-input v-model="formData.jfdjr" />
+                <el-input v-model="formData.jfdjr" :disabled="!isEditor" />
               </el-form-item>
             </el-col>
             <el-col :span="12">
               <el-form-item label="是否进场" prop="sfjc">
-                <el-select v-model="formData.sfjc" style="width: 100%">
+                <el-select v-model="formData.sfjc" :disabled="!isEditor" style="width: 100%">
                   <el-option label="是" :value="0" />
                   <el-option label="否" :value="1" />
                 </el-select>
@@ -297,42 +303,48 @@
           <el-row :gutter="100">
             <el-col :span="12">
               <el-form-item label="预估金额(元)" prop="ygje">
-                <el-input v-model="formData.ygje" />
+                <el-input v-model="formData.ygje" :disabled="!isEditor" />
               </el-form-item>
             </el-col>
             <el-col :span="12">
               <el-form-item label="中标金额(元)" prop="zbje">
-                <el-input v-model="formData.zbje" />
+                <el-input v-model="formData.zbje" :disabled="!isEditor" />
               </el-form-item>
             </el-col>
           </el-row>
           <el-row :gutter="100">
-            <el-col :span="12">
-              <el-form-item label="行政区" prop="xzqdm">
-                <DistrictTree
-                  class="form-item-disable-style"
-                  placeholder="请选择行政区"
-                  v-model="formData.xzqdm"
-                  @node-click="(item, labels) => treeNodeClick(labels, 'xzqmc')"
-                  style="width: 100%"
-                />
-              </el-form-item>
-            </el-col>
             <el-col :span="12">
               <el-form-item label="谁可见" prop="visibleUserIds">
                 <UserOrgTree
                   v-model="visibleUserIds"
+                  :disabled="!isEditor"
                   :multiple="true"
                   placeholder="请选择跟谁可见"
                   @change="visibleUserChange"
                 />
               </el-form-item>
             </el-col>
+            <el-col :span="12">
+              <el-form-item label="谁可编辑" prop="editUserIds">
+                <UserOrgTree
+                  v-model="editUserIds"
+                  :disabled="!isEditor"
+                  :multiple="true"
+                  placeholder="请选择跟谁可编辑"
+                  @change="editUserChange"
+                />
+              </el-form-item>
+            </el-col>
           </el-row>
           <el-row :gutter="100">
             <el-col :span="12">
               <el-form-item label="状态" prop="zt">
-                <el-select v-model="formData.zt" placeholder="请选择状态" style="width: 100%">
+                <el-select
+                  v-model="formData.zt"
+                  :disabled="!isEditor"
+                  placeholder="请选择状态"
+                  style="width: 100%"
+                >
                   <el-option
                     v-for="(item, index) in getDictOptions(DICT_TYPE.TRACKING_PROJECT_STATE)"
                     :key="index"
@@ -344,18 +356,20 @@
             </el-col>
             <el-col :span="12">
               <el-form-item label="年份" prop="year">
-                <el-input v-model="formData.year" placeholder="请输入年份" />
+                <el-input v-model="formData.year" :disabled="!isEditor" placeholder="请输入年份" />
               </el-form-item>
             </el-col>
           </el-row>
           <el-form-item label="备注" prop="desc">
-            <el-input v-model="formData.bz" rows="5" type="textarea" />
+            <el-input v-model="formData.bz" :disabled="!isEditor" rows="5" type="textarea" />
           </el-form-item>
         </el-form>
       </div>
       <div class="cover-footer">
         <el-button @click="dialogVisible = false">关闭</el-button>
-        <el-button type="primary" @click="saveProjectTracking(ruleFormRef)"> 保存 </el-button>
+        <el-button v-if="isEditor" type="primary" @click="saveProjectTracking(ruleFormRef)">
+          保存
+        </el-button>
       </div>
     </div>
   </div>
@@ -385,6 +399,7 @@ const { data: contractTree } = useQuery(['contractTree'], async () => await quer
 })
 
 const visibleUserIds = ref<string[]>([])
+const editUserIds = ref<string[]>([])
 const tableRef: any = ref(null)
 const tableHeight: any = ref(0)
 const { queryParams, formData, initFormData } = useMixins()
@@ -437,13 +452,6 @@ const queryProjectTrackByDetail = async (id: string): Promise<void> => {
   }
   return await request.get({ url: urlApi, params: sendData }, '/business')
 }
-const removeProjectTrackByDetail = async (id: string): Promise<void> => {
-  const urlApi = `/projectTracking/delete`
-  const sendData = {
-    id
-  }
-  return await request.get({ url: urlApi, params: sendData }, '/business')
-}
 queryProjectTrackByPage()
 
 /**
@@ -467,29 +475,26 @@ queryProjectTrackingSummary()
 /**
  * 项目跟踪:新增、编辑
  */
+const isEditor = ref<boolean>(false)
 const dialogTitle = ref<string>('项目跟踪填报')
 const dialogVisible = ref<boolean>(false)
-const addOrEditHandle = (row?: IFormType) => {
+const addOrEditHandle = (row: IFormType, isBool: boolean) => {
   dialogVisible.value = true
+  isEditor.value = isBool
   if (!row) {
     dialogTitle.value = '项目跟踪填报'
     initFormData()
     visibleUserIds.value = []
+    editUserIds.value = []
   } else {
     dialogTitle.value = '项目跟踪编辑'
     queryProjectTrackByDetail(row['id']).then((result) => {
       initFormData(result as any)
       visibleUserIds.value = result['visibleUserIds'].split(',')
+      editUserIds.value = result['editUserIds'].split(',')
     })
   }
 }
-const deleteHandle = (row) => {
-  removeProjectTrackByDetail(row['id']).then((result: any) => {
-    if (result) {
-      searchHandle()
-    }
-  })
-}
 const treeNodeClick = (item, type: string) => {
   if (!item) return
   if (type === 'xzqmc') {
@@ -501,6 +506,9 @@ const treeNodeClick = (item, type: string) => {
 const visibleUserChange = (item) => {
   formData.value['visibleUserIds'] = item.join(',')
 }
+const editUserChange = (item) => {
+  formData.value['editUserIds'] = item.join(',')
+}
 const rules = reactive<FormRules<IFormType>>({
   xmmc: [{ required: true, message: '项目名称不能为空', trigger: 'blur' }],
   ssbk: [{ required: true, message: '所属板块不能为空', trigger: 'change' }],
@@ -527,6 +535,17 @@ const saveProjectTracking = async (formEl: FormInstance | undefined): Promise<vo
       const sendData = {
         ...formData.value
       }
+      let msg = ''
+      if (formData.value.ygje <= 1000) {
+        msg = '预估金额单位是元,请再确认输入金额是否正确!'
+      } else if (formData.value.zbje <= 1000) {
+        msg = '中标金额单位是元,请再确认输入金额是否正确!'
+      }
+      if (msg) {
+        if ((await MessageAlertSync(msg, '提示')) === 'cancel') {
+          return
+        }
+      }
       // sendData['visibleUserIds'] = visibleUserIds.value.join(',')
       const result = await request.post({ url: urlApi, data: sendData }, '/business')
       if (result) {
@@ -538,6 +557,19 @@ const saveProjectTracking = async (formEl: FormInstance | undefined): Promise<vo
     }
   })
 }
+const MessageAlertSync = (msg: string, title: string) => {
+  return new Promise((resolve, reject) => {
+    ElMessageBox.alert(msg, title, {
+      showCancelButton: true,
+      cancelButtonText: '取消',
+      confirmButtonText: '确认',
+      callback: (action) => {
+        console.log(action)
+        resolve(action)
+      }
+    })
+  })
+}
 const switchChange = (item) => {
   updateStatus({
     id: item['id'],

+ 5 - 0
zjugis-business/src/main/java/com/zjugis/business/bean/entity/ProjectTracking.java

@@ -89,6 +89,11 @@ public class ProjectTracking extends BaseEntity {
      */
     private String visibleUserIds;
 
+    /**
+     * 可见/可编辑人员
+     * **/
+    private String editUserIds;
+
     /**
      * 追踪开关状态(0:正常;1:停用)
      */

+ 3 - 0
zjugis-business/src/main/java/com/zjugis/business/bean/request/ProjectTrackingRequest.java

@@ -71,6 +71,9 @@ public class ProjectTrackingRequest {
     @Schema(description = "可见人员IDS")
     private String visibleUserIds;
 
+    @Schema(description = "可见/可编辑人员")
+    private String editUserIds;
+
     @Schema(description = "追踪开关状态")
     @NotNull(message = "追踪开关状态不能为空(0:正常;1:停用)")
     private Integer status;

+ 3 - 0
zjugis-business/src/main/java/com/zjugis/business/bean/response/ProjectTrackingResp.java

@@ -81,4 +81,7 @@ public class ProjectTrackingResp {
 
     @Schema(description = "年份")
     private Integer year;
+
+    @Schema(description = "是否可编辑")
+    private Integer isEditor;
 }

+ 2 - 0
zjugis-business/src/main/java/com/zjugis/business/converter/projecttracking/ProjectTrackingConvert.java

@@ -20,4 +20,6 @@ public interface ProjectTrackingConvert {
     ProjectTracking convert(ProjectTrackingRequest entity);
 
     PageResult<ProjectTrackingResp> convertPage(PageResult<ProjectTracking> page);
+
+    ProjectTrackingResp covert(ProjectTracking projectTracking);
 }

+ 12 - 1
zjugis-business/src/main/java/com/zjugis/business/service/impl/ProjectTrackingServiceImpl.java

@@ -9,12 +9,14 @@ import com.zjugis.business.converter.projecttracking.ProjectTrackingConvert;
 import com.zjugis.business.mapper.ProjectTrackingMapper;
 import com.zjugis.business.service.ProjectTrackingService;
 import com.zjugis.framework.common.pojo.PageResult;
+import com.zjugis.framework.security.core.util.SecurityFrameworkUtils;
 import org.apache.commons.lang3.StringUtils;
 import org.springframework.stereotype.Service;
 
 import javax.annotation.Resource;
 import java.math.BigDecimal;
 import java.util.List;
+import java.util.stream.Collectors;
 
 /**
  * @Author 陈俊
@@ -39,7 +41,16 @@ public class ProjectTrackingServiceImpl implements ProjectTrackingService {
 
     @Override
     public PageResult<ProjectTrackingResp> page(ProjectTrackingPageRequest reqVO) {
-        return ProjectTrackingConvert.INSTANCE.convertPage(projectTrackingMapper.page(reqVO));
+        PageResult<ProjectTracking> result = projectTrackingMapper.page(reqVO);
+        PageResult<ProjectTrackingResp> n_result = new PageResult<>();
+        n_result.setTotal(result.getTotal());
+        return n_result.setList(result.getList().stream().map(item->{
+            ProjectTrackingResp resp = ProjectTrackingConvert.INSTANCE.covert(item);
+            if(StringUtils.isNotBlank(item.getEditUserIds()) && item.getEditUserIds().contains(SecurityFrameworkUtils.getLoginUserId())){
+                resp.setIsEditor(1);
+            }
+            return resp;
+        }).collect(Collectors.toList()));
     }
 
     @Override