瀏覽代碼

功能优化

songxy 8 月之前
父節點
當前提交
a07247fe73

+ 4 - 4
client/src/views/OaSystem/projectCenter/projectBook/deptProject.vue

@@ -106,7 +106,7 @@
             :min-width="250"
           />
           <el-table-column prop="xmbh" label="项目编号" width="180" />
-          <el-table-column prop="xzqmc" label="行政区" width="100">
+          <el-table-column prop="xzqmc" label="行政区" width="80">
             <template #default="scope">
               {{ district[scope.row.xzqdm] }}
             </template>
@@ -114,14 +114,14 @@
           <el-table-column prop="projectTypeName" label="项目类别" width="160" />
           <el-table-column prop="zrbm" label="责任部门" :show-overflow-tooltip="true" width="200" />
           <el-table-column prop="xmjl" label="项目经理" width="120" />
-          <el-table-column prop="lxsj" label="立项时间" width="120" />
-          <el-table-column prop="yssj" label="验收时间" width="120" />
+          <el-table-column prop="lxsj" label="立项时间" width="110" />
+          <el-table-column prop="yssj" label="验收时间" width="110" />
           <el-table-column prop="contractAmount" align="center" label="合同额" width="120">
             <template #default="scope">{{
               scope.row.virtualAmount ?? scope.row.contractAmount ?? 0
             }}</template>
           </el-table-column>
-          <el-table-column prop="xmzt" label="项目状态" width="120">
+          <el-table-column prop="xmzt" label="项目状态" width="100">
             <template #default="scope">
               {{ getDictLabel(DICT_TYPE.PROJECT_STATUS, scope.row.xmzt) }}
             </template>

+ 3 - 3
client/src/views/OaSystem/projectCenter/projectBook/myProject.vue

@@ -122,14 +122,14 @@
           <el-table-column prop="projectTypeName" label="项目类别" width="160" />
           <el-table-column prop="zrbm" label="责任部门" :show-overflow-tooltip="true" width="200" />
           <el-table-column prop="xmjl" label="项目经理" width="120" />
-          <el-table-column prop="lxsj" label="立项时间" width="120" />
-          <el-table-column prop="yssj" label="验收时间" width="120" />
+          <el-table-column prop="lxsj" label="立项时间" width="110" />
+          <el-table-column prop="yssj" label="验收时间" width="110" />
           <el-table-column prop="contractAmount" align="center" label="合同额" width="120">
             <template #default="scope">{{
               scope.row.virtualAmount ?? scope.row.contractAmount ?? 0
             }}</template>
           </el-table-column>
-          <el-table-column prop="xmzt" label="项目状态" width="120">
+          <el-table-column prop="xmzt" label="项目状态" width="100">
             <template #default="scope">
               {{ getDictLabel(DICT_TYPE.PROJECT_STATUS, scope.row.xmzt) }}
             </template>

+ 5 - 5
client/src/views/OaSystem/projectCenter/projectBook/projectBook.vue

@@ -81,19 +81,19 @@
             height: '50px'
           }"
         >
-          <el-table-column label="序号" width="80">
+          <el-table-column label="序号" width="60">
             <template #default="scope">{{ scope.$index + 1 }}</template>
           </el-table-column>
-          <el-table-column :show-overflow-tooltip="true" prop="xmbh" width="180" label="项目编号" />
+          <el-table-column :show-overflow-tooltip="true" prop="xmbh" width="160" label="项目编号" />
           <el-table-column
             :show-overflow-tooltip="true"
             prop="xmmc"
             label="项目名称"
             :min-width="250"
           />
-          <el-table-column prop="lxsj" label="立项时间" width="140" />
+          <el-table-column prop="lxsj" label="立项时间" width="110" />
           <el-table-column prop="zrbm" label="责任部门" :show-overflow-tooltip="true" width="200" />
-          <el-table-column prop="xmjl" label="项目经理" width="120" />
+          <el-table-column prop="xmjl" label="项目经理" width="100" />
           <el-table-column prop="contractAmount" align="center" label="合同额" width="120">
             <template #default="scope">{{
               scope.row.virtualAmount ?? scope.row.contractAmount ?? 0
@@ -108,7 +108,7 @@
           <el-table-column prop="projectCost" align="center" label="项目总成本" width="120">
             <template #default="scope">{{ scope.row.projectCost ?? 0 }}</template>
           </el-table-column>
-          <el-table-column prop="xmzt" label="项目状态" width="120">
+          <el-table-column prop="xmzt" label="项目状态" width="100">
             <template #default="scope">
               {{ getDictLabel(DICT_TYPE.PROJECT_STATUS, scope.row.xmzt) }}
             </template>

+ 62 - 94
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(null, true)">
+          <el-button type="primary" @click="addOrEditHandle()">
             <img src="@/assets/imgs/OA/open.png" class="mr-8px" alt="" />
             新增</el-button
           >
@@ -153,15 +153,30 @@
             </template>
           </el-table-column>
 
-          <el-table-column label="操作" width="126" fixed="right">
+          <el-table-column label="操作" width="120" fixed="right">
             <template #default="scope">
-              <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 style="display: flex">
+                <div
+                  class="operateBtn"
+                  style="margin-right: 8px"
+                  @click="addOrEditHandle(scope.row)"
+                >
+                  <span>编辑</span>
                 </div>
+                <dialog-confirm
+                  title="删除将无法恢复该条数据,确认删除吗?"
+                  confirmButtonText="确定"
+                  cancelButtonText="取消"
+                  @confirm="deleteHandle(scope.row)"
+                  placement="top-end"
+                  width="360"
+                >
+                  <template #reference>
+                    <div class="operateBtn">
+                      <span>删除</span>
+                    </div>
+                  </template>
+                </dialog-confirm>
               </div>
             </template>
           </el-table-column>
@@ -184,7 +199,7 @@
       <div class="cover-header">
         <h2>{{ dialogTitle }}</h2>
       </div>
-      <div :class="{ 'cover-content': true, 'form-disabled-style': !isEditor }">
+      <div class="cover-content">
         <el-form
           ref="ruleFormRef"
           :rules="rules"
@@ -194,25 +209,9 @@
           class="demo-ruleForm"
           status-icon
         >
-          <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-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="ssbk">
@@ -220,7 +219,6 @@
                   v-model="formData.ssbk"
                   placeholder="请选择所属板块"
                   clearable
-                  :disabled="!isEditor"
                   style="width: 100%"
                 >
                   <el-option
@@ -236,7 +234,6 @@
               <el-form-item label="所属部门" prop="xmbmId">
                 <DeptTree
                   v-model="formData.xmbmId"
-                  :disabled="!isEditor"
                   @node-click="(item) => treeNodeClick(item, 'xmbm')"
                   placeholder="请选择部门"
                 />
@@ -248,7 +245,6 @@
               <el-form-item label="跟踪人员" prop="gzryId">
                 <UserOrgTree
                   v-model="formData.gzryId"
-                  :disabled="!isEditor"
                   placeholder="请选择跟踪人员"
                   @node-click="(item) => treeNodeClick(item, 'gzry')"
                 />
@@ -258,7 +254,6 @@
               <el-form-item label="区域总监" prop="qyzjId">
                 <UserOrgTree
                   v-model="formData.qyzjId"
-                  :disabled="!isEditor"
                   placeholder="请选择区域总监"
                   @node-click="(item) => treeNodeClick(item, 'qyzj')"
                 />
@@ -272,7 +267,6 @@
                   :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%"
@@ -281,19 +275,19 @@
             </el-col>
             <el-col :span="12">
               <el-form-item label="甲方科室" prop="jfks">
-                <el-input v-model="formData.jfks" :disabled="!isEditor" />
+                <el-input v-model="formData.jfks" />
               </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" :disabled="!isEditor" />
+                <el-input v-model="formData.jfdjr" />
               </el-form-item>
             </el-col>
             <el-col :span="12">
               <el-form-item label="是否进场" prop="sfjc">
-                <el-select v-model="formData.sfjc" :disabled="!isEditor" style="width: 100%">
+                <el-select v-model="formData.sfjc" style="width: 100%">
                   <el-option label="是" :value="0" />
                   <el-option label="否" :value="1" />
                 </el-select>
@@ -303,35 +297,34 @@
           <el-row :gutter="100">
             <el-col :span="12">
               <el-form-item label="预估金额(元)" prop="ygje">
-                <el-input v-model="formData.ygje" :disabled="!isEditor" />
+                <el-input v-model="formData.ygje" />
               </el-form-item>
             </el-col>
             <el-col :span="12">
               <el-form-item label="中标金额(元)" prop="zbje">
-                <el-input v-model="formData.zbje" :disabled="!isEditor" />
+                <el-input v-model="formData.zbje" />
               </el-form-item>
             </el-col>
           </el-row>
           <el-row :gutter="100">
             <el-col :span="12">
-              <el-form-item label="谁可见" prop="visibleUserIds">
-                <UserOrgTree
-                  v-model="visibleUserIds"
-                  :disabled="!isEditor"
-                  :multiple="true"
-                  placeholder="请选择跟谁可见"
-                  @change="visibleUserChange"
+              <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="editUserIds">
+              <el-form-item label="谁可见" prop="visibleUserIds">
                 <UserOrgTree
-                  v-model="editUserIds"
-                  :disabled="!isEditor"
+                  v-model="visibleUserIds"
                   :multiple="true"
-                  placeholder="请选择跟谁可编辑"
-                  @change="editUserChange"
+                  placeholder="请选择跟谁可"
+                  @change="visibleUserChange"
                 />
               </el-form-item>
             </el-col>
@@ -339,12 +332,7 @@
           <el-row :gutter="100">
             <el-col :span="12">
               <el-form-item label="状态" prop="zt">
-                <el-select
-                  v-model="formData.zt"
-                  :disabled="!isEditor"
-                  placeholder="请选择状态"
-                  style="width: 100%"
-                >
+                <el-select v-model="formData.zt" placeholder="请选择状态" style="width: 100%">
                   <el-option
                     v-for="(item, index) in getDictOptions(DICT_TYPE.TRACKING_PROJECT_STATE)"
                     :key="index"
@@ -356,20 +344,18 @@
             </el-col>
             <el-col :span="12">
               <el-form-item label="年份" prop="year">
-                <el-input v-model="formData.year" :disabled="!isEditor" placeholder="请输入年份" />
+                <el-input v-model="formData.year" placeholder="请输入年份" />
               </el-form-item>
             </el-col>
           </el-row>
           <el-form-item label="备注" prop="desc">
-            <el-input v-model="formData.bz" :disabled="!isEditor" rows="5" type="textarea" />
+            <el-input v-model="formData.bz" rows="5" type="textarea" />
           </el-form-item>
         </el-form>
       </div>
       <div class="cover-footer">
         <el-button @click="dialogVisible = false">关闭</el-button>
-        <el-button v-if="isEditor" type="primary" @click="saveProjectTracking(ruleFormRef)">
-          保存
-        </el-button>
+        <el-button type="primary" @click="saveProjectTracking(ruleFormRef)"> 保存 </el-button>
       </div>
     </div>
   </div>
@@ -399,7 +385,6 @@ 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()
@@ -452,6 +437,13 @@ 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()
 
 /**
@@ -475,26 +467,29 @@ queryProjectTrackingSummary()
 /**
  * 项目跟踪:新增、编辑
  */
-const isEditor = ref<boolean>(false)
 const dialogTitle = ref<string>('项目跟踪填报')
 const dialogVisible = ref<boolean>(false)
-const addOrEditHandle = (row: IFormType, isBool: boolean) => {
+const addOrEditHandle = (row?: IFormType) => {
   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') {
@@ -506,9 +501,6 @@ 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' }],
@@ -535,17 +527,6 @@ 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) {
@@ -557,19 +538,6 @@ 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'],

+ 23 - 19
client_h5/src/components/flowForm.vue

@@ -134,6 +134,19 @@ const emit = defineEmits<{
   (e: 'submit', payload?: any):void
 }>()
 const route = useRoute();
+const actions = ref<ActionItemTyp[]>([])
+const initActions = () => {
+  if (isObsoleteActivity.value) {
+    actions.value.push({
+      text: '作废'
+    })
+  }
+  if(isCallbackActivity.value){
+    actions.value.push({
+      text: '退回'
+    })
+  }
+}
 const currentActive = ref<string>('基础信息')
 const { flowInstanceId, activityInstanceId, participant, _o, _top, _isCalBack, _isObsolete } = route.query as {
   flowInstanceId: string
@@ -148,17 +161,19 @@ if (_o && _o == 'v') {
   isSubmitVisabled.value = false
 }
 if (!_isCalBack) {
-  getBtnHtml(flowInstanceId, activityInstanceId, userInfo.id).then(result => {
-    if (result && result.indexOf('退回') !== -1) {
-      isCallbackActivity.value = true
-    }
-    if (result && result.indexOf('作废') !== -1) {
-      isObsoleteActivity.value = true
-    }
-  })
+    getBtnHtml(flowInstanceId, activityInstanceId, userInfo.id).then((result) => {
+      if (result && result.indexOf('退回') !== -1) {
+        isCallbackActivity.value = true
+      }
+      if (result && result.indexOf('作废') !== -1) {
+        isObsoleteActivity.value = true
+      }
+      initActions()
+    })
 } else {
     isCallbackActivity.value = (_isCalBack && _isCalBack === '1') as boolean
     isObsoleteActivity.value = (_isObsolete && _isObsolete === '1') as boolean
+    initActions()
 }
 const currentOpinion = ref({
   id: '',
@@ -292,17 +307,6 @@ const operationHandle = (type: string) => {
 type ActionItemTyp = {
   text: string
 }
-const actions = ref<ActionItemTyp[]>([])
-if (isObsoleteActivity.value) {
-  actions.value.push({
-    text: '作废'
-  })
-}
-if(isCallbackActivity.value){
-  actions.value.push({
-    text: '退回'
-  })
-}
 const showPopover = ref<boolean>(false)
 const onSelect = (item: ActionItemTyp) => {
   if (item.text === '作废') {

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

@@ -46,7 +46,10 @@ public class ProjectTrackingServiceImpl implements ProjectTrackingService {
         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())){
+            if(
+                (StringUtils.isNotBlank(item.getEditUserIds()) && item.getEditUserIds().contains(SecurityFrameworkUtils.getLoginUserId()))
+                || item.getGzryId().equals(SecurityFrameworkUtils.getLoginUserId())
+            ){
                 resp.setIsEditor(1);
             }
             return resp;