Forráskód Böngészése

详情表单修改

yewc 1 éve
szülő
commit
fb1a64741c

+ 220 - 0
client/src/views/OaSystem/financialManagement/loan/UserForm.vue

@@ -0,0 +1,220 @@
+<template>
+  <Dialog v-model="dialogVisible" title="核销">
+    <el-form
+      ref="formRef"
+      v-loading="formLoading"
+      :model="formData"
+      :rules="formRules"
+      label-width="80px"
+    >
+      <el-row>
+        <el-col :span="12">
+          <el-form-item label="用户昵称" prop="nickname">
+            <el-input v-model="formData.nickname" placeholder="请输入用户昵称" />
+          </el-form-item>
+        </el-col>
+        <el-col :span="12">
+          <el-form-item label="归属部门" prop="deptId">
+            <el-tree-select
+              v-model="formData.deptId"
+              :data="deptList"
+              :props="defaultProps"
+              :default-expand-all="true"
+              check-strictly
+              node-key="id"
+              filterable
+              clearable
+              placeholder="请选择归属部门"
+            />
+          </el-form-item>
+        </el-col>
+      </el-row>
+      <el-row>
+        <el-col :span="12">
+          <el-form-item label="手机号码" prop="mobile">
+            <el-input v-model="formData.mobile" maxlength="11" placeholder="请输入手机号码" />
+          </el-form-item>
+        </el-col>
+        <el-col :span="12">
+          <el-form-item label="用户性别">
+            <el-select v-model="formData.sex" placeholder="请选择">
+              <el-option
+                v-for="dict in getIntDictOptions(DICT_TYPE.SYSTEM_USER_SEX)"
+                :key="dict.value"
+                :label="dict.label"
+                :value="dict.value"
+              />
+            </el-select>
+          </el-form-item>
+        </el-col>
+      </el-row>
+      <el-row>
+        <el-col :span="12">
+          <el-form-item v-if="formData.id === undefined" label="用户名称" prop="username">
+            <el-input v-model="formData.username" placeholder="请输入用户名称" />
+          </el-form-item>
+        </el-col>
+        <el-col :span="12">
+          <el-form-item v-if="formData.id === undefined" label="用户密码" prop="password">
+            <el-input
+              v-model="formData.password"
+              placeholder="请输入用户密码"
+              show-password
+              type="password"
+            />
+          </el-form-item>
+        </el-col>
+      </el-row>
+      <el-row>
+        <el-col :span="12">
+          <el-form-item label="邮箱" prop="email">
+            <el-input v-model="formData.email" maxlength="50" placeholder="请输入邮箱" />
+          </el-form-item>
+        </el-col>
+        <el-col :span="12">
+          <el-form-item label="岗位">
+            <el-select v-model="formData.postIds" multiple placeholder="请选择">
+              <el-option
+                v-for="item in postList"
+                :key="item.id"
+                :label="item.name"
+                :value="item.id"
+              />
+            </el-select>
+          </el-form-item>
+        </el-col>
+      </el-row>
+      <el-row>
+        <el-col :span="24">
+          <el-form-item label="备注">
+            <el-input v-model="formData.remark" placeholder="请输入内容" type="textarea" />
+          </el-form-item>
+        </el-col>
+      </el-row>
+    </el-form>
+    <template #footer>
+      <el-button :disabled="formLoading" type="primary" @click="submitForm">确 定</el-button>
+      <el-button @click="dialogVisible = false">取 消</el-button>
+    </template>
+  </Dialog>
+</template>
+<script lang="ts" setup>
+import { DICT_TYPE, getIntDictOptions } from '@/utils/dict'
+import { CommonStatusEnum } from '@/utils/constants'
+import { defaultProps, handleTree } from '@/utils/tree'
+import * as PostApi from '@/api/system/post'
+import * as DeptApi from '@/api/system/dept'
+import * as UserApi from '@/api/system/user'
+
+defineOptions({ name: 'SystemUserForm' })
+
+const { t } = useI18n() // 国际化
+const message = useMessage() // 消息弹窗
+
+const dialogVisible = ref(false) // 弹窗的是否展示
+const formLoading = ref(false) // 表单的加载中:1)修改时的数据加载;2)提交的按钮禁用
+const formType = ref('') // 表单的类型:create - 新增;update - 修改
+const formData = ref({
+  nickname: '',
+  deptId: '',
+  deptName: '',
+  mobile: '',
+  email: '',
+  id: undefined,
+  username: '',
+  password: '',
+  sex: undefined,
+  postIds: [],
+  remark: '',
+  status: CommonStatusEnum.ENABLE,
+  roleIds: []
+})
+const formRules = reactive({
+  username: [{ required: true, message: '用户名称不能为空', trigger: 'blur' }],
+  nickname: [{ required: true, message: '用户昵称不能为空', trigger: 'blur' }],
+  password: [{ required: true, message: '用户密码不能为空', trigger: 'blur' }],
+  email: [
+    {
+      type: 'email',
+      message: '请输入正确的邮箱地址',
+      trigger: ['blur', 'change']
+    }
+  ],
+  mobile: [
+    {
+      pattern: /^(?:(?:\+|00)86)?1(?:3[\d]|4[5-79]|5[0-35-9]|6[5-7]|7[0-8]|8[\d]|9[189])\d{8}$/,
+      message: '请输入正确的手机号码',
+      trigger: 'blur'
+    }
+  ]
+})
+const formRef = ref() // 表单 Ref
+const deptList = ref<Tree[]>([]) // 树形结构
+const postList = ref([]) // 岗位列表
+
+/** 打开弹窗 */
+const open = async (type: string, id?: number) => {
+  dialogVisible.value = true
+  formType.value = type
+  resetForm()
+  // 修改时,设置数据
+  if (id) {
+    formLoading.value = true
+    try {
+      formData.value = await UserApi.getUser(id)
+    } finally {
+      formLoading.value = false
+    }
+  }
+  // 加载部门树
+  deptList.value = handleTree(await DeptApi.getSimpleDeptList())
+  // 加载岗位列表
+  postList.value = await PostApi.getSimplePostList()
+}
+defineExpose({ open }) // 提供 open 方法,用于打开弹窗
+
+/** 提交表单 */
+const emit = defineEmits(['success']) // 定义 success 事件,用于操作成功后的回调
+const submitForm = async () => {
+  // 校验表单
+  if (!formRef) return
+  const valid = await formRef.value.validate()
+  if (!valid) return
+  // 提交请求
+  formLoading.value = true
+  try {
+    const data = formData.value as unknown as UserApi.UserVO
+    if (formType.value === 'create') {
+      await UserApi.createUser(data)
+      message.success(t('common.createSuccess'))
+    } else {
+      await UserApi.updateUser(data)
+      message.success(t('common.updateSuccess'))
+    }
+    dialogVisible.value = false
+    // 发送操作成功的事件
+    emit('success')
+  } finally {
+    formLoading.value = false
+  }
+}
+
+/** 重置表单 */
+const resetForm = () => {
+  formData.value = {
+    nickname: '',
+    deptId: '',
+    mobile: '',
+    email: '',
+    id: undefined,
+    username: '',
+    password: '',
+    sex: undefined,
+    postIds: [],
+    remark: '',
+    status: CommonStatusEnum.ENABLE,
+    roleIds: []
+  }
+  formRef.value?.resetFields()
+}
+</script>

+ 39 - 1
client/src/views/OaSystem/financialManagement/loan/loan.vue

@@ -93,6 +93,9 @@
             <div class="operateBtn" @click="operateClick(scope.row)">
               <span>查看</span>
             </div>
+            <div class="operateBtn" @click="openForm(scope.row)">
+              <span>核销</span>
+            </div>
           </template>
         </el-table-column>
       </TableLayout>
@@ -108,6 +111,7 @@
       </div>
     </div>
   </div>
+  <UserForm ref="formRef" @success="queryLoanListAjax" />
 </template>
 <script setup lang="ts">
 import moment from 'moment'
@@ -115,7 +119,7 @@ import { useRouter } from 'vue-router'
 import request from '@/config/axios'
 import { getAssetURL } from '@/utils/auth'
 import TableLayout from '../../oaViews/layout/TableLayout.vue'
-
+import UserForm from './UserForm.vue'
 defineOptions({ name: 'LoanList' })
 const verifyMap: any = { null: '未核销', 1: '已核销', 0: '未核销' }
 const flowStatusMap: any = { 1: '办理中', 90: '已借' }
@@ -193,6 +197,7 @@ const tableData = ref<Array<any>>([])
 const total = ref<number>()
 const searchHandle: () => void = () => {
   queryLoanListAjax()
+  getOverview()
 }
 const queryLoanListAjax = async (): Promise<void> => {
   const urlApi = `/loan/page`
@@ -207,10 +212,43 @@ const queryLoanListAjax = async (): Promise<void> => {
   const result = await request.get({ url: urlApi, params: sendData }, '/business')
   tableData.value = result['records']
   total.value = result['total']
+  getOverview()
 }
 queryLoanListAjax()
 
 const filterNodeMethod = (value, data) => {
   return data.name.includes(value)
 }
+/** 查询概况 */
+const getOverview = async () => {
+  const urlApi = `/loan/overview`
+  if (applyDate.value && applyDate.value.length > 0) {
+    queryParams.applyOn = moment(applyDate.value[0]).format('YYYY-MM-DD')
+    queryParams.applyOff = moment(applyDate.value[1]).format('YYYY-MM-DD')
+  }
+  const sendData = {
+    ...queryParams,
+    pageSize: 10
+  }
+  const data = await request.get({ url: urlApi, params: sendData }, '/business')
+  if (data.totalAmount > 100000) {
+    infoList.value[0].num = data.totalAmount / 10000
+    infoList.value[1].num = data.hexiaoAmount / 10000
+    infoList.value[2].num = (data.totalAmount - data.hexiaoAmount) / 10000
+    infoList.value[0].name = '已借款总金额(万元)'
+    infoList.value[1].name = '已核销总金额(万元)'
+    infoList.value[2].name = '借款总余额(万元)'
+  } else {
+    infoList.value[0].num = data.totalAmount / 10000
+    infoList.value[1].num = data.hexiaoAmount / 10000
+    infoList.value[2].num = data.totalAmount - data.hexiaoAmount
+    infoList.value[0].name = '已借款总金额(元)'
+    infoList.value[1].name = '已核销总金额(元)'
+    infoList.value[2].name = '借款总余额(元)'
+  }
+}
+const formRef = ref()
+const openForm = (row: object) => {
+  formRef.value.open(row)
+}
 </script>

+ 15 - 3
client/src/views/OaSystem/financialManagement/yksqPage/index.vue

@@ -203,9 +203,21 @@ const getList = async () => {
 /** 查询概况 */
 const getOverview = async () => {
   const data = await UseMoneyApi.getUseMoneyOverview(queryParams)
-  infoList.value[0].num = data.totalAmount
-  infoList.value[1].num = data.totalUseAmount
-  infoList.value[2].num = data.totalApplyAmount
+  if (data.totalAmount > 100000) {
+    infoList.value[0].num = data.totalAmount / 10000
+    infoList.value[1].num = data.totalUseAmount / 10000
+    infoList.value[2].num = data.totalApplyAmount / 10000
+    infoList.value[0].name = '用款总金额(万元)'
+    infoList.value[1].name = '已用款总金额(万元)'
+    infoList.value[2].name = '申请用款总金额(万元)'
+  } else {
+    infoList.value[0].num = data.totalAmount
+    infoList.value[1].num = data.totalUseAmount
+    infoList.value[2].num = data.totalApplyAmount
+    infoList.value[0].name = '用款总金额(元)'
+    infoList.value[1].name = '已用款总金额(元)'
+    infoList.value[2].name = '申请用款总金额(元)'
+  }
 }
 
 /** 搜索按钮操作 */

+ 30 - 0
zjugis-business/src/main/java/com/zjugis/business/bean/response/LoanRespense.java

@@ -0,0 +1,30 @@
+package com.zjugis.business.bean.response;
+
+import com.zjugis.business.mybatis.entity.BaseEntity;
+import lombok.Data;
+
+import java.math.BigDecimal;
+import java.text.DecimalFormat;
+import java.time.LocalDate;
+
+/**
+ * @Author 陈俊
+ * @Date 2023/12/12 11:07
+ * @Version 1.0
+ */
+@Data
+public class LoanRespense  {
+
+    /**
+     * ID
+     */
+    private BigDecimal totalAmount;
+
+    /**
+     * 外购存货采购申请ID
+     */
+    private BigDecimal hexiaoAmount;
+
+
+
+}

+ 6 - 0
zjugis-business/src/main/java/com/zjugis/business/controller/LoanController.java

@@ -3,12 +3,14 @@ package com.zjugis.business.controller;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.zjugis.business.bean.dto.LoanDto;
 import com.zjugis.business.bean.entity.Loan;
+import com.zjugis.business.bean.response.LoanRespense;
 import com.zjugis.business.service.LoanService;
 import com.zjugis.framework.common.pojo.CommonResult;
 import org.springframework.web.bind.annotation.*;
 
 import javax.annotation.Resource;
 import java.util.List;
+import java.util.Map;
 
 /**
  * 借款申请表(LOAN)表控制层
@@ -29,6 +31,10 @@ public class LoanController {
         return CommonResult.success(loanService.page(loan));
     }
 
+    @GetMapping("/loan/overview")
+    public CommonResult<LoanRespense> overview(LoanDto loan) {
+        return CommonResult.success(loanService.overview(loan));
+    }
 
     /**
      * 通过主键查询单条数据

+ 5 - 0
zjugis-business/src/main/java/com/zjugis/business/mapper/LoanMapper.java

@@ -4,9 +4,12 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.zjugis.business.bean.dto.LoanDto;
 import com.zjugis.business.bean.entity.Loan;
+import com.zjugis.business.bean.response.LoanRespense;
 import org.apache.ibatis.annotations.Param;
 import org.springframework.stereotype.Repository;
 
+import java.util.Map;
+
 /**
  * 借款申请表(Loan)表数据库访问层
  *
@@ -20,5 +23,7 @@ public interface LoanMapper extends BaseMapper<Loan> {
     Page<Loan> page(Page<Loan> page, @Param("params") LoanDto loan);
 
     Integer getCount(@Param("params")LoanDto loan);
+
+    LoanRespense overview(@Param("params")LoanDto loan);
 }
 

+ 4 - 0
zjugis-business/src/main/java/com/zjugis/business/service/LoanService.java

@@ -3,8 +3,10 @@ package com.zjugis.business.service;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.zjugis.business.bean.dto.LoanDto;
 import com.zjugis.business.bean.entity.Loan;
+import com.zjugis.business.bean.response.LoanRespense;
 
 import java.util.List;
+import java.util.Map;
 
 /**
  * 借款申请表(LOAN)表服务接口
@@ -51,5 +53,7 @@ public interface LoanService {
     int deleteByIdList(List<String> ids);
 
     Integer getCount(LoanDto loan);
+
+    LoanRespense overview(LoanDto loan);
 }
 

+ 7 - 0
zjugis-business/src/main/java/com/zjugis/business/service/impl/LoanServiceImpl.java

@@ -3,6 +3,7 @@ package com.zjugis.business.service.impl;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.zjugis.business.bean.dto.LoanDto;
 import com.zjugis.business.bean.entity.Loan;
+import com.zjugis.business.bean.response.LoanRespense;
 import com.zjugis.business.mapper.LoanMapper;
 import com.zjugis.business.service.LoanService;
 import com.zjugis.framework.security.core.util.SecurityFrameworkUtils;
@@ -10,6 +11,7 @@ import org.springframework.stereotype.Service;
 
 import javax.annotation.Resource;
 import java.util.List;
+import java.util.Map;
 
 /**
  * 借款申请表(LOAN)表服务实现类
@@ -86,5 +88,10 @@ public class LoanServiceImpl implements LoanService {
         loan.setWorkerId(SecurityFrameworkUtils.getLoginUserId());
         return loanMapper.getCount(loan);
     }
+
+    @Override
+    public LoanRespense overview(LoanDto loan) {
+        return loanMapper.overview(loan);
+    }
 }
 

+ 28 - 0
zjugis-business/src/main/resources/mapper/oracle/LoanMapper.xml

@@ -52,5 +52,33 @@
             </if>
         </where>
     </select>
+    <select id="overview" resultType="com.zjugis.business.bean.response.LoanRespense">
+        SELECT
+        sum(case when L.FLOW_STATUS =90 then LOAN_AMOUNT else 0 end ) as totalAmount,
+        sum(case when L.IS_VERIFY =1 then LOAN_AMOUNT else 0 end ) as hexiaoAmount
+        FROM LOAN L
+        <where>
+            L.ISVALID = 1 and (FLOW_STATUS=90 or IS_VERIFY=1)
+            <if test="params != null and params.loanNumber != null and params.loanNumber != ''">
+                AND L.LOAN_NUMBER = #{params.loanNumber}
+            </if>
+            <if test="params != null and params.applyOn != null">
+                AND L.APPLY_DATE &gt;= #{params.applyOn}
+            </if>
+            <if test="params != null and params.applyOff != null">
+                AND L.APPLY_DATE &lt;= #{params.applyOff}
+            </if>
+            <if test="params != null and params.workerId != null and params.workerId != ''">
+                AND L.WORKER_ID = #{params.workerId}
+            </if>
+
+            <if test="params != null and params.isVerify != null">
+                AND L.IS_VERIFY = #{params.isVerify}
+            </if>
+            <if test="params != null and params.flowStatus != null">
+                AND L.FLOW_STATUS = #{params.flowStatus}
+            </if>
+        </where>
+    </select>
 </mapper>
 

+ 13 - 17
zjugis-business/src/main/resources/templates/AssetProcure/js/agentIndex.js

@@ -43,7 +43,6 @@
           isTimes.push(obj)
           generateTableTrHtml(isTimes.length-1)
           buildQjsjSeq();
-          detailTotalInit();
         }
       })
 
@@ -371,7 +370,7 @@
       $(detailInput[j]).removeClass("z-readonly")
     }
   }
-  function detailTotalInit() {
+  function detailTotalInit(i) {
     let obj = {
       amount: "",
       bz1: "",
@@ -391,21 +390,18 @@
       projectName: "",
       projectDeptName: ""
     }
-    for (let i = 0; i < isTimes.length; i++) {
-      let inpsJe = $("[name='AssetProcureDetailDO[" + i + "]$amount']")[0].children[0]; //金额
-      inpsJe.addEventListener("blur", e => {
-        let event = e || window.event;
-        let inputInfo = event.target.value;
-        if (!(inputInfo > 0)) {
-          z.ui.alertWarning(`金额不能为负数、0`)
-          inpsJe.value = ''
-        } else {
-          obj.amount = inputInfo
-          jeSumInit()
-        }
-      });
-
-    }
+    let inpsJe = $("[name='AssetProcureDetailDO[" + i + "]$amount']")[0].children[0]; //金额
+    inpsJe.addEventListener("blur", e => {
+      let event = e || window.event;
+      let inputInfo = event.target.value;
+      if (!(inputInfo > 0)) {
+        z.ui.alertWarning(`金额不能为负数、0`)
+        inpsJe.value = ''
+      } else {
+        obj.amount = inputInfo
+        jeSumInit()
+      }
+    });
   }
   function buildQjsjSeq() {
     let elementsByName = document.getElementsByName("qjsj_seq");

+ 15 - 19
zjugis-business/src/main/resources/templates/AssetProcure/js/index.js

@@ -38,7 +38,6 @@
           isTimes.push(obj)
           generateTableTrHtml(isTimes.length-1)
           buildQjsjSeq();
-          detailTotalInit();
         }
       })
 
@@ -291,9 +290,9 @@
   }
   function detailWrite(i) {
     //财务审核时可以核减修改金额
-    $("[name='costType[" + i + "]']").removeClass("z-readonly");
+    $("[name='assetType[" + i + "]']").removeClass("z-readonly");
     $("#selectProject_" + i).css("pointer-events", "auto");
-    $("[name='costType[" + i + "]']").css("pointer-events", "auto");
+    $("[name='assetType[" + i + "]']").css("pointer-events", "auto");
     let detailElement = document.getElementById("qjsj_" + i);
     let detailInput = detailElement.getElementsByTagName("input");
     for (let j = 0; j < detailInput.length; j++) {
@@ -301,7 +300,7 @@
       $(detailInput[j]).removeClass("z-readonly")
     }
   }
-  function detailTotalInit() {
+  function detailTotalInit(i) {
     let obj = {
       amount: "",
       bz1: "",
@@ -318,21 +317,18 @@
       assetSequence: "",
       assetConfig: "",
     }
-    for (let i = 0; i < isTimes.length; i++) {
-      let inpsJe = $("[name='AssetProcureDetailDO[" + i + "]$amount']")[0].children[0]; //金额
-      inpsJe.addEventListener("blur", e => {
-        let event = e || window.event;
-        let inputInfo = event.target.value;
-        if (!(inputInfo > 0)) {
-          z.ui.alertWarning(`金额不能为负数、0`)
-          inpsJe.value = ''
-        } else {
-          obj.amount = inputInfo
-          jeSumInit()
-        }
-      });
-
-    }
+    let inpsJe = $("[name='AssetProcureDetailDO[" + i + "]$amount']")[0].children[0]; //金额
+    inpsJe.addEventListener("blur", e => {
+      let event = e || window.event;
+      let inputInfo = event.target.value;
+      if (!(inputInfo > 0)) {
+        z.ui.alertWarning(`金额不能为负数、0`)
+        inpsJe.value = ''
+      } else {
+        obj.amount = inputInfo
+        jeSumInit()
+      }
+    });
   }
   function buildQjsjSeq() {
     let elementsByName = document.getElementsByName("qjsj_seq");

+ 3 - 3
zjugis-business/src/main/resources/templates/OutsourcePurchase/index.ftl

@@ -191,10 +191,10 @@
           <span>单据详情</span>
         </div>
         <div class="form-btn">
-          <div id="addData">
+          <button id="addData" name="addData">
             <img src="/imgs/addIcon.png" alt="">
             <span>新增</span>
-          </div>
+          </button>
         </div>
       </div>
       <div class="qjsjxx-box">
@@ -208,7 +208,7 @@
             <td>总金额(元)</td>
             <td>采购数量</td>
             <td>备注</td>
-            <td>操作</td>
+            <td style="width: 100px;">操作</td>
           </tr>
           <tbody class="tbody tbodyQjsq">
           </tbody>

+ 108 - 139
zjugis-business/src/main/resources/templates/OutsourcePurchase/js/index.js

@@ -1,4 +1,5 @@
 (function () {
+  var addDataThat = null;
   let isTimes = []
   window.onload = function (ex) {
     $("#selectProject").click(function () {
@@ -7,7 +8,9 @@
     bindEvents();
     let timeObject = document.querySelector('#detailList')
     let arrays = JSON.parse(timeObject.value)
+    addDataThat = $("#addData")
     $("#addData").click(function () {
+      addDataThat.attr('disabled', "true");
       let obj = {
         id: "",
         bz: "",
@@ -23,7 +26,6 @@
       isTimes.push(obj)
       generateTableTrHtml(isTimes.length-1)
       buildQjsjSeq();
-      detailTotalInit();
     })
 
     if (arrays.length > 0) {
@@ -42,7 +44,9 @@
         }
         isTimes.push(obj)
       }
-      updateView()
+      for (let i = 0; i < isTimes.length; i++) {
+        generateTableTrHtml(i);
+      }
     }
   }
   //注册业务保存事件
@@ -73,116 +77,6 @@
     $("#glcghtml").html(html);
     z.workflow.saveBtn.addListener("onSaveClick", saveForm);
   }
-  function updateView() {
-    let tbodyQjsq = document.querySelector('.tbodyQjsq')
-    let assetTypeJSON = document.querySelector('#assetTypeJSON').value
-    let html = ''
-    for (let i = 0; i < isTimes.length; i++) {
-      html += '<tr class="qjsjClass" id="qjsj_' + i + '" style="background:#fff">'
-          + '<td name="qjsj_seq">' + (i + 1) + '</td>'
-          + '<td style="display:none">'
-          + '<div class="form-flex">'
-          + '<div class="form-item" style="width: 100%;margin-right: 5px;">'
-          + '<div class="z-comp-input" name="OutsourcePurchaseDet[' + i + ']$indexCode">'
-          + '<input type="text" value="' + isTimes[i].indexCode + '">'
-          + '</div>'
-          + '</div>'
-          + '</div>'
-          + '</td>'
-          + '<td style="display:none">'
-          + '<div class="form-flex">'
-          + '<div class="form-item" style="width: 100%;margin-right: 5px;">'
-          + '<div class="z-comp-input" name="OutsourcePurchaseDet[' + i + ']$id">'
-          + '<input type="text" value="' + isTimes[i].id + '">'
-          + '</div>'
-          + '</div>'
-          + '</div>'
-          + '</td>'
-          + '<td>'
-          + '<div class="form-flex">'
-          + '<div class="form-item" style="width: 100%;margin-right: 5px;">'
-          + '<div class="z-comp-date" name="OutsourcePurchaseDet[' + i + ']$purchaseTime">'
-          + '<input type="text" value="' + isTimes[i].purchaseTime + '">'
-          + '</div>'
-          + '</div>'
-          + '</div>'
-          + '</td>'
-
-          + '<td>'
-          + '<div class="form-item" style="width: 130px;">'
-          + '<div class="z-comp-select" data =\' ' + assetTypeJSON + '\'  name="OutsourcePurchaseDet[' + i + ']$assetType">'
-          + '<div class="z-inputselect-bar">'
-          + '<span></span><i></i>'
-          + '</div>'
-          + '</div>'
-          + '</div>'
-          + '</td>'
-          + '<td>'
-          + '<div class="form-item">'
-          + '<div class="z-comp-input" name="OutsourcePurchaseDet[' + i + ']$assetName">'
-          + '<input type="text" value="' + isTimes[i].assetName + '">'
-          + '</div>'
-          + '</div>'
-          + '</td>'
-          + '<td>'
-          + '<div class="form-item">'
-          + '<div class="z-comp-input" name="OutsourcePurchaseDet[' + i + ']$assetModel">'
-          + '<input type="text" value="' + isTimes[i].assetModel + '">'
-          + '</div>'
-          + '</div>'
-          + '</td>'
-          + '<td>'
-          + '<div class="form-item">'
-          + '<div class="z-comp-input" name="OutsourcePurchaseDet[' + i + ']$totalAmount">'
-          + '<input type="number" value="' + isTimes[i].totalAmount + '">'
-          + '</div>'
-          + '</div>'
-          + '</td>'
-          + '<td>'
-          + '<div class="form-item">'
-          + '<div class="z-comp-input" name="OutsourcePurchaseDet[' + i + ']$purchaseCount">'
-          + '<input type="number" value="' + isTimes[i].purchaseCount + '">'
-          + '</div>'
-          + '</div>'
-          + '</td>'
-          + '<td>'
-          + '<div class="form-item">'
-          + '<div class="z-comp-input" name="OutsourcePurchaseDet[' + i + ']$bz">'
-          + '<input type="text" value="' + isTimes[i].bz + '">'
-          + '</div>'
-          + '</div>'
-          + '</td>'
-          + '<td>'
-          + '<div id="delBtn_' + (i) + '" class="table-btn delBtn_' + (i) + '" data-index="' + (i) + '">'
-          + '<span>删除</span>'
-          + '</div>'
-          + '</td></tr>';
-    }
-    tbodyQjsq.innerHTML = html
-    for (let i = 0; i < isTimes.length; i++) {
-      z.ui.select("[name='OutsourcePurchaseDet["+i+"]$assetType']").init();
-      z.ui.select("[name='OutsourcePurchaseDet["+i+"]$assetType']").setValue(isTimes[i].assetType);
-      z.ui.date("[name='OutsourcePurchaseDet[" + i + "]$purchaseTime']").init()
-      $("#delBtn_" + i).click(function () {
-        z.ui.confirm("compid").init({
-          content: "确定删除吗?",
-          onConfirm: function () {
-            var element = document.getElementById("qjsj_" + i);
-            element.remove();
-            buildQjsjSeq();
-            isTimes.splice(i, 1)
-            updateView()
-            jeSumInit(i)
-          },
-          onCancel: function () {
-
-          }
-        })
-
-      })
-    }
-    detailTotalInit()
-  }
   function generateTableTrHtml(i) {
     var trDom = document.createElement("tr");
     let assetTypeJSON = document.querySelector('#assetTypeJSON').value
@@ -194,7 +88,7 @@
         + '<div class="form-flex">'
         + '<div class="form-item" style="width: 100%;margin-right: 5px;">'
         + '<div class="z-comp-input" name="OutsourcePurchaseDet[' + i + ']$indexCode">'
-        + '<input type="text" value="' + (i + 1) + '">'
+        + '<input type="text" value="">'
         + '</div>'
         + '</div>'
         + '</div>'
@@ -203,7 +97,7 @@
         + '<div class="form-flex">'
         + '<div class="form-item" style="width: 100%;margin-right: 5px;">'
         + '<div class="z-comp-date" name="OutsourcePurchaseDet[' + i + ']$id">'
-        + '<input type="text" value="' + isTimes[i].id + '">'
+        + '<input type="text" value="">'
         + '</div>'
         + '</div>'
         + '</div>'
@@ -212,7 +106,7 @@
         + '<div class="form-flex">'
         + '<div class="form-item" style="width: 100%;margin-right: 5px;">'
         + '<div class="z-comp-date" name="OutsourcePurchaseDet[' + i + ']$purchaseTime">'
-        + '<input type="text" value="' + isTimes[i].purchaseTime + '">'
+        + '<input type="text" value="">'
         + '</div>'
         + '</div>'
         + '</div>'
@@ -230,39 +124,42 @@
         + '<td>'
         + '<div class="form-item">'
         + '<div class="z-comp-input" name="OutsourcePurchaseDet[' + i + ']$assetName">'
-        + '<input type="text" value="' + isTimes[i].assetName + '">'
+        + '<input type="text" value="">'
         + '</div>'
         + '</div>'
         + '</td>'
         + '<td>'
         + '<div class="form-item">'
         + '<div class="z-comp-input" name="OutsourcePurchaseDet[' + i + ']$assetModel">'
-        + '<input type="text" value="' + isTimes[i].assetModel + '">'
+        + '<input type="text" value="">'
         + '</div>'
         + '</div>'
         + '</td>'
         + '<td>'
         + '<div class="form-item">'
         + '<div class="z-comp-input" name="OutsourcePurchaseDet[' + i + ']$totalAmount">'
-        + '<input type="number" value="' + isTimes[i].totalAmount + '">'
+        + '<input type="number" value="">'
         + '</div>'
         + '</div>'
         + '</td>'
         + '<td>'
         + '<div class="form-item">'
         + '<div class="z-comp-input" name="OutsourcePurchaseDet[' + i + ']$purchaseCount">'
-        + '<input type="number" value="' + isTimes[i].purchaseCount + '">'
+        + '<input type="number" value="">'
         + '</div>'
         + '</div>'
         + '</td>'
         + '<td>'
         + '<div class="form-item">'
         + '<div class="z-comp-input" name="OutsourcePurchaseDet[' + i + ']$bz">'
-        + '<input type="text" value="' + isTimes[i].bz + '">'
+        + '<input type="text" value="">'
         + '</div>'
         + '</div>'
         + '</td>'
         + '<td>'
+        + '<div id="editBtn_' + (i) + '" class="table-btn editBtn_' + (i) + '" data-index="' + (i) + '">'
+        + '<span>保存</span>'
+        + '</div>'
         + '<div id="delBtn_' + (i) + '" class="table-btn delBtn_' + (i) + '" data-index="' + (i) + '">'
         + '<span>删除</span>'
         + '</div>'
@@ -273,6 +170,54 @@
     z.ui.select("[name='OutsourcePurchaseDet["+i+"]$assetType']").init();
     z.ui.select("[name='OutsourcePurchaseDet["+i+"]$assetType']").setValue(isTimes[i].assetType);
     z.ui.date("[name='OutsourcePurchaseDet[" + i + "]$purchaseTime']").init()
+    if (!(!isTimes[i].id || isTimes[i].id.trim() === '')) {
+      $("[name='OutsourcePurchaseDet[" + i + "]$id']").val(isTimes[i].id);
+    }
+    if (!(!isTimes[i].indexCode)) {
+      $("[name='OutsourcePurchaseDet[" + i + "]$indexCode']").val(isTimes[i].indexCode);
+    }
+    if (!(!isTimes[i].purchaseTime || isTimes[i].purchaseTime.trim() === '')) {
+      z.ui.date("[name='OutsourcePurchaseDet[" + i + "]$purchaseTime']").setValue(isTimes[i].purchaseTime);
+    }
+    if (!(!isTimes[i].assetName || isTimes[i].assetName.trim() === '')) {
+      z.ui.input("[name='OutsourcePurchaseDet[" + i + "]$assetName']").setValue(isTimes[i].assetName);
+    }
+    if (!(!isTimes[i].assetModel || isTimes[i].assetModel.trim() === '')) {
+      z.ui.input("[name='OutsourcePurchaseDet[" + i + "]$assetModel']").setValue(isTimes[i].assetModel);
+    }
+    if (!(!isTimes[i].totalAmount )) {
+      z.ui.input("[name='OutsourcePurchaseDet[" + i + "]$totalAmount']").setValue(isTimes[i].totalAmount);
+    }
+    if (!(!isTimes[i].purchaseCount)) {
+      z.ui.input("[name='OutsourcePurchaseDet[" + i + "]$purchaseCount']").setValue(isTimes[i].purchaseCount);
+    }
+    if (!(!isTimes[i].bz || isTimes[i].bz.trim() === '')) {
+      z.ui.input("[name='OutsourcePurchaseDet[" + i + "]$bz']").setValue(isTimes[i].bz);
+    }
+    if (!(!isTimes[i].outsourcePurchaseId || isTimes[i].outsourcePurchaseId.trim() === '')) {
+      $("#editBtn_" + i).find("span").html("编辑")
+      detailReadonly(i, false)
+      $("#qjsj_" + i).addClass("form-table-disable")
+    }
+    detailTotalInit(i)
+    $("#editBtn_" + i).click(function () {
+      const span = $(this).find("span");
+      const html = span.html();
+      if (html === '编辑') {
+        span.html('保存')
+        detailWrite(i);
+        addDataThat.attr('disabled', "true");
+        $("#qjsj_" + i).removeClass("form-table-disable")
+        return;
+      }
+      if (html === '保存') {
+        span.html('编辑')
+        detailReadonly(i, false)
+        addDataThat.removeAttr('disabled')
+        $("#qjsj_" + i).addClass("form-table-disable")
+        return;
+      }
+    })
     $("#delBtn_" + i).click(function () {
       z.ui.confirm("compid").init({
         content: "确定删除吗?",
@@ -280,9 +225,9 @@
           var element = document.getElementById("qjsj_" + i);
           element.remove();
           buildQjsjSeq();
-          isTimes.splice(i, 1)
-          updateView()
-          jeSumInit(i)
+          isTimes = isTimes.splice(i, 1)
+          jeSumInit(i);
+          addDataThat.removeAttr('disabled')
         },
         onCancel: function () {
 
@@ -292,7 +237,34 @@
     })
 
   }
-  function detailTotalInit() {
+  function detailReadonly(i, isBool = true) {
+    if (isBool) {
+      $("#delBtn_" + i).css("display", "none");
+      $("#editBtn_" + i).css("display", "none");
+    }
+    $("[name='assetType[" + i + "]']").addClass("z-readonly");
+    $("#selectProject_" + i).css("pointer-events", "none");
+    $("[name='assetType[" + i + "]']").css("pointer-events", "none");
+    let detailElement = document.getElementById("qjsj_" + i);
+    let detailInput = detailElement.getElementsByTagName("input");
+    for (let j = 0; j < detailInput.length; j++) {
+      detailInput[j].disabled = true;
+      detailInput[j].className += "z-readonly"
+    }
+  }
+  function detailWrite(i) {
+    //财务审核时可以核减修改金额
+    $("[name='assetType[" + i + "]']").removeClass("z-readonly");
+    $("#selectProject_" + i).css("pointer-events", "auto");
+    $("[name='assetType[" + i + "]']").css("pointer-events", "auto");
+    let detailElement = document.getElementById("qjsj_" + i);
+    let detailInput = detailElement.getElementsByTagName("input");
+    for (let j = 0; j < detailInput.length; j++) {
+      detailInput[j].disabled = false;
+      $(detailInput[j]).removeClass("z-readonly")
+    }
+  }
+  function detailTotalInit(i) {
     let obj = {
       totalAmount: "",
       bz: "",
@@ -305,21 +277,18 @@
       outsourcePurchaseId:"",
       indexCode:""
     }
-    for (let i = 0; i < isTimes.length; i++) {
-      let inpsJe = $("[name='OutsourcePurchaseDet[" + i + "]$totalAmount']")[0].children[0]; //金额
-      inpsJe.addEventListener("blur", e => {
-        let event = e || window.event;
-        let inputInfo = event.target.value;
-        if (!(inputInfo > 0)) {
-          z.ui.alertWarning(`金额不能为负数、0`)
-          inpsJe.value = ''
-        } else {
-          obj.amount = inputInfo
-          jeSumInit()
-        }
-      });
-
-    }
+    let inpsJe = $("[name='OutsourcePurchaseDet[" + i + "]$totalAmount']")[0].children[0]; //金额
+    inpsJe.addEventListener("blur", e => {
+      let event = e || window.event;
+      let inputInfo = event.target.value;
+      if (!(inputInfo > 0)) {
+        z.ui.alertWarning(`金额不能为负数、0`)
+        inpsJe.value = ''
+      } else {
+        obj.amount = inputInfo
+        jeSumInit()
+      }
+    });
   }
   function buildQjsjSeq() {
     let elementsByName = document.getElementsByName("qjsj_seq");

+ 2 - 2
zjugis-business/src/main/resources/templates/UseMoney/agentIndex.ftl

@@ -226,10 +226,10 @@
           <span>单据详情</span>
         </div>
         <div class="form-btn">
-          <div id="addData">
+          <button id="addData" name="addData">
             <img src="/imgs/addIcon.png" alt="">
             <span>新增</span>
-          </div>
+          </button>
         </div>
       </div>
       <div class="qjsjxx-box">

+ 114 - 176
zjugis-business/src/main/resources/templates/UseMoney/js/agentIndex.js

@@ -1,4 +1,5 @@
 (function () {
+  var addDataThat = null;
   let isTimes = []
   let costTypeJSON = JSON.parse(document.querySelector('#costTypeJSON').value)
   let detailProjectIndex = 0;
@@ -7,8 +8,10 @@
     bindEvents();
     let timeObject = document.querySelector('#detailList')
     let arrays = JSON.parse(timeObject.value)
+    addDataThat = $("#addData")
     //根据返回的json对象渲染
     $("#addData").click(function () {
+      addDataThat.attr('disabled', "true");
         let obj = {
           costType: "",
           costContent: "",
@@ -18,12 +21,12 @@
           id: "",
           projectId: "",
           projectName: "",
-          projectDeptName: ""
+          projectDeptName: "",
+          useMoneyId:""
         }
         isTimes.push(obj)
         generateTableTrHtml(isTimes.length-1)
         buildQjsjSeq();
-        detailTotalInit();
     })
     if (arrays.length > 0) {
       for (let i = 0; i < arrays.length; i++) {
@@ -36,11 +39,14 @@
           id: arrays[i].id?arrays[i].id:'',
           projectId: arrays[i].projectId || '',
           projectName: arrays[i].projectName || '',
-          projectDeptName: arrays[i].projectDeptName || ''
+          projectDeptName: arrays[i].projectDeptName || '',
+          useMoneyId: arrays[i].useMoneyId ?arrays[i].useMoneyId:'',
         }
         isTimes.push(obj)
       }
-      updateView()
+      for (let i = 0; i < isTimes.length; i++) {
+        generateTableTrHtml(i);
+      }
     }
   }
   //注册业务保存事件
@@ -61,137 +67,6 @@
     $("#glcghtml").html(html);
     z.workflow.saveBtn.addListener("onSaveClick", saveForm);
   }
-
-  function updateView() {
-    let tbodyQjsq = document.querySelector('.tbodyQjsq')
-    let html = ''
-    for (let i = 0; i < isTimes.length; i++) {
-      html += '<tr class="qjsjClass" id="qjsj_' + i + '" style="background:#fff">'
-          + '<td name="qjsj_seq">' + (i + 1) + '</td>'
-          + '<td style="display:none">'
-          + '<div class="form-flex">'
-          + '<div class="form-item" style="width: 100%;margin-right: 5px;">'
-          + '<div class="z-comp-date" name="UserMoneyDetailDO[' + i + ']$id">'
-          + '<input type="text" value="' + isTimes[i].id + '">'
-          + '</div>'
-          + '</div>'
-          + '</div>'
-          + '</td>'
-          + '<td>'
-          + '<div class="form-flex">'
-          + '<div class="form-item" style="width: 100%;margin-right: 5px;">'
-          + '<input type="hidden" name="UserMoneyDetailDO[' + i + ']$projectId" value="">'
-          + '<div class="z-comp-input z-readonly" id="selectProject_' + i + '" name="UserMoneyDetailDO[' + i + ']$projectName">'
-          + '<input readonly type="text" value="">'
-          + '</div>'
-          + '</div>'
-          + '</div>'
-          + '</td>'
-          + '<td>'
-          + '<div class="form-item">'
-          + '<div class="z-comp-input z-readonly" name="UserMoneyDetailDO[' + i + ']$xmzrbm">'
-          + '<input readonly type="text" value="">'
-          + '</div>'
-          + '</div>'
-          + '</td>'
-          + '<td>'
-          + '<div class="form-flex">'
-          + '<div class="form-item" style="width: 100%;margin-right: 5px;">'
-          + '<div class="z-comp-selecttree" name="costType[' + i + ']">'
-          + '<input type="hidden" name="UserMoneyDetailDO[' + i + ']$costType">'
-          + '<div class="z-inputselect-bar">'
-          + '<span></span><i></i>'
-          + '</div>'
-          + '</div>'
-          + '</div>'
-          + '</div>'
-          + '</td>'
-          + '<td>'
-          + '<div class="form-item">'
-          + '<div class="z-comp-input" name="UserMoneyDetailDO[' + i + ']$costContent">'
-          + '<input type="text" value="' + isTimes[i].costContent + '">'
-          + '</div>'
-          + '</div>'
-          + '</td>'
-          + '<td>'
-          + '<div class="form-item">'
-          + '<div class="z-comp-input" name="UserMoneyDetailDO[' + i + ']$invoiceNums">'
-          + '<input type="number" value="' + isTimes[i].invoiceNums + '">'
-          + '</div>'
-          + '</div>'
-          + '</td>'
-          + '<td>'
-          + '<div class="form-item">'
-          + '<div class="z-comp-input" name="UserMoneyDetailDO[' + i + ']$amount">'
-          + '<input type="number" value="' + isTimes[i].amount + '">'
-          + '</div>'
-          + '</div>'
-          + '</td>'
-          + '<td>'
-          + '<div class="form-item">'
-          + '<div class="z-comp-input" name="UserMoneyDetailDO[' + i + ']$remark">'
-          + '<input type="text" value="' + isTimes[i].remark + '">'
-          + '</div>'
-          + '</div>'
-          + '</td>'
-          + '<td>'
-          + '<div id="delBtn_' + (i) + '" class="table-btn delBtn_' + (i) + '" data-index="' + (i) + '">'
-          + '<span>删除</span>'
-          + '</div>'
-          + '</td></tr>';
-    }
-    tbodyQjsq.innerHTML = html
-    var userData="";
-    z.ui.ajax({
-      type: "get",
-      url: "/common/user-tree",
-      data: {},
-      success: function (res) {
-        if (res && res.length > 0) {
-          userData=res;
-        }
-        for (let i = 0; i < isTimes.length; i++) {
-          costTypeJSON.forEach(obj => {
-            obj.treeName = 'UserMoneyDetailDO[' + i + ']$costType';
-          })
-          selecttree("[name='costType[" + i + "]']", costTypeJSON, clickCostType, allowChildClick)
-          z.ui.selecttree("[name='costType[" + i + "]']").setValue(isTimes[i].costType);
-          $("[name='UserMoneyDetailDO[" + i + "]$costType']").val(isTimes[i].costType);
-          $("[name='UserMoneyDetailDO[" + i + "]$projectId']").val(isTimes[i].projectId);
-          z.ui.input("[name='UserMoneyDetailDO[" + i + "]$projectName']").setValue(isTimes[i].projectName);
-          z.ui.input("[name='UserMoneyDetailDO[" + i + "]$xmzrbm']").setValue(isTimes[i].projectDeptName);
-          $("#selectProject_" + i).click(function () {
-            detailProjectIndex = i;
-            selectProjectAll(null, setProject);
-          })
-          $("#delBtn_" + i).click(function () {
-            z.ui.confirm("compid").init({
-              content: "确定删除吗?",
-              onConfirm: function () {
-                var element = document.getElementById("qjsj_" + i);
-                element.remove();
-                buildQjsjSeq();
-                isTimes.splice(i, 1)
-                updateView()
-                jeSumInit(i)
-              },
-              onCancel: function () {
-
-              }
-            })
-
-          })
-          if (z.ui.comm.getUrlParam("_o") == "v"||$("#sfsqd").val()=='2') {
-            detailReadonly(i)
-          }
-        }
-        detailTotalInit()
-      },
-      error: function () {
-      }
-    })
-
-  }
   function generateTableTrHtml(i) {
     var trDom = document.createElement("tr");
     trDom.style.backgroundColor = "#fff";
@@ -202,7 +77,7 @@
         + '<div class="form-flex">'
         + '<div class="form-item" style="width: 100%;margin-right: 5px;">'
         + '<div class="z-comp-date" name="UserMoneyDetailDO[' + i + ']$id">'
-        + '<input type="text" value="' + isTimes[i].id + '">'
+        + '<input type="text" value="">'
         + '</div>'
         + '</div>'
         + '</div>'
@@ -239,32 +114,35 @@
         + '<td>'
         + '<div class="form-item">'
         + '<div class="z-comp-input" name="UserMoneyDetailDO[' + i + ']$costContent">'
-        + '<input type="text" value="' + isTimes[i].costContent + '">'
+        + '<input type="text" value="">'
         + '</div>'
         + '</div>'
         + '</td>'
         + '<td>'
         + '<div class="form-item">'
         + '<div class="z-comp-input" name="UserMoneyDetailDO[' + i + ']$invoiceNums">'
-        + '<input type="number" value="' + isTimes[i].invoiceNums + '">'
+        + '<input type="number" value="">'
         + '</div>'
         + '</div>'
         + '</td>'
         + '<td>'
         + '<div class="form-item">'
         + '<div class="z-comp-input" name="UserMoneyDetailDO[' + i + ']$amount">'
-        + '<input type="number" value="' + isTimes[i].amount + '">'
+        + '<input type="number" value="">'
         + '</div>'
         + '</div>'
         + '</td>'
         + '<td>'
         + '<div class="form-item">'
         + '<div class="z-comp-input" name="UserMoneyDetailDO[' + i + ']$remark">'
-        + '<input type="text" value="' + isTimes[i].remark + '">'
+        + '<input type="text" value="">'
         + '</div>'
         + '</div>'
         + '</td>'
         + '<td>'
+        + '<div id="editBtn_' + (i) + '" class="table-btn editBtn_' + (i) + '" data-index="' + (i) + '">'
+        + '<span>保存</span>'
+        + '</div>'
         + '<div id="delBtn_' + (i) + '" class="table-btn delBtn_' + (i) + '" data-index="' + (i) + '">'
         + '<span>删除</span>'
         + '</div>'
@@ -276,10 +154,60 @@
       obj.treeName = 'UserMoneyDetailDO[' + i + ']$costType';
     })
     selecttree("[name='costType[" + i + "]']", costTypeJSON, clickCostType, allowChildClick)
+    z.ui.selecttree("[name='costType[" + i + "]']").setValue(isTimes[i].costType);
+    $("[name='UserMoneyDetailDO[" + i + "]$costType']").val(isTimes[i].costType);
+    if (!(!isTimes[i].id || isTimes[i].id.trim() === '')) {
+      $("[name='UserMoneyDetailDO[" + i + "]$id']").val(isTimes[i].id);
+    }
+    if (!(!isTimes[i].projectId || isTimes[i].projectId.trim() === '')) {
+      $("[name='UserMoneyDetailDO[" + i + "]$projectId']").val(isTimes[i].projectId);
+    }
+    if (!(!isTimes[i].projectName || isTimes[i].projectName.trim() === '')) {
+      z.ui.input("[name='UserMoneyDetailDO[" + i + "]$projectName']").setValue(isTimes[i].projectName);
+    }
+    if (!(!isTimes[i].projectDeptName || isTimes[i].projectDeptName.trim() === '')) {
+      z.ui.input("[name='UserMoneyDetailDO[" + i + "]$xmzrbm']").setValue(isTimes[i].projectDeptName);
+    }
+    if (!(!isTimes[i].costContent || isTimes[i].costContent.trim() === '')) {
+      z.ui.input("[name='UserMoneyDetailDO[" + i + "]$costContent']").setValue(isTimes[i].costContent);
+    }
+    if (!(!isTimes[i].invoiceNums )) {
+      z.ui.input("[name='UserMoneyDetailDO[" + i + "]$invoiceNums']").setValue(isTimes[i].invoiceNums);
+    }
+    if (!(!isTimes[i].amount)) {
+      z.ui.input("[name='UserMoneyDetailDO[" + i + "]$amount']").setValue(isTimes[i].amount);
+    }
+    if (!(!isTimes[i].remark || isTimes[i].remark.trim() === '')) {
+      z.ui.input("[name='UserMoneyDetailDO[" + i + "]$remark']").setValue(isTimes[i].remark);
+    }
+    if (!(!isTimes[i].useMoneyId || isTimes[i].useMoneyId.trim() === '')) {
+      $("#editBtn_" + i).find("span").html("编辑")
+      detailReadonly(i, false)
+      $("#qjsj_" + i).addClass("form-table-disable")
+    }
     $("#selectProject_" + i).click(function () {
       detailProjectIndex = i;
       selectProjectAll(null, setProject);
     })
+    detailTotalInit(i)
+    $("#editBtn_" + i).click(function () {
+      const span = $(this).find("span");
+      const html = span.html();
+      if (html === '编辑') {
+        span.html('保存')
+        detailWrite(i);
+        addDataThat.attr('disabled', "true");
+        $("#qjsj_" + i).removeClass("form-table-disable")
+        return;
+      }
+      if (html === '保存') {
+        span.html('编辑')
+        detailReadonly(i, false)
+        addDataThat.removeAttr('disabled')
+        $("#qjsj_" + i).addClass("form-table-disable")
+        return;
+      }
+    })
     $("#delBtn_" + i).click(function () {
       z.ui.confirm("compid").init({
         content: "确定删除吗?",
@@ -287,9 +215,9 @@
           var element = document.getElementById("qjsj_" + i);
           element.remove();
           buildQjsjSeq();
-          isTimes.splice(i, 1)
-          updateView()
-          jeSumInit(i)
+          isTimes = isTimes.splice(i, 1)
+          jeSumInit(i);
+          addDataThat.removeAttr('disabled')
         },
         onCancel: function () {
 
@@ -298,12 +226,11 @@
 
     })
   }
-  function detailReadonly(i) {
-    //财务审核时可以核减修改金额
-    //if (finance === 1) {
-      //如果单据金额发生修改就代表核减了
-    //}
-    $("#delBtn_" + i).css("display", "none");
+  function detailReadonly(i, isBool = true) {
+    if (isBool) {
+      $("#delBtn_" + i).css("display", "none");
+      $("#editBtn_" + i).css("display", "none");
+    }
     $("[name='costType[" + i + "]']").addClass("z-readonly");
     $("#selectProject_" + i).css("pointer-events", "none");
     $("[name='costType[" + i + "]']").css("pointer-events", "none");
@@ -314,7 +241,19 @@
       detailInput[j].className += "z-readonly"
     }
   }
-  function detailTotalInit() {
+  function detailWrite(i) {
+    //财务审核时可以核减修改金额
+    $("[name='costType[" + i + "]']").removeClass("z-readonly");
+    $("#selectProject_" + i).css("pointer-events", "auto");
+    $("[name='costType[" + i + "]']").css("pointer-events", "auto");
+    let detailElement = document.getElementById("qjsj_" + i);
+    let detailInput = detailElement.getElementsByTagName("input");
+    for (let j = 0; j < detailInput.length; j++) {
+      detailInput[j].disabled = false;
+      $(detailInput[j]).removeClass("z-readonly")
+    }
+  }
+  function detailTotalInit(i) {
     let obj = {
       costType: "",
       costContent: "",
@@ -324,33 +263,32 @@
       id: "",
       projectId: "",
       projectName: "",
-      projectDeptName: ""
-    }
-    for (let i = 0; i < isTimes.length; i++) {
-      let inpsJe = $("[name='UserMoneyDetailDO[" + i + "]$amount']")[0].children[0]; //金额
-      let inpsPj = $("[name='UserMoneyDetailDO[" + i + "]$invoiceNums']")[0].children[0];//单据张数
-      inpsJe.addEventListener("blur", e => {
-        let event = e || window.event;
-        let inputInfo = event.target.value;
-        if (!(inputInfo > 0)) {
-          z.ui.alertWarning(`金额不能为负数、0`)
-          inpsJe.value = ''
-        } else {
-          obj.amount = inputInfo
-          jeSumInit()
-        }
-      });
-      inpsPj.addEventListener("blur", e => {
-        let event = e || window.event;
-        let inputInfo = event.target.value;
-        if (!(inputInfo > 0) || (String(inputInfo).indexOf('.') > -1)) {
-          z.ui.alertWarning(`单据张数不能为负数、0、小数`)
-          inpsPj.value = ''
-        } else {
-          obj.invoiceNums = inputInfo
-        }
-      });
+      projectDeptName: "",
+      useMoneyId:""
     }
+    let inpsJe = $("[name='UserMoneyDetailDO[" + i + "]$amount']")[0].children[0]; //金额
+    let inpsPj = $("[name='UserMoneyDetailDO[" + i + "]$invoiceNums']")[0].children[0];//单据张数
+    inpsJe.addEventListener("blur", e => {
+      let event = e || window.event;
+      let inputInfo = event.target.value;
+      if (!(inputInfo > 0)) {
+        z.ui.alertWarning(`金额不能为负数、0`)
+        inpsJe.value = ''
+      } else {
+        obj.amount = inputInfo
+        jeSumInit()
+      }
+    });
+    inpsPj.addEventListener("blur", e => {
+      let event = e || window.event;
+      let inputInfo = event.target.value;
+      if (!(inputInfo > 0) || (String(inputInfo).indexOf('.') > -1)) {
+        z.ui.alertWarning(`单据张数不能为负数、0、小数`)
+        inpsPj.value = ''
+      } else {
+        obj.invoiceNums = inputInfo
+      }
+    });
   }
   function buildQjsjSeq() {
     let elementsByName = document.getElementsByName("qjsj_seq");

+ 102 - 135
zjugis-business/src/main/resources/templates/UseMoney/js/index.js

@@ -1,4 +1,5 @@
 (function () {
+  var addDataThat = null;
   let isTimes = []
   let costTypeJSON = JSON.parse(document.querySelector('#costTypeJSON').value)
   window.onload = function (ex) {
@@ -9,8 +10,10 @@
     bindEvents();
     let timeObject = document.querySelector('#detailList')
     let arrays = JSON.parse(timeObject.value)
+    addDataThat = $("#addData")
     //根据返回的json对象渲染
     $("#addData").click(function () {
+      addDataThat.attr('disabled', "true");
         let obj = {
           costType: "",
           costContent: "",
@@ -18,11 +21,11 @@
           amount: "",
           remark: "",
           id: "",
+          useMoneyId: "",
         }
         isTimes.push(obj)
         generateTableTrHtml(isTimes.length-1)
         buildQjsjSeq();
-        detailTotalInit();
     })
     if (arrays.length > 0) {
       for (let i = 0; i < arrays.length; i++) {
@@ -33,22 +36,18 @@
           amount: arrays[i].amount?arrays[i].amount:'',
           remark: arrays[i].remark?arrays[i].remark:'',
           id: arrays[i].id?arrays[i].id:'',
+          useMoneyId: arrays[i].useMoneyId?arrays[i].useMoneyId:'',
         }
         isTimes.push(obj)
       }
-      updateView()
+      for (let i = 0; i < isTimes.length; i++) {
+        generateTableTrHtml(i);
+      }
     }
   }
   //注册业务保存事件
   function bindEvents() {
     var sqd=$("#sfsqd").val();
-    // if(sqd=='1'){
-    //   $("#detailTable").hide();
-    //   $("#cgzje").hide();
-    // }else{
-    //   $("#detailTable").show();
-    //   $("#cgzje").show();
-    // }
     if(z.ui.comm.getUrlParam("_o") == "v"||sqd=='2'){
       $(".z-comp-date").addClass("z-readonly");
       $(".z-comp-input").addClass("z-readonly");
@@ -58,109 +57,7 @@
     }
     z.workflow.saveBtn.addListener("onSaveClick", saveForm);
   }
-  function updateView() {
-    let tbodyQjsq = document.querySelector('.tbodyQjsq')
-    let html = ''
-    for (let i = 0; i < isTimes.length; i++) {
-      html += '<tr class="qjsjClass" id="qjsj_' + i + '" style="background:#fff">'
-          + '<td name="qjsj_seq">' + (i + 1) + '</td>'
-          + '<td style="display:none">'
-          + '<div class="form-flex">'
-          + '<div class="form-item" style="width: 100%;margin-right: 5px;">'
-          + '<div class="z-comp-date" name="UserMoneyDetailDO[' + i + ']$id">'
-          + '<input type="text" value="' + isTimes[i].id + '">'
-          + '</div>'
-          + '</div>'
-          + '</div>'
-          + '</td>'
-          + '<td>'
-          + '<div class="form-flex">'
-          + '<div class="form-item" style="width: 100%;margin-right: 5px;">'
-          + '<div class="z-comp-selecttree" name="costType[' + i + ']">'
-          + '<input type="hidden" name="UserMoneyDetailDO[' + i + ']$costType">'
-          + '<div class="z-inputselect-bar">'
-          + '<span></span><i></i>'
-          + '</div>'
-          + '</div>'
-          + '</div>'
-          + '</div>'
-          + '</td>'
-          + '<td>'
-          + '<div class="form-item">'
-          + '<div class="z-comp-input" name="UserMoneyDetailDO[' + i + ']$costContent">'
-          + '<input type="text" value="' + isTimes[i].costContent + '">'
-          + '</div>'
-          + '</div>'
-          + '</td>'
-          + '<td>'
-          + '<div class="form-item">'
-          + '<div class="z-comp-input" name="UserMoneyDetailDO[' + i + ']$invoiceNums">'
-          + '<input type="number" value="' + isTimes[i].invoiceNums + '">'
-          + '</div>'
-          + '</div>'
-          + '</td>'
-          + '<td>'
-          + '<div class="form-item">'
-          + '<div class="z-comp-input" name="UserMoneyDetailDO[' + i + ']$amount">'
-          + '<input type="number" value="' + isTimes[i].amount + '">'
-          + '</div>'
-          + '</div>'
-          + '</td>'
-          + '<td>'
-          + '<div class="form-item">'
-          + '<div class="z-comp-input" name="UserMoneyDetailDO[' + i + ']$remark">'
-          + '<input type="text" value="' + isTimes[i].remark + '">'
-          + '</div>'
-          + '</div>'
-          + '</td>'
-          + '<td>'
-          + '<div id="delBtn_' + (i) + '" class="table-btn delBtn_' + (i) + '" data-index="' + (i) + '">'
-          + '<span>删除</span>'
-          + '</div>'
-          + '</td></tr>';
-    }
-    tbodyQjsq.innerHTML = html
-    var userData="";
-    z.ui.ajax({
-      type: "get",
-      url: "/common/user-tree",
-      data: {},
-      success: function (res) {
-        if (res && res.length > 0) {
-          userData=res;
-        }
-        for (let i = 0; i < isTimes.length; i++) {
-          costTypeJSON.forEach(obj => {
-            obj.treeName = 'UserMoneyDetailDO[' + i + ']$costType';
-          })
-          selecttree("[name='costType[" + i + "]']", costTypeJSON, clickCostType, allowChildClick)
-          z.ui.selecttree("[name='costType[" + i + "]']").setValue(isTimes[i].costType);
-          $("[name='UserMoneyDetailDO[" + i + "]$costType']").val(isTimes[i].costType);
-          $("#delBtn_" + i).click(function () {
-            z.ui.confirm("compid").init({
-              content: "确定删除吗?",
-              onConfirm: function () {
-                var element = document.getElementById("qjsj_" + i);
-                element.remove();
-                buildQjsjSeq();
-                isTimes.splice(i, 1)
-                updateView()
-                jeSumInit(i)
-              },
-              onCancel: function () {
 
-              }
-            })
-
-          })
-        }
-        detailTotalInit()
-      },
-      error: function () {
-      }
-    })
-
-  }
   function generateTableTrHtml(i) {
     var trDom = document.createElement("tr");
     trDom.style.backgroundColor = "#fff";
@@ -171,7 +68,7 @@
         + '<div class="form-flex">'
         + '<div class="form-item" style="width: 100%;margin-right: 5px;">'
         + '<div class="z-comp-date" name="UserMoneyDetailDO[' + i + ']$id">'
-        + '<input type="text" value="' + isTimes[i].id + '">'
+        + '<input type="text" value="">'
         + '</div>'
         + '</div>'
         + '</div>'
@@ -191,32 +88,35 @@
         + '<td>'
         + '<div class="form-item">'
         + '<div class="z-comp-input" name="UserMoneyDetailDO[' + i + ']$costContent">'
-        + '<input type="text" value="' + isTimes[i].costContent + '">'
+        + '<input type="text" value="">'
         + '</div>'
         + '</div>'
         + '</td>'
         + '<td>'
         + '<div class="form-item">'
         + '<div class="z-comp-input" name="UserMoneyDetailDO[' + i + ']$invoiceNums">'
-        + '<input type="number" value="' + isTimes[i].invoiceNums + '">'
+        + '<input type="number" value="">'
         + '</div>'
         + '</div>'
         + '</td>'
         + '<td>'
         + '<div class="form-item">'
         + '<div class="z-comp-input" name="UserMoneyDetailDO[' + i + ']$amount">'
-        + '<input type="number" value="' + isTimes[i].amount + '">'
+        + '<input type="number" value="">'
         + '</div>'
         + '</div>'
         + '</td>'
         + '<td>'
         + '<div class="form-item">'
         + '<div class="z-comp-input" name="UserMoneyDetailDO[' + i + ']$remark">'
-        + '<input type="text" value="' + isTimes[i].remark + '">'
+        + '<input type="text" value="">'
         + '</div>'
         + '</div>'
         + '</td>'
         + '<td>'
+        + '<div id="editBtn_' + (i) + '" class="table-btn editBtn_' + (i) + '" data-index="' + (i) + '">'
+        + '<span>保存</span>'
+        + '</div>'
         + '<div id="delBtn_' + (i) + '" class="table-btn delBtn_' + (i) + '" data-index="' + (i) + '">'
         + '<span>删除</span>'
         + '</div>'
@@ -228,6 +128,48 @@
       obj.treeName = 'UserMoneyDetailDO[' + i + ']$costType';
     })
     selecttree("[name='costType[" + i + "]']", costTypeJSON, clickCostType, allowChildClick)
+    z.ui.selecttree("[name='costType[" + i + "]']").setValue(isTimes[i].costType);
+    $("[name='UserMoneyDetailDO[" + i + "]$costType']").val(isTimes[i].costType);
+    if (!(!isTimes[i].id || isTimes[i].id.trim() === '')) {
+      $("[name='UserMoneyDetailDO[" + i + "]$id']").val(isTimes[i].id);
+    }
+    if (!(!isTimes[i].costContent || isTimes[i].costContent.trim() === '')) {
+      z.ui.input("[name='UserMoneyDetailDO[" + i + "]$costContent']").setValue(isTimes[i].costContent);
+    }
+    if (!(!isTimes[i].invoiceNums )) {
+      z.ui.input("[name='UserMoneyDetailDO[" + i + "]$invoiceNums']").setValue(isTimes[i].invoiceNums);
+    }
+    if (!(!isTimes[i].amount)) {
+      z.ui.input("[name='UserMoneyDetailDO[" + i + "]$amount']").setValue(isTimes[i].amount);
+    }
+    if (!(!isTimes[i].remark || isTimes[i].remark.trim() === '')) {
+      z.ui.input("[name='UserMoneyDetailDO[" + i + "]$remark']").setValue(isTimes[i].remark);
+    }
+
+    if (!(!isTimes[i].useMoneyId || isTimes[i].useMoneyId.trim() === '')) {
+      $("#editBtn_" + i).find("span").html("编辑")
+      detailReadonly(i, false)
+      $("#qjsj_" + i).addClass("form-table-disable")
+    }
+    detailTotalInit(i)
+    $("#editBtn_" + i).click(function () {
+      const span = $(this).find("span");
+      const html = span.html();
+      if (html === '编辑') {
+        span.html('保存')
+        detailWrite(i);
+        addDataThat.attr('disabled', "true");
+        $("#qjsj_" + i).removeClass("form-table-disable")
+        return;
+      }
+      if (html === '保存') {
+        span.html('编辑')
+        detailReadonly(i, false)
+        addDataThat.removeAttr('disabled')
+        $("#qjsj_" + i).addClass("form-table-disable")
+        return;
+      }
+    })
     $("#delBtn_" + i).click(function () {
       z.ui.confirm("compid").init({
         content: "确定删除吗?",
@@ -235,9 +177,9 @@
           var element = document.getElementById("qjsj_" + i);
           element.remove();
           buildQjsjSeq();
-          isTimes.splice(i, 1)
-          updateView()
-          jeSumInit(i)
+          isTimes = isTimes.splice(i, 1)
+          jeSumInit(i);
+          addDataThat.removeAttr('disabled')
         },
         onCancel: function () {
 
@@ -246,7 +188,34 @@
 
     })
   }
-  function detailTotalInit() {
+  function detailReadonly(i, isBool = true) {
+    if (isBool) {
+      $("#delBtn_" + i).css("display", "none");
+      $("#editBtn_" + i).css("display", "none");
+    }
+    $("[name='costType[" + i + "]']").addClass("z-readonly");
+    $("#selectProject_" + i).css("pointer-events", "none");
+    $("[name='costType[" + i + "]']").css("pointer-events", "none");
+    let detailElement = document.getElementById("qjsj_" + i);
+    let detailInput = detailElement.getElementsByTagName("input");
+    for (let j = 0; j < detailInput.length; j++) {
+      detailInput[j].disabled = true;
+      detailInput[j].className += "z-readonly"
+    }
+  }
+  function detailWrite(i) {
+    //财务审核时可以核减修改金额
+    $("[name='costType[" + i + "]']").removeClass("z-readonly");
+    $("#selectProject_" + i).css("pointer-events", "auto");
+    $("[name='costType[" + i + "]']").css("pointer-events", "auto");
+    let detailElement = document.getElementById("qjsj_" + i);
+    let detailInput = detailElement.getElementsByTagName("input");
+    for (let j = 0; j < detailInput.length; j++) {
+      detailInput[j].disabled = false;
+      $(detailInput[j]).removeClass("z-readonly")
+    }
+  }
+  function detailTotalInit(i) {
     let obj = {
       costType: "",
       costContent: "",
@@ -254,22 +223,20 @@
       amount: "",
       remark: "",
       id: "",
+      useMoneyId: "",
     }
-    for (let i = 0; i < isTimes.length; i++) {
-      let inpsJe = $("[name='UserMoneyDetailDO[" + i + "]$amount']")[0].children[0]; //金额
-      inpsJe.addEventListener("blur", e => {
-        let event = e || window.event;
-        let inputInfo = event.target.value;
-        if (!(inputInfo > 0)) {
-          z.ui.alertWarning(`金额不能为负数、0`)
-          inpsJe.value = ''
-        } else {
-          obj.amount = inputInfo
-          jeSumInit()
-        }
-      });
-
-    }
+    let inpsJe = $("[name='UserMoneyDetailDO[" + i + "]$amount']")[0].children[0]; //金额
+    inpsJe.addEventListener("blur", e => {
+      let event = e || window.event;
+      let inputInfo = event.target.value;
+      if (!(inputInfo > 0)) {
+        z.ui.alertWarning(`金额不能为负数、0`)
+        inpsJe.value = ''
+      } else {
+        obj.amount = inputInfo
+        jeSumInit()
+      }
+    });
   }
   function buildQjsjSeq() {
     let elementsByName = document.getElementsByName("qjsj_seq");