3 Ревизии 64718d226d ... 82fc13c7f2

Автор SHA1 Съобщение Дата
  lijt 82fc13c7f2 报告归档-关联发票,单个开票金额和总开票金额一致问题解决 преди 1 година
  lijt 70142566d8 签字注师2 需求更改 преди 1 година
  lijt 55db9ea8f2 审计收费和关联报告选择完成之后被 被审计单位覆盖bug解决 преди 1 година

+ 15 - 10
src/views/modules/cw/projectRecords/ProjectRecordsForm.vue

@@ -116,13 +116,13 @@
                       @getValue="(value) => {inputForm.officeId=value}"/>
                   </el-form-item>
                 </el-col>
-<!--                <el-col :span="12">-->
-<!--                  <el-form-item label="业务类型" prop="businessTypeName"-->
-<!--                                :rules="[-->
-<!--                   ]">-->
-<!--                    <el-input :readonly="true" @focus="openBusinessTypeForm" v-model="inputForm.businessTypeName" placeholder="请填写业务类型" clearable></el-input>-->
-<!--                  </el-form-item>-->
-<!--                </el-col>-->
+                <el-col :span="12">
+                  <el-form-item label="业务类型" prop="businessTypeName"
+                                :rules="[
+                   ]">
+                    <el-input :readonly="true" @focus="openBusinessTypeForm" v-model="inputForm.businessTypeName" placeholder="请填写业务类型" clearable></el-input>
+                  </el-form-item>
+                </el-col>
                 <el-col :span="12">
                   <el-form-item label="风险等级" prop="riskLevel"
                                 :rules="[
@@ -801,21 +801,26 @@
             this.cwFinanceInvoiceService.getByIds(this.inputForm.id, this.invoiceForm).then(({data}) => {
               let _this = this
               let _data = data
+              console.log('data.qweqwe', data)
+              // this.inputForm.accountDetail = this.data().financeInvoiceBaseDTOList.account
               const wait = function () {
                 return new Promise((resolve, reject) => {
+                  console.log('12312312312312312222222222222222222')
                   _this.invoiceList = _data
                   resolve()
                 })
               }
               wait().then(() => {
                 this.invoiceList.forEach(item => {
+                  console.log()
                   item.account = parseFloat(item.account).toFixed(2)
                   if (!this.commonJS.isEmpty(item.financeInvoiceDetailDTOList)) {
-                    item.accountDetail = 0
+                    // item.accountDetail = 0
                     let num = ''
                     item.financeInvoiceDetailDTOList.forEach((detail, index) => {
                       if (!this.commonJS.isEmpty(detail.account)) {
-                        item.accountDetail = parseFloat(parseFloat(item.accountDetail) + parseFloat(detail.account)).toFixed(2)
+                        // item.accountDetail = parseFloat(parseFloat(item.accountDetail) + parseFloat(detail.account)).toFixed(2)
+                        console.log('item232222', item)
                       }
                       if ((index + 1) !== item.financeInvoiceDetailDTOList.length) {
                         num = num + detail.number + ','
@@ -826,7 +831,7 @@
                     item.number = num
                   } else {
                     item.number = ''
-                    item.accountDetail = ''
+                    // item.accountDetail = ''
                   }
                 })
               })

+ 0 - 1
src/views/modules/cw/projectReportArchive/ProjectReportArchiveTaskForm.vue

@@ -875,7 +875,6 @@
         console.log('row', row)
         this.inputForm.auditedUnitsName = row.name
         this.inputForm.auditedUnits = row.id
-        this.inputForm.auditMoney = row.numberTest
         this.inputForm.reportNo = row.reportNo
         this.$nextTick()
       },

+ 4 - 2
src/views/modules/cw/reportManagement/ReportManagementAddForm.vue

@@ -111,7 +111,7 @@
                             {required: true, message:'签字注师2不能为空', trigger:'change'}
                    ]">
               <!--                <el-input v-model="inputForm.signatureAnnotator2" placeholder="请填写签字注师2" clearable></el-input>-->
-              <AccountantUserSelect size="medium" ref="userSelect2" :disabled="status === 'audit' || status === 'taskFormDetail'" :readonly="true" :limit='1' :value="inputForm.signatureAnnotator2" @getValue='(value) => {changeSignatory2(value)}'></AccountantUserSelect>
+              <AccountantUserSelect2 size="medium" ref="userSelect2" :disabled="status === 'audit' || status === 'taskFormDetail'" :readonly="true" :limit='1' :value="inputForm.signatureAnnotator2" @getValue='(value) => {changeSignatory2(value)}'></AccountantUserSelect2>
             </el-form-item>
           </el-col>
 
@@ -535,6 +535,7 @@
   import SelectTree from '@/components/treeSelect/treeSelect.vue'
   import UserSelect from '../workClientInfo/clientUserSelect'
   import AccountantUserSelect from '../workClientInfo/clientUserSelect/AccountantUserIndex'
+  import AccountantUserSelect2 from '../workClientInfo/clientUserSelect/AccountantUserIndex2'
   import UserSelectAll from '@/components/userSelect'
   import ProjectRecordsService from '@/api/cw/projectRecords/ProjectRecordsService'
   import ProjectReportService from '@/api/cw/reportManagement/ProjectReportService'
@@ -664,7 +665,8 @@
       ReportServiceUnitForm,
       ProjectRecoredChooseCom,
       UserSelectAll,
-      AccountantUserSelect
+      AccountantUserSelect,
+      AccountantUserSelect2
     },
     methods: {
       getKeyWatch (keyWatch) {

+ 5 - 4
src/views/modules/cw/reportManagement/ReportManagementSignatureForm.vue

@@ -112,14 +112,13 @@
             </el-form-item>
           </el-col>
 
-          <el-col v-if="inputForm.signatureType === '1'||inputForm.signatureType === '3' || commonJS.isEmpty(inputForm.signatureType)" :span="12">
+          <el-col v-if="inputForm.signatureType === '1' || inputForm.signatureType === '3' || commonJS.isEmpty(inputForm.signatureType)" :span="12">
             <el-form-item label="签字注师2" prop="signatureAnnotator2"
                           :rules="[
-                          {required: true, message: '签字注师2不能为空', trigger: 'change'},
-                          {required: true, message: '签字注师2不能为空', trigger: 'blur'}
+                            {required: true, message:'签字注师2不能为空', trigger:'change'}
                    ]">
               <!--                <el-input v-model="inputForm.signatureAnnotator2" placeholder="请填写签字注师2" clearable></el-input>-->
-              <UserSelect size="medium" ref="userSelect2"  :readonly="true" :limit='1' :value="inputForm.signatureAnnotator2" @getValue='(value) => {changeSignatory2(value)}'></UserSelect>
+              <AccountantUserSelect2 size="medium" ref="userSelect2" :disabled="status === 'audit' || status === 'taskFormDetail'" :readonly="true" :limit='1' :value="inputForm.signatureAnnotator2" @getValue='(value) => {changeSignatory2(value)}'></AccountantUserSelect2>
             </el-form-item>
           </el-col>
 
@@ -520,6 +519,7 @@
   import ReportServiceUnitForm from './ReportServiceUnitForm'
   import ProcessService from '@/api/flowable/ProcessService'
   import UserSelectAll from '@/components/userSelect'
+  import AccountantUserSelect2 from '../workClientInfo/clientUserSelect/AccountantUserIndex2'
   // import UpLoadComponentDialog from '@/views/common/UpLoadComponentDialog'
   // import ProjectInfoForm from './ProjectInfoForm'
   import ProjectRecoredChooseCom from '../projectRecords/ProjectRecordsChooseCom'
@@ -689,6 +689,7 @@
       ProcessService,
       // ProjectInfoForm,
       ProjectRecoredChooseCom,
+      AccountantUserSelect2,
       UserSelectAll
       // UpLoadComponentDialog
     },

+ 108 - 0
src/views/modules/cw/workClientInfo/clientUserSelect/AccountantUserIndex2.vue

@@ -0,0 +1,108 @@
+<template>
+  <div>
+    <el-input placeholder="请选择" :size="size" :disabled="disabled"  :readonly="readonly" style="line-hight:40px" @change="changeName" v-model="name" class="input-with-select">
+      <el-button slot="append" :disabled="disabled"  :readonly="readonly" @click="showUserSelect" icon="el-icon-search"></el-button>
+    </el-input>
+    <user-select ref="userSelect" @doSubmit="selectUsersToInput" :limit="limit" :selectData="selectData"></user-select>
+  </div>
+</template>
+<script>
+import userSelect from './AccountantUserSelectDialog2'
+import UserService from '@/api/sys/UserService'
+export default {
+  data () {
+    return {
+      name: '',
+      labelValue: this.value,
+      selectData: []
+    }
+  },
+  props: {
+    limit: Number,
+    value: String,
+    userName: String,
+    size: {
+      type: String,
+      default: () => { return 'small' }
+    },
+    readonly: {
+      type: Boolean,
+      default: () => { return false }
+    },
+    disabled: {
+      type: Boolean,
+      default: () => { return false }
+    }
+  },
+  components: {
+    userSelect
+  },
+  userService: null,
+  beforeCreate () {
+    this.userService = new UserService()
+  },
+  watch: {
+    value: {
+      handler (newVal) {
+        this.selectData = []
+        if (newVal) {
+          newVal.split(',').forEach((id) => {
+            this.userService.queryById(id).then(({data}) => {
+              if (data && data.id !== '') {
+                this.selectData.push(data)
+              }
+            })
+          })
+        }
+      },
+      immediate: true,
+      deep: false
+    },
+    selectData: {
+      handler (newVal) {
+        this.name = newVal.map(user => { return user.name }).join(',')
+      },
+      immediate: false,
+      deep: false
+    },
+    userName: {
+      handler (newVal) {
+        this.name = newVal
+      },
+      immediate: false,
+      deep: false
+    }
+  },
+  methods: {
+    selectUsersToInput (users) {
+      this.selectData = users
+      this.labelValue = users.map(user => { return user.id }).join(',')
+      this.name = users.map(user => { return user.name }).join(',')
+      this.$emit('getValue', this.labelValue, this.name)
+    },
+    changeName () {
+      this.$emit('getValue', null, this.name)
+    },
+    showUserSelect () {
+      this.$refs.userSelect.init()
+    },
+    changeNameValue (name) {
+      this.name = name
+    },
+    clearSelectData () {
+      this.selectData = []
+    }
+  }
+}
+</script>
+<style>
+.el-form-item__content .el-input-group {
+  vertical-align: middle;
+}
+.el-tag + .el-tag {
+  margin-left: 5px;
+  margin-bottom: 5px;
+}
+</style>
+
+

+ 472 - 0
src/views/modules/cw/workClientInfo/clientUserSelect/AccountantUserSelectDialog2.vue

@@ -0,0 +1,472 @@
+<template>
+  <div>
+    <el-dialog
+      title="用户选择"
+      width="1000px"
+      :close-on-click-modal="false"
+      :append-to-body="true"
+      v-dialogDrag
+      class="userDialog"
+      :visible.sync="visible">
+      <el-container style="height: 500px">
+        <el-aside width="200px">
+
+          <el-card class="org">
+            <div slot="header" class="clearfix">
+              <el-input
+                placeholder="请输入组织机构过滤"
+                size="small"
+                v-model="filterText">
+              </el-input>
+            </div>
+            <el-tree
+              :data="officeTreeData"
+              :props="{
+                  value: 'id',             // ID字段名
+                  label: 'name',         // 显示名称
+                  children: 'children'    // 子级字段名
+                }"
+              default-expand-all
+              highlight-current
+              node-key="id"
+              :render-content="renderContent"
+              :filter-node-method="filterNode"
+              :expand-on-click-node="false"
+              @node-click="handleNodeClick"
+              ref="officeTree">
+            </el-tree>
+          </el-card>
+        </el-aside>
+
+        <el-container>
+          <el-header style="text-align: left; font-size: 12px;height:30px">
+            <el-form size="small" :inline="true" ref="searchForm" :model="searchForm" @keyup.enter.native="refreshList()" @submit.native.prevent>
+              <el-form-item prop="loginName">
+                <el-input size="small" v-model="searchForm.loginName" placeholder="登录名" clearable></el-input>
+              </el-form-item>
+
+              <el-form-item>
+                <el-button  type="primary" @click="refreshList()" size="small" icon="el-icon-search">查询</el-button>
+                <el-button @click="resetSearch()" size="small" icon="el-icon-refresh-right">重置</el-button>
+              </el-form-item>
+            </el-form>
+          </el-header>
+
+          <el-main>
+            <el-table
+              :data="dataList"
+              v-loading="loading"
+              size="small"
+              border
+              ref="userTable"
+              @selection-change="selectionChangeHandle"
+              @sort-change="sortChangeHandle"
+              height="calc(100% - 40px)"
+              style="width: 100%;">
+              <el-table-column
+                header-align="center"
+                align="center"
+                v-if="limit <= 1"
+                width="50">
+                <template slot-scope="scope">
+                  <el-radio :label="scope.row.id" :value="dataListAllSelections[0]&&dataListAllSelections[0].id" @change.native="getTemplateRow(scope.$index,scope.row)"><span></span></el-radio>
+                </template>
+              </el-table-column>
+              <el-table-column
+                type="selection"
+                header-align="center"
+                v-if="limit > 1"
+                align="center"
+                width="50">
+              </el-table-column>
+              <el-table-column
+                prop="photo"
+                header-align="center"
+                align="center"
+                label="头像">
+                <template slot-scope="scope">
+                  <img :src="scope.row.photo === ''?'/static/img/avatar.png':scope.row.photo" style="height:35px"/>
+                </template>
+              </el-table-column>
+              <el-table-column
+                prop="loginName"
+                header-align="center"
+                align="center"
+                sortable="custom"
+                min-width="90"
+                label="登录名">
+              </el-table-column>
+              <el-table-column
+                prop="name"
+                header-align="center"
+                align="真实姓名"
+                sortable="custom"
+                min-width="90"
+                label="用户名">
+              </el-table-column>
+              <el-table-column
+                prop="accountantUserCount"
+                header-align="center"
+                align="center"
+                sortable="custom"
+                min-width="110"
+                label="被选次数">
+
+                <!--用插槽的方法来改变颜色!-->
+                <template slot-scope="scope">
+                  <div v-if="scope.row.accountantUserFlag === 0">
+                    {{ scope.row.accountantUserCount }}
+                  </div>
+                  <div v-else :style="{ color: scope.row.accountantUserCount>100 ? 'red' : 'black' }">
+                    {{ scope.row.accountantUserCount }}
+                  </div>
+                </template>
+              </el-table-column>
+              <el-table-column
+                prop="companyDTO.name"
+                header-align="center"
+                align="center"
+                sortable="custom"
+                min-width="110"
+                label="所属机构">
+              </el-table-column>
+              <el-table-column
+                prop="officeDTO.name"
+                header-align="center"
+                align="center"
+                sortable="custom"
+                min-width="110"
+                label="所属部门">
+              </el-table-column>
+              <el-table-column
+                prop="loginFlag"
+                header-align="center"
+                align="center"
+                min-width="100"
+                label="状态">
+                <template slot-scope="scope">
+                  <el-tag v-if="scope.row.loginFlag === '1'" size="small" type="success">正常</el-tag>
+                  <el-tag v-else-if="scope.row.loginFlag === '0'" size="small" type="danger">禁用</el-tag>
+                </template>
+              </el-table-column>
+            </el-table>
+            <el-pagination
+              @size-change="sizeChangeHandle"
+              @current-change="currentChangeHandle"
+              :current-page="pageNo"
+              :page-sizes="[5, 10, 50, 100]"
+              :page-size="pageSize"
+              :total="total"
+              layout="total, sizes, prev, pager, next, jumper">
+            </el-pagination>
+          </el-main>
+        </el-container>
+
+        <el-aside width="200px">
+          <el-tag
+            :key="tag.id"
+            v-for="tag in dataListAllSelections"
+            closable
+            :disable-transitions="false"
+            @close="del(tag)">
+            {{tag.name}}
+          </el-tag>
+        </el-aside>
+      </el-container>
+      <span slot="footer" class="dialog-footer">
+      <el-button size="small" @click="visible = false" icon="el-icon-circle-close">关闭</el-button>
+      <el-button size="small" type="primary" icon="el-icon-circle-check" @click="doSubmit()">确定</el-button>
+    </span>
+    </el-dialog>
+
+  </div>
+</template>
+
+<script>
+export default {
+  data () {
+    return {
+      searchForm: {
+        loginName: '',
+        accountantUserCount: '',
+        accountantUserFlag: '',
+        companyDTO: {
+          id: ''
+        },
+        officeDTO: {
+          id: ''
+        },
+        name: ''
+      },
+      filterText: '',
+      dataListAllSelections: [],   // 所有选中的数据包含跨页数据
+      dataListSelections: [],
+      idKey: 'id', // 标识列表数据中每一行的唯一键的名称(需要按自己的数据改一下)
+      dataList: [],
+      dynamicTags: [],
+      officeTreeData: [],
+      pageNo: 1,
+      pageSize: 10,
+      total: 0,
+      orders: [],
+      loading: false,
+      visible: false
+    }
+  },
+  props: {
+    selectData: {
+      type: Array,
+      default: () => { return [] }
+    },
+    limit: {
+      type: Number,
+      default: 999999
+    }
+  },
+  watch: {
+    filterText (val) {
+      this.$refs.officeTree.filter(val)
+    }
+  },
+  methods: {
+    init () {
+      this.visible = true
+      this.$nextTick(() => {
+        this.dataListAllSelections = JSON.parse(JSON.stringify(this.selectData))
+        this.refreshTree()
+        this.resetSearch()
+      })
+    },
+    renderContent (h, { node, data, store }) {
+      return (
+        <span class="custom-tree-node">
+                {
+                  data.type === '1' ? <i class="fa fa-sitemap"></i> : <i class="fa fa-users"></i>
+                }
+          <span class="text">{node.label}</span>
+              </span>
+      )
+    },
+    getTemplateRow (index, row) {                                 // 获取选中数据
+      this.dataListSelections = [row]
+      this.$nextTick(() => {
+        this.changePageCoreRecordData()
+      })
+    },
+    // 设置选中的方法
+    setSelectRow () {
+      console.log('设置选中的方法')
+      if (!this.dataListAllSelections || this.dataListAllSelections.length <= 0) {
+        this.$refs.userTable.clearSelection()
+        return
+      }
+      // 标识当前行的唯一键的名称
+      let idKey = this.idKey
+      let selectAllIds = []
+      this.dataListAllSelections.forEach(row => {
+        selectAllIds.push(row[idKey])
+      })
+      this.$refs.userTable.clearSelection()
+      for (var i = 0; i < this.dataList.length; i++) {
+        if (selectAllIds.indexOf(this.dataList[i][idKey]) >= 0) {
+          // 设置选中,记住table组件需要使用ref="table"
+          this.$refs.userTable.toggleRowSelection(this.dataList[i], true)
+        }
+      }
+    },
+    // 记忆选择核心方法
+    changePageCoreRecordData () {
+      // 标识当前行的唯一键的名称
+      let idKey = this.idKey
+      let that = this
+      // 如果总记忆中还没有选择的数据,那么就直接取当前页选中的数据,不需要后面一系列计算
+      if (this.dataListAllSelections.length <= 0) {
+        this.dataListSelections.forEach(row => {
+          that.dataListAllSelections.push(row)
+        })
+        return
+      }
+      // 总选择里面的key集合
+      let selectAllIds = []
+      this.dataListAllSelections.forEach(row => {
+        selectAllIds.push(row[idKey])
+      })
+      let selectIds = []
+      // 获取当前页选中的id
+      this.dataListSelections.forEach(row => {
+        selectIds.push(row[idKey])
+        // 如果总选择里面不包含当前页选中的数据,那么就加入到总选择集合里
+        if (selectAllIds.indexOf(row[idKey]) < 0) {
+          that.dataListAllSelections.push(row)
+        }
+      })
+      let noSelectIds = []
+      // 得到当前页没有选中的id
+      this.dataList.forEach(row => {
+        if (selectIds.indexOf(row[idKey]) < 0) {
+          noSelectIds.push(row[idKey])
+        }
+      })
+      noSelectIds.forEach(id => {
+        if (selectAllIds.indexOf(id) >= 0) {
+          for (let i = 0; i < that.dataListAllSelections.length; i++) {
+            if (that.dataListAllSelections[i][idKey] === id) {
+              // 如果总选择中有未被选中的,那么就删除这条
+              that.dataListAllSelections.splice(i, 1)
+              break
+            }
+          }
+        }
+      })
+    },
+    // 得到选中的所有数据
+    getAllSelectionData () {
+      // 再执行一次记忆勾选数据匹配,目的是为了在当前页操作勾选后直接获取选中数据
+      this.changePageCoreRecordData()
+    },
+    filterNode (value, data) {
+      if (!value) return true
+      return data.name.indexOf(value) !== -1
+    },
+    del (tag) {
+      this.dataListAllSelections.splice(this.dataListAllSelections.indexOf(tag), 1)
+      this.$nextTick(() => {
+        this.setSelectRow()
+      })
+    },
+    // 获取数据列表
+    refreshList () {
+      this.loading = true
+      this.searchForm.certType = '6'
+      if (this.commonJS.isEmpty(this.searchForm.officeDTO.id) && this.commonJS.isEmpty(this.searchForm.companyDTO.id)) {
+        this.searchForm.selectAll = 'true'
+      }
+      this.$http({
+        url: '/sys/user/list2',
+        method: 'get',
+        params: {
+          'current': this.pageNo,
+          'size': this.pageSize,
+          'orders': this.orders,
+          ...this.searchForm
+        }
+      }).then(({data}) => {
+        this.dataList = data.records
+        this.total = data.total
+        this.pageNo = data.current
+        this.loading = false
+        this.$nextTick(() => {
+          this.setSelectRow()
+        })
+      })
+    },
+    refreshTree () {
+      this.$http({
+        url: `/sys/office/treeData`,
+        method: 'get'
+      }).then(({data}) => {
+        this.officeTreeData = data
+      })
+    },
+    // 每页数
+    sizeChangeHandle (val) {
+      this.pageSize = val
+      this.pageNo = 1
+      this.refreshList()
+      this.$nextTick(() => {
+        this.changePageCoreRecordData()
+      })
+    },
+    // 当前页
+    currentChangeHandle (val) {
+      this.pageNo = val
+      this.refreshList()
+      this.$nextTick(() => {
+        this.changePageCoreRecordData()
+      })
+    },
+    // 多选
+    selectionChangeHandle (val) {
+      this.dataListSelections = val
+      this.$nextTick(() => {
+        this.changePageCoreRecordData()
+      })
+    },
+    // 排序
+    sortChangeHandle (column) {
+      if (column.prop === 'officeDTO.name') {
+        column.prop = 'o.name'
+      }
+      if (column.prop === 'companyDTO.name') {
+        column.prop = 'c.name'
+      }
+      this.orders = []
+      if (column.order != null) {
+        this.orders.push({column: this.$utils.toLine(column.prop), asc: column.order === 'ascending'})
+      }
+      this.refreshList()
+    },
+    handleNodeClick (data) {
+      if (data.type === '1') {
+        this.searchForm.companyDTO.id = data.id
+        this.searchForm.officeDTO.id = ''
+      } else {
+        this.searchForm.companyDTO.id = ''
+        this.searchForm.officeDTO.id = data.id
+      }
+      this.refreshList()
+    },
+    resetSearch () {
+      this.searchForm.companyDTO.id = ''
+      this.searchForm.officeDTO.id = ''
+      this.$refs.officeTree.setCurrentKey(null)
+      this.$refs.searchForm.resetFields()
+      this.refreshList()
+    },
+    doSubmit () {
+      console.log('doSubmit')
+      if (this.dataListAllSelections.length === 0) {
+        this.$message.error(`请选择用户`)
+        return
+      }
+      if (this.limit < this.dataListAllSelections.length) {
+        this.$message.error(`你最多只能选择${this.limit}个用户`)
+        return
+      }
+      if (this.dataListAllSelections[0].accountantUserCount >= 100 && this.dataListAllSelections[0].accountantUserFlag === 1) {
+        this.$message.error(`请选择被选次数小于100次的签字注师人员`)
+        return
+      }
+      this.visible = false
+      this.$emit('doSubmit', this.dataListAllSelections)
+    }
+  }
+}
+</script>
+<style lang="scss">
+.org {
+  height: 100%;
+  .el-card__header {
+    padding: 10px;
+  }
+  .el-card__body {
+    padding: 10px;
+    max-height: 520px;
+    overflow: auto;
+  }
+}
+.userDialog{
+  .el-dialog__body {
+    padding: 10px 0px 0px 10px;
+    color: #606266;
+    font-size: 14px;
+    word-break: break-all;
+  }
+  .el-main {
+    padding: 20px 20px 5px 20px;
+    .el-pagination{
+      margin-top: 5px;
+    }
+  }
+}
+</style>