sangwenwei 1 gadu atpakaļ
vecāks
revīzija
47647fd89c

+ 7 - 0
src/api/cw/reimbursementApproval/ReimbursementApprovalService.js

@@ -10,6 +10,13 @@ export default class ReimbursementApprovalService {
       params: param
     })
   }
+	list2 (param) {
+		return request({
+			url: prefix + '/reimbursementApproval/info/list2',
+			method: 'get',
+			params: param
+		})
+	}
   reportNoList (param) {
     return request({
       url: prefix + '/reimbursementApproval/info/reportNoList',

+ 7 - 0
src/api/cw/reimbursementApproval/ReimbursementApprovalTypeService.js

@@ -37,6 +37,13 @@ export default class ReimbursementApprovalTypeService {
       params: {id: id}
     })
   }
+	findByName (name) {
+		return request({
+			url: prefix + '/reimbursementApproval/type/findByName',
+			method: 'get',
+			params: {name: name}
+		})
+	}
   remove (id) {
     return request({
       url: prefix + '/reimbursementApproval/type/deleteById',

+ 6 - 2
src/views/cw/reimbursementApproval/info/ReimbursementForm.vue

@@ -919,7 +919,8 @@
 					procDefId: '',
 					procDefKey: '',
 					formTitle: '',
-					departmentName: ''
+					departmentName: '',
+					businessFlag: ''
 				},
 				keyWatch: '',
 				amountKey: '',
@@ -1042,7 +1043,8 @@
 					purchaseNo: '',
 					tradeTotalPrice: '',
 					purchaseId: '',
-					departmentName: ''
+					departmentName: '',
+					businessFlag: ''
 				}
 				if (method === 'add') {
 					this.title = `新建报销类型`
@@ -1135,6 +1137,7 @@
 						}
 						this.dataFiltering()
 						this.inputForm.id = this.businessId
+						this.inputForm.businessFlag = '1'
 						this.inputForm.invoiceReimbursementFiles = this.$refs.invoiceReimbursementUpLoadComponent.getDataList()
 						this.inputForm.files = this.$refs.uploadComponent.getDataList()
 						this.reimbursementApprovalService.save(this.inputForm).then((data) => {
@@ -1418,6 +1421,7 @@
 				this.inputForm.invoiceReimbursementFiles = this.$refs.invoiceReimbursementUpLoadComponent.getDataList()
 				this.inputForm.files = this.$refs.uploadComponent.getDataList()
 				this.inputForm.type = '1'
+				this.inputForm.businessFlag = '1'
 				this.reimbursementApprovalService.save(this.inputForm).then((data) => {
 					callback()
 					this.$refs.inputForm.resetFields()

+ 336 - 0
src/views/cw/szfbReimbursementApproval/info/CwProgramPageForm.vue

@@ -0,0 +1,336 @@
+<template>
+  <div>
+    <el-dialog
+      :title="title"
+      :close-on-click-modal="false"
+	  draggable
+      width="1200px"
+      height="500px"
+      @close="close"
+      append-to-body
+      v-model="visible">
+      <el-container>
+        <el-main style="padding-top: 0;padding-bottom: 0">
+          <div v-if="isShow">
+            <el-radio v-model="checkType" label="1"  style="margin-right: 20px">项目</el-radio>
+            <el-radio v-model="checkType" label="2"  style="margin-right: 20px">其他</el-radio>
+          </div>
+          <div  v-if="checkType === '1'">
+            <el-form style="margin-bottom: 0"  :inline="true" class="query-form" ref="searchForm" :model="searchForm" @keyup.enter.native="refreshList()" @submit.native.prevent>
+              <!-- 搜索框-->
+              <el-form-item label="项目名称" prop="name">
+                <el-input  v-model="searchForm.projectName" placeholder="请输入项目名称" clearable></el-input>
+              </el-form-item>
+              <el-form-item label="项目编号" prop="no">
+                <el-input v-model="searchForm.projectNumber" placeholder="请输入项目编号" clearable></el-input>
+              </el-form-item>
+
+              <el-form-item>
+                <el-button type="primary" @click="list()" icon="el-icon-search">查询</el-button>
+                <el-button @click="resetSearch()" icon="el-icon-refresh-right">重置</el-button>
+              </el-form-item>
+            </el-form>
+            <div v-if="num" style="margin-bottom: 10px"><span style="color: #F56C6C">注:最多选择 50 条数据</span></div>
+            <vxe-table
+              border="inner"
+              auto-resize
+              resizable
+              height="400px"
+              :loading="loading"
+              ref="programTable"
+              show-header-overflow
+              show-overflow
+              highlight-hover-row
+              :menu-config="{}"
+              :print-config="{}"
+              @checkbox-all="selectAllEvent"
+              @checkbox-change="selectionChangeHandle"
+              :row-id="rowId"
+              :checkbox-config="{reserve: true}"
+              :sort-config="{remote:true}"
+              :data="dataList">
+              <vxe-column type="seq" width="60" title="序号"></vxe-column>
+              <vxe-column type="checkbox" width="60px"></vxe-column>
+              <vxe-column min-width="230" align="center" title="项目名称" field="projectName"></vxe-column>
+              <vxe-column min-width="160" align="center" title="项目编号" field="projectNumber"></vxe-column>
+              <vxe-column min-width="160" align="center" title="合同名称" field="contractName"></vxe-column>
+              <vxe-column min-width="160" align="center" title="创建人" field="createBy.name"></vxe-column>
+              <vxe-column min-width="160" align="center" title="创建时间" field="createDate"></vxe-column>
+              <!--          <vxe-column  title="项目名称" field="name"></vxe-column>-->
+              <!--          <vxe-column width="200px" title="项目编号" field="no"></vxe-column>-->
+              <!--          <vxe-column width="150px" title="登记人" field="createBy"></vxe-column>-->
+              <!--          <vxe-column width="100px" title="委托方" field="clientName"></vxe-column>-->
+
+            </vxe-table>
+            <vxe-pager
+              background
+              :current-page="tablePage.currentPage"
+              :page-size="tablePage.pageSize"
+              :total="tablePage.total"
+              :page-sizes="[10, 20, 100, 1000, {label: '全量数据', value: 1000000}]"
+              :layouts="['PrevPage', 'JumpNumber', 'NextPage', 'FullJump', 'Sizes', 'Total']"
+              @page-change="currentChangeHandle">
+            </vxe-pager>
+          </div>
+          <div style="height: 500px;" v-if="checkType === '2'">
+            <el-form  label-width="80px" class="query-form" ref="searchForm" :model="searchForm" @keyup.enter.native="refreshList()" @submit.native.prevent>
+              <el-row  :gutter="15">
+                <el-col :span="21">
+                  <el-form-item label="详情" prop="detail">
+                    <el-input style="width: 100%" type="textarea" maxlength="500" v-model="detail" placeholder="请输入详情" show-word-limit></el-input>
+                  </el-form-item>
+                </el-col>
+              </el-row>
+            </el-form>
+          </div>
+        </el-main>
+        <el-aside width="300px" v-if="checkType === '1' && commonJS.isNotEmpty(dataListAllSelections.length) && dataListAllSelections.length > 0">
+          <el-tag
+            style="margin: 10px 0 0 0"
+            :key="tag.id"
+            v-for="(tag, index) in dataListAllSelections"
+            closable
+            :disable-transitions="false"
+            @close="del(tag, index)">
+            {{tag.projectName.length>20?tag.projectName.substring(0,20)+'...':tag.projectName}}
+          </el-tag>
+        </el-aside>
+      </el-container>
+		<template #footer>
+			<span class="dialog-footer">
+			  <el-button  @click="close()">关闭</el-button>
+			  <el-button  type="primary" v-if="method != 'view'" @click="getProgram()" icon="el-icon-circle-check" v-noMoreClick>确定</el-button>
+			</span>
+		</template>
+    </el-dialog>
+  </div>
+</template>
+
+<script>
+	import { ref } from "vue";
+  import projectRecordsService from '@/api/cw/projectRecords/ProjectRecordsService'
+  // import ProgramProjectListInfoService from '@/api/program/ProgramProjectListInfoService'
+  // import ReimbursementApprovalService from '@/api/cw/reimbursementApproval/ReimbursementApprovalService'
+  export default {
+    data () {
+      return {
+        title: '项目选择',
+        method: '',
+        visible: false,
+        loading: false,
+        tablePage: {
+          total: 0,
+          currentPage: 1,
+          pageSize: 10,
+          orders: []
+        },
+        dataList: [],
+        searchForm: {
+          projectName: '',
+          projectNumber: '',
+          createBy: ''
+        },
+        checkType: '',
+        detail: '',
+        isShow: true,
+        dataListAllSelections: [],
+        rowId: 'id',
+        num: true // num为true是多选,false是单选
+      }
+    },
+    // programProjectListInfoService: null,
+    // reimbursementApprovalService: null,
+    created () {
+      // this.programProjectListInfoService = new ProgramProjectListInfoService()
+      // this.reimbursementApprovalService = new ReimbursementApprovalService()
+    },
+    components: {
+    },
+    methods: {
+      init (isShow, num) {
+        if (this.commonJS.isEmpty(isShow)) {
+          this.isShow = true
+          this.checkType = '1'
+        } else {
+          if (isShow === false || isShow === 'false') {
+            this.isShow = false
+            this.checkType = '1'
+            this.$message({message: '第一条为项目后面新增只能选择项目', type: 'warning', customClass: 'messageZindex'})
+          } else if (isShow === '1') {
+            this.isShow = false
+            this.checkType = '1'
+          } else {
+            this.isShow = false
+            this.checkType = '2'
+          }
+        }
+        if (this.commonJS.isEmpty(num) || num === true) {
+          this.num = true // num为true是多选,false是单选
+        } else {
+          this.num = false
+        }
+        this.visible = true
+        this.dataListAllSelections = []
+        this.tablePage.currentPage = 1
+        this.tablePage.pageSize = 10
+        this.searchForm = {
+          projectName: '',
+          projectNumber: '',
+          createBy: ''
+        }
+        this.list()
+      },
+      // 表单提交
+      getProgram () {
+        let rows
+		  console.log('this.dataListAllSelections',this.dataListAllSelections)
+        if (this.checkType === '1') {
+          if (this.commonJS.isEmpty(this.dataListAllSelections)) {
+            this.$message.error('请至少选择一条数据')
+            return
+          }
+          if (this.num === false) {
+            if (this.dataListAllSelections.length > 1) {
+              this.$message.error('最多选择一条数据')
+              return
+            }
+          } else {
+            if (this.dataListAllSelections.length > 50) {
+              this.$message.error('最多选择50条数据')
+              return
+            }
+          }
+          rows = this.dataListAllSelections
+
+        } else {
+          if (this.commonJS.isEmpty(this.detail)) {
+            this.$message.error('请填写开票详情')
+            return
+          }
+          rows = [{projectName: this.detail}]
+        }
+        this.close()
+        this.$emit('getProgram', rows)
+      },
+      list () {
+        this.loading = true
+        this.searchForm.status = '5'
+        projectRecordsService.list({
+          'current': this.tablePage.currentPage,
+          'size': this.tablePage.pageSize,
+          'orders': this.tablePage.orders,
+          ...this.searchForm
+        }).then(async (data) => {
+          this.dataList = data.records
+          this.tablePage.total = data.total
+          this.loading = false
+          // 在切换页后,将页面不需要勾选的数据取消勾选
+          let isCheck = []
+          for (let i = 0; i < this.tablePage.pageSize; i++) {
+            for (let j = 0; j < this.dataListAllSelections.length; j++) {
+              if (this.commonJS.isNotEmpty(this.dataList[i]) && this.commonJS.isNotEmpty(this.dataListAllSelections[j])) {
+                if (this.dataList[i].id === this.dataListAllSelections[j].id) { // 符合条件的数据勾选
+                  isCheck.push(this.dataList[i].id)
+                }
+              }
+            }
+          }
+          if (this.commonJS.isNotEmpty(isCheck)) {
+            for (let i = 0; i < this.tablePage.pageSize; i++) {
+              if (isCheck.includes(this.dataList[i].id)) {
+                await this.$refs.programTable.setCheckboxRow([this.dataList[i]], true)
+              } else {
+                await this.$refs.programTable.setCheckboxRow([this.dataList[i]], false)
+              }
+            }
+          } else {
+            for (let i = 0; i < this.tablePage.pageSize; i++) {
+              await this.$refs.programTable.setCheckboxRow([this.dataList[i]], false)
+            }
+          }
+        })
+      },
+      // 当前页
+      currentChangeHandle ({currentPage, pageSize}) {
+        this.tablePage.currentPage = currentPage
+        this.tablePage.pageSize = pageSize
+        this.list()
+      },
+      resetSearch () {
+        this.dataListAllSelections = []
+        this.searchForm = {
+          projectName: '',
+          projectNumber: '',
+          createBy: ''
+        }
+        // this.$refs.programTable.clearCheckboxReserve() // 清除全部页的勾选
+        this.$refs.searchForm.resetFields()
+        this.list()
+      },
+      close () {
+        // this.$refs.programTable.clearCheckboxReserve()
+        this.dataListAllSelections = []
+        this.detail = ''
+        this.visible = false
+      },
+      // 全选/取消全选 时,右侧tag标签同步新增或删除改变
+      async selectAllEvent (event) {
+        this.dataListAllSelections = []
+        let thisPageDate = await this.$refs.programTable.getCheckboxRecords()
+        let otherPageDate = await this.$refs.programTable.getCheckboxReserveRecords()
+        if (this.commonJS.isNotEmpty(otherPageDate)) {
+          for (let i = 0; i < otherPageDate.length; i++) {
+            this.dataListAllSelections.push(otherPageDate[i])
+          }
+        }
+        if (this.commonJS.isNotEmpty(thisPageDate)) {
+          for (let i = 0; i < thisPageDate.length; i++) {
+            this.dataListAllSelections.push(thisPageDate[i])
+          }
+        }
+      },
+      // 当前页“选中/取消选中”数据时,“新增/删除”右侧tag标签
+      selectionChangeHandle (event) {
+        if (event.checked) { // 选中触发
+          let delIndex = -1
+          for (let i = 0; i < this.dataListAllSelections.length; i++) {
+            if (this.dataListAllSelections[i].id === event.row.id) {
+              delIndex = i
+            }
+          }
+          if (this.commonJS.isNotEmpty(delIndex) && delIndex === -1) {
+            this.dataListAllSelections.push(event.row)
+          }
+        } else { // 取消选中触发
+          let delIndex = -1
+          for (let i = 0; i < this.dataListAllSelections.length; i++) {
+            if (this.dataListAllSelections[i].id === event.row.id) {
+              delIndex = i
+            }
+          }
+          if (this.commonJS.isNotEmpty(delIndex) && delIndex !== -1) {
+            this.dataListAllSelections.splice(delIndex, 1)
+          }
+        }
+      },
+      // 删除tag标签时,取消勾选当前页对应的数据
+      async del (tag, index) {
+        this.dataListAllSelections.splice(index, 1)
+        let rows = await this.$refs.programTable.getCheckboxRecords()
+        await this.$refs.programTable.clearCheckboxRow()
+        for (let i = 0; i < this.dataList.length; i++) {
+          for (let j = 0; j < rows.length; j++) {
+            if (this.dataList[i].id !== tag.id && this.dataList[i].id === rows[j].id) {
+              await this.$refs.programTable.setCheckboxRow([this.dataList[i]], true)
+            }
+          }
+        }
+      }
+    }
+  }
+</script>
+<style>
+  .messageZindex {
+    z-index:9999 !important;
+  }
+</style>

+ 314 - 0
src/views/cw/szfbReimbursementApproval/info/CwProgramPageForm2.vue

@@ -0,0 +1,314 @@
+<template>
+  <div>
+    <el-dialog
+      :title="title"
+      :close-on-click-modal="false"
+	  draggable
+      width="1200px"
+      height="500px"
+      @close="close"
+      append-to-body
+      v-model="visible">
+      <el-container>
+        <el-main style="padding-top: 0;padding-bottom: 0">
+          <div v-if="isShow">
+            <el-radio v-model="checkType" label="1"  style="margin-right: 20px">项目</el-radio>
+            <el-radio v-model="checkType" label="2"  style="margin-right: 20px">其他</el-radio>
+          </div>
+          <div  v-if="checkType === '1'">
+            <el-form style="margin-bottom: 0"  :inline="true" class="query-form" ref="searchForm" :model="searchForm" @keyup.enter.native="refreshList()" @submit.native.prevent>
+              <!-- 搜索框-->
+              <el-form-item label="项目名称" prop="name">
+                <el-input  v-model="searchForm.projectName" placeholder="请输入项目名称" clearable></el-input>
+              </el-form-item>
+              <el-form-item label="项目编号" prop="no">
+                <el-input v-model="searchForm.projectNumber" placeholder="请输入项目编号" clearable></el-input>
+              </el-form-item>
+
+              <el-form-item>
+                <el-button type="primary" @click="list()" icon="el-icon-search">查询</el-button>
+                <el-button @click="resetSearch()" icon="el-icon-refresh-right">重置</el-button>
+              </el-form-item>
+            </el-form>
+<!--            <div v-if="num" style="margin-bottom: 10px"><span style="color: #F56C6C">注:最多选择 10 条数据</span></div>-->
+            <vxe-table
+              border="inner"
+              auto-resize
+              resizable
+              height="400px"
+              :loading="loading"
+              ref="programTable"
+              show-header-overflow
+              show-overflow
+              highlight-hover-row
+              :menu-config="{}"
+              :print-config="{}"
+              @checkbox-all="selectAllEvent"
+              @checkbox-change="selectionChangeHandle"
+              :row-id="rowId"
+              :checkbox-config="{reserve: true}"
+              :sort-config="{remote:true}"
+              :data="dataList">
+              <vxe-column type="seq" width="60" title="序号"></vxe-column>
+				<vxe-column type="radio" width="60px"></vxe-column>
+              <vxe-column min-width="230" align="center" title="项目名称" field="projectName"></vxe-column>
+              <vxe-column min-width="160" align="center" title="项目编号" field="projectNumber"></vxe-column>
+              <vxe-column min-width="160" align="center" title="合同名称" field="contractName"></vxe-column>
+              <vxe-column min-width="160" align="center" title="创建人" field="createBy.name"></vxe-column>
+              <vxe-column min-width="160" align="center" title="创建时间" field="createDate"></vxe-column>
+              <!--          <vxe-column  title="项目名称" field="name"></vxe-column>-->
+              <!--          <vxe-column width="200px" title="项目编号" field="no"></vxe-column>-->
+              <!--          <vxe-column width="150px" title="登记人" field="createBy"></vxe-column>-->
+              <!--          <vxe-column width="100px" title="委托方" field="clientName"></vxe-column>-->
+
+            </vxe-table>
+            <vxe-pager
+              background
+              :current-page="tablePage.currentPage"
+              :page-size="tablePage.pageSize"
+              :total="tablePage.total"
+              :page-sizes="[10, 20, 100, 1000, {label: '全量数据', value: 1000000}]"
+              :layouts="['PrevPage', 'JumpNumber', 'NextPage', 'FullJump', 'Sizes', 'Total']"
+              @page-change="currentChangeHandle">
+            </vxe-pager>
+          </div>
+          <div style="height: 500px;" v-if="checkType === '2'">
+            <el-form  label-width="80px" class="query-form" ref="searchForm" :model="searchForm" @keyup.enter.native="refreshList()" @submit.native.prevent>
+              <el-row  :gutter="15">
+                <el-col :span="21">
+                  <el-form-item label="详情" prop="detail">
+                    <el-input style="width: 100%" type="textarea" maxlength="500" v-model="detail" placeholder="请输入详情" show-word-limit></el-input>
+                  </el-form-item>
+                </el-col>
+              </el-row>
+            </el-form>
+          </div>
+        </el-main>
+        <el-aside width="300px" v-if="checkType === '1' && commonJS.isNotEmpty(dataListAllSelections.length) && dataListAllSelections.length > 0">
+          <el-tag
+            style="margin: 10px 0 0 0"
+            :key="tag.id"
+            v-for="(tag, index) in dataListAllSelections"
+            closable
+            :disable-transitions="false"
+            @close="del(tag, index)">
+            {{tag.projectName.length>20?tag.projectName.substring(0,20)+'...':tag.projectName}}
+          </el-tag>
+        </el-aside>
+      </el-container>
+		<template #footer>
+			<span class="dialog-footer">
+			  <el-button  @click="close()">关闭</el-button>
+			  <el-button  type="primary" v-if="method != 'view'" @click="getProgram()" icon="el-icon-circle-check" v-noMoreClick>确定</el-button>
+			</span>
+		</template>
+    </el-dialog>
+  </div>
+</template>
+
+<script>
+	import { ref } from "vue";
+  import projectRecordsService from '@/api/cw/projectRecords/ProjectRecordsService'
+  // import ProgramProjectListInfoService from '@/api/program/ProgramProjectListInfoService'
+  // import ReimbursementApprovalService from '@/api/cw/reimbursementApproval/ReimbursementApprovalService'
+  export default {
+    data () {
+      return {
+        title: '项目选择',
+        method: '',
+        visible: false,
+        loading: false,
+        tablePage: {
+          total: 0,
+          currentPage: 1,
+          pageSize: 10,
+          orders: []
+        },
+        dataList: [],
+        searchForm: {
+          projectName: '',
+          projectNumber: '',
+          createBy: ''
+        },
+        checkType: '',
+        detail: '',
+        isShow: true,
+        dataListAllSelections: [],
+        rowId: 'id',
+        num: true // num为true是多选,false是单选
+      }
+    },
+    // programProjectListInfoService: null,
+    // reimbursementApprovalService: null,
+    created () {
+      // this.programProjectListInfoService = new ProgramProjectListInfoService()
+      // this.reimbursementApprovalService = new ReimbursementApprovalService()
+    },
+    components: {
+    },
+    methods: {
+      init (isShow, num) {
+        if (this.commonJS.isEmpty(isShow)) {
+          this.isShow = true
+          this.checkType = '1'
+        } else {
+          if (isShow === false || isShow === 'false') {
+            this.isShow = false
+            this.checkType = '1'
+            this.$message({message: '第一条为项目后面新增只能选择项目', type: 'warning', customClass: 'messageZindex'})
+          } else if (isShow === '1') {
+            this.isShow = false
+            this.checkType = '1'
+          } else {
+            this.isShow = false
+            this.checkType = '2'
+          }
+        }
+        if (this.commonJS.isEmpty(num) || num === true) {
+          this.num = true // num为true是多选,false是单选
+        } else {
+          this.num = false
+        }
+        this.visible = true
+        this.dataListAllSelections = []
+        this.tablePage.currentPage = 1
+        this.tablePage.pageSize = 10
+        this.searchForm = {
+          projectName: '',
+          projectNumber: '',
+          createBy: ''
+        }
+        this.list()
+      },
+      // 表单提交
+      getProgram () {
+		  let row = this.$refs.programTable.getRadioRecord()
+		  if (this.commonJS.isEmpty(row)) {
+			  this.$message.error('请选择一条数据')
+			  return
+		  }
+        this.close()
+        this.$emit('getProgram', row)
+      },
+      list () {
+        this.loading = true
+        this.searchForm.status = '5'
+        projectRecordsService.list({
+          'current': this.tablePage.currentPage,
+          'size': this.tablePage.pageSize,
+          'orders': this.tablePage.orders,
+          ...this.searchForm
+        }).then(async (data) => {
+          this.dataList = data.records
+          this.tablePage.total = data.total
+          this.loading = false
+          // 在切换页后,将页面不需要勾选的数据取消勾选
+          let isCheck = []
+          for (let i = 0; i < this.tablePage.pageSize; i++) {
+            for (let j = 0; j < this.dataListAllSelections.length; j++) {
+              if (this.commonJS.isNotEmpty(this.dataList[i]) && this.commonJS.isNotEmpty(this.dataListAllSelections[j])) {
+                if (this.dataList[i].id === this.dataListAllSelections[j].id) { // 符合条件的数据勾选
+                  isCheck.push(this.dataList[i].id)
+                }
+              }
+            }
+          }
+          if (this.commonJS.isNotEmpty(isCheck)) {
+            for (let i = 0; i < this.tablePage.pageSize; i++) {
+              if (isCheck.includes(this.dataList[i].id)) {
+                await this.$refs.programTable.setCheckboxRow([this.dataList[i]], true)
+              } else {
+                await this.$refs.programTable.setCheckboxRow([this.dataList[i]], false)
+              }
+            }
+          } else {
+            for (let i = 0; i < this.tablePage.pageSize; i++) {
+              await this.$refs.programTable.setCheckboxRow([this.dataList[i]], false)
+            }
+          }
+        })
+      },
+      // 当前页
+      currentChangeHandle ({currentPage, pageSize}) {
+        this.tablePage.currentPage = currentPage
+        this.tablePage.pageSize = pageSize
+        this.list()
+      },
+      resetSearch () {
+        this.dataListAllSelections = []
+        this.searchForm = {
+          projectName: '',
+          projectNumber: '',
+          createBy: ''
+        }
+        // this.$refs.programTable.clearCheckboxReserve() // 清除全部页的勾选
+        this.$refs.searchForm.resetFields()
+        this.list()
+      },
+      close () {
+        // this.$refs.programTable.clearCheckboxReserve()
+        this.dataListAllSelections = []
+        this.detail = ''
+        this.visible = false
+      },
+      // 全选/取消全选 时,右侧tag标签同步新增或删除改变
+      async selectAllEvent (event) {
+        this.dataListAllSelections = []
+        let thisPageDate = await this.$refs.programTable.getCheckboxRecords()
+        let otherPageDate = await this.$refs.programTable.getCheckboxReserveRecords()
+        if (this.commonJS.isNotEmpty(otherPageDate)) {
+          for (let i = 0; i < otherPageDate.length; i++) {
+            this.dataListAllSelections.push(otherPageDate[i])
+          }
+        }
+        if (this.commonJS.isNotEmpty(thisPageDate)) {
+          for (let i = 0; i < thisPageDate.length; i++) {
+            this.dataListAllSelections.push(thisPageDate[i])
+          }
+        }
+      },
+      // 当前页“选中/取消选中”数据时,“新增/删除”右侧tag标签
+      selectionChangeHandle (event) {
+        if (event.checked) { // 选中触发
+          let delIndex = -1
+          for (let i = 0; i < this.dataListAllSelections.length; i++) {
+            if (this.dataListAllSelections[i].id === event.row.id) {
+              delIndex = i
+            }
+          }
+          if (this.commonJS.isNotEmpty(delIndex) && delIndex === -1) {
+            this.dataListAllSelections.push(event.row)
+          }
+        } else { // 取消选中触发
+          let delIndex = -1
+          for (let i = 0; i < this.dataListAllSelections.length; i++) {
+            if (this.dataListAllSelections[i].id === event.row.id) {
+              delIndex = i
+            }
+          }
+          if (this.commonJS.isNotEmpty(delIndex) && delIndex !== -1) {
+            this.dataListAllSelections.splice(delIndex, 1)
+          }
+        }
+      },
+      // 删除tag标签时,取消勾选当前页对应的数据
+      async del (tag, index) {
+        this.dataListAllSelections.splice(index, 1)
+        let rows = await this.$refs.programTable.getCheckboxRecords()
+        await this.$refs.programTable.clearCheckboxRow()
+        for (let i = 0; i < this.dataList.length; i++) {
+          for (let j = 0; j < rows.length; j++) {
+            if (this.dataList[i].id !== tag.id && this.dataList[i].id === rows[j].id) {
+              await this.$refs.programTable.setCheckboxRow([this.dataList[i]], true)
+            }
+          }
+        }
+      }
+    }
+  }
+</script>
+<style>
+  .messageZindex {
+    z-index:9999 !important;
+  }
+</style>

+ 157 - 0
src/views/cw/szfbReimbursementApproval/info/CwReimbursementTypePullForm.vue

@@ -0,0 +1,157 @@
+<template>
+  <div>
+    <el-dialog
+      title="报销类型选择"
+      :close-on-click-modal="false"
+	  draggable
+      width="1100px"
+      height="500px"
+      append-to-body
+      @close="close"
+      v-model="visible">
+      <div style="height: calc(100% - 80px);">
+        <el-form :inline="true" class="query-form" ref="searchForm" :model="searchForm" @keyup.enter.native="refreshList()" @submit.native.prevent>
+          <!-- 搜索框-->
+          <el-form-item label="报销类型名称" prop="name">
+            <el-input v-model="searchForm.name" placeholder="请输入报销类型名称" clearable></el-input>
+          </el-form-item>
+
+          <el-form-item>
+            <el-button type="primary" @click="list()" icon="el-icon-search">查询</el-button>
+            <el-button @click="resetSearch()" icon="el-icon-refresh-right">重置</el-button>
+          </el-form-item>
+        </el-form>
+        <vxe-table
+          border="inner"
+          auto-resize
+          resizable
+          height="500px"
+          :loading="loading"
+          ref="typeTable"
+          show-header-overflow
+          show-overflow
+          highlight-hover-row
+          :menu-config="{}"
+          :sort-config="{remote:true}"
+          :data="dataList"
+          :tree-config="{transform: true, rowField: 'id', parentField: 'parentId',expandAll: true}"
+          :row-config="{isCurrent: true}"
+          :radio-config="{trigger: 'row'}">
+          <vxe-column type="seq" width="60" title="序号"></vxe-column>
+          <vxe-column type="radio" width="60" ></vxe-column>
+          <vxe-column title="报销内容名称" field="name" align="left" tree-node></vxe-column>
+          <vxe-column width="100" title="序号" field="sort"></vxe-column>
+        </vxe-table>
+      </div>
+		<template #footer>
+			<span class="dialog-footer">
+			  <el-button @click="close()" icon="el-icon-circle-close">关闭</el-button>
+			  <el-button type="primary" v-if="method != 'view'" @click="getProgramForType" icon="el-icon-circle-check" v-noMoreClick>确定</el-button>
+			</span>
+		</template>
+    </el-dialog>
+  </div>
+</template>
+
+<script>
+  // import ReimbursementTypeService from '@/api/sys/ReimbursementTypeService'
+  import ReimbursementApprovalTypeService from '@/api/cw/reimbursementApproval/ReimbursementApprovalTypeService'
+  export default {
+    data () {
+      return {
+        searchForm: {
+          name: ''
+        },
+        dataList: [],
+        tablePage: {
+          total: 0,
+          currentPage: 1,
+          pageSize: 10,
+          orders: []
+        },
+        title: '',
+        method: '',
+        visible: false,
+        loading: false,
+        like: '',
+        officeId: ''
+      }
+    },
+    // reimbursementTypeService: null,
+    reimbursementApprovalTypeService: null,
+    created () {
+      // this.reimbursementTypeService = new ReimbursementTypeService()
+      this.reimbursementApprovalTypeService = new ReimbursementApprovalTypeService()
+    },
+    components: {
+    },
+    methods: {
+      init (like, deptName) {
+        console.log('进来了')
+        console.log('like', like)
+        if (like === '1') {
+          this.like = '1'
+        } else {
+          this.like = ''
+        }
+        this.officeId = deptName
+        console.log('this.officeId', this.officeId)
+        this.visible = true
+        this.list()
+      },
+      // 表单提交
+      getProgramForType () {
+        let rows
+        if (this.commonJS.isEmpty(this.$refs.typeTable.getRadioRecord())) {
+          this.$message.error('请选择一条数据')
+          return
+        }
+        rows = this.$refs.typeTable.getRadioRecord()
+        this.dataList.forEach((item) => {
+          if (item.parentId === rows.id) {
+            this.$message.error('只可以选择最小节点的数据')
+            throw new Error('只可以选择最小节点的数据')
+          }
+        })
+        this.$emit('getProgramForType', rows)
+        this.close()
+      },
+      list () {
+        this.loading = true
+        this.searchForm.like = this.like
+        this.searchForm.officeId = this.officeId
+        this.reimbursementApprovalTypeService.bxList({...this.searchForm}).then((data) => {
+        	console.log('data',data)
+          this.dataList = data
+          this.loading = false
+          this.$nextTick(() => {
+            this.$refs.typeTable.setAllTreeExpand(true)
+          })
+        })
+        // this.reimbursementTypeService.list({...this.searchForm}).then((data) => {
+        //   this.dataList = data
+        //   this.loading = false
+        // })
+      },
+      // 当前页
+      currentChangeHandle ({currentPage, pageSize}) {
+        this.tablePage.currentPage = currentPage
+        this.tablePage.pageSize = pageSize
+        this.list()
+      },
+      resetSearch () {
+        this.$refs.searchForm.resetFields()
+        this.list()
+      },
+      close () {
+        this.detail = ''
+        this.visible = false
+      }
+    }
+  }
+</script>
+<style>
+  .messageZindex {
+    z-index:9999 !important;
+  }
+</style>

Failā izmaiņas netiks attēlotas, jo tās ir par lielu
+ 1021 - 0
src/views/cw/szfbReimbursementApproval/info/InfoForm.vue


Failā izmaiņas netiks attēlotas, jo tās ir par lielu
+ 1021 - 0
src/views/cw/szfbReimbursementApproval/info/InfoFormDetail.vue


+ 87 - 0
src/views/cw/szfbReimbursementApproval/info/InfoHistory.vue

@@ -0,0 +1,87 @@
+<template xmlns:v-slot="http://www.w3.org/1999/XSL/Transform">
+	<div>
+		<el-dialog
+			:title="title"
+			:close-on-click-modal="false"
+			draggable
+			append-to-body
+			width="500px"
+			@close="close"
+			v-model="visible">
+			<vxe-table
+				border="inner"
+				size="mini"
+				max-height="1000px"
+				:data="infoList">
+				<vxe-column type="seq" width="60" title="序号"></vxe-column>
+				<vxe-column min-width="160" align="center" title="修改时间" field="createTime">
+					<template #default="scope">
+						<el-link  type="primary" :underline="false" v-if="hasPermission('cw:reimbursement:info:view')" @click="view(scope.row.id)">{{scope.row.createTime}}</el-link>
+					</template>
+				</vxe-column>
+				<vxe-column min-width="160" align="center" title="修改人" field="createName">
+				</vxe-column>
+			</vxe-table>
+			<InfoFormDetail ref="infoFormDetail"></InfoFormDetail>
+
+			<template #footer>
+			<span class="dialog-footer">
+			  <el-button @click="close()" icon="el-icon-circle-close">关闭</el-button>
+			</span>
+			</template>
+		</el-dialog>
+	</div>
+</template>
+
+<script>
+	import ReimbursementApprovalService from '@/api/cw/reimbursementApproval/ReimbursementApprovalService'
+	import InfoFormDetail from "./InfoFormDetail";
+	export default {
+		data() {
+			return {
+				loading: false,
+				visible: false,
+				infoList: []
+			}
+		},
+
+		ReimbursementApprovalService: null,
+
+		created() {
+			this.reimbursementApprovalService = new ReimbursementApprovalService()
+
+		},
+		props: {},
+		components: {
+			InfoFormDetail
+		},
+		computed: {
+
+		},
+		watch: {},
+		methods: {
+			init(id) {
+				this.title = '报销修改历史'
+				this.visible = true
+				this.loading = false
+				this.$nextTick(() => {
+					this.loading = true
+					this.reimbursementApprovalService.findHistory(id).then((data) => {
+						this.infoList = data
+						this.loading = false
+					})
+				})
+			},
+			close() {
+				this.visible = false
+			},
+			view(id){
+				this.$refs.infoFormDetail.init('view', id)
+			}
+		}
+	}
+
+</script>
+<style scoped>
+
+</style>

+ 676 - 0
src/views/cw/szfbReimbursementApproval/info/InfoList.vue

@@ -0,0 +1,676 @@
+<template>
+	<div class="page">
+		<el-form :inline="true" class="query-form m-b-10" v-if="searchVisible" ref="searchForm" :model="searchForm" @keyup.enter.native="refreshList()" @submit.native.prevent>
+			<!-- 搜索框-->
+			<el-form-item label="报销编号" prop="no">
+				<el-input v-model="searchForm.no" placeholder="请输入报销编号" clearable>
+				</el-input>
+			</el-form-item>
+			<el-form-item label="报销项目" prop="project">
+				<el-input v-model="searchForm.project" placeholder="请输入报销项目" clearable>
+					<el-button icon="el-icon-search" slot="append" @click="openProgramPageForm"></el-button>
+				</el-input>
+			</el-form-item>
+			<el-form-item label="报销时间" prop="dates">
+				<el-date-picker
+					style=""
+					placement="bottom-start"
+					value-format="YYYY-MM-DD h:m:s"
+					v-model="searchForm.dates"
+					type="datetimerange"
+					range-separator="至"
+					start-placeholder="开始日期"
+					end-placeholder="结束日期">
+				</el-date-picker>
+			</el-form-item>
+			<el-form-item v-if="showHideItem" label="经办人" prop="handled">
+<!--				<UserSelect :limit='1' :modelValue="searchForm.handled" @update:modelValue='(value, label) => {searchForm.handled = value}'></UserSelect>-->
+				<el-input  v-model="searchForm.handled" placeholder="请选择经办人">
+					<template #suffix>
+						<el-button style="background-color: white;color: #1b1e25;border-color: white;" type="primary" slot="append" icon="el-icon-search" @click="openUserDia1">
+						</el-button>
+					</template>
+				</el-input>
+			</el-form-item>
+			<el-form-item v-if="showHideItem" label="报销人" prop="reimBy">
+<!--				<UserSelect :limit='1' :modelValue="searchForm.reimBy" @update:modelValue='(value, label) => {searchForm.reimBy = value}'></UserSelect>-->
+				<el-input  v-model="searchForm.reimBy" placeholder="请选择报销人">
+					<template #suffix>
+						<el-button style="background-color: white;color: #1b1e25;border-color: white;" type="primary" slot="append" icon="el-icon-search" @click="openUserDia2">
+						</el-button>
+					</template>
+				</el-input>
+			</el-form-item>
+			<el-form-item v-if="showHideItem" label="报销项" prop="reimbursementType">
+				<el-select v-model="searchForm.reimbursementType" placeholder="请选择" style="width:100%;" clearable>
+					<el-option
+						v-for="item in $dictUtils.getDictList('reimbursement_type')"
+						:key="item.value"
+						:label="item.label"
+						:value="item.value">
+					</el-option>
+				</el-select>
+			</el-form-item>
+			<el-form-item v-if="showHideItem" label="报销状态" prop="type">
+				<el-select v-model="searchForm.type" placeholder="请选择" style="width:100%;" clearable>
+					<el-option
+						v-for="item in $dictUtils.getDictList('status')"
+						:key="item.value"
+						:label="item.label"
+						:value="item.value">
+					</el-option>
+				</el-select>
+			</el-form-item>
+			<el-form-item v-if="showHideItem" label="报销部门" prop="department">
+				<SelectTree
+					ref="officeTree"
+					:props="{
+                value: 'id',             // ID字段名
+                label: 'name',         // 显示名称
+                children: 'children'    // 子级字段名
+              }"
+					:url="`/system-server/sys/office/treeData?type=2`"
+					:value="searchForm.department"
+					:clearable="true"
+					:accordion="true"
+					size="default"
+					@getValue="(value,label) => {searchForm.department=label}"/>
+			</el-form-item>
+			<el-form-item v-if="showHideItem" label="报销类型" prop="sourceType">
+				<el-select v-model="searchForm.sourceType" placeholder="请选择报销类型" clearable>
+					<el-option
+						v-for="item in $dictUtils.getDictList('cw_reimbursement_source_type')"
+						:key="item.value"
+						:label="item.label"
+						:value="item.value">
+					</el-option>
+				</el-select>
+			</el-form-item>
+			<el-form-item v-if="showHideItem" label="报销类别" prop="remiType">
+				<SelectTree
+					ref="areaTree"
+					:props="{
+                  value: 'id',             // ID字段名
+                  label: 'name',         // 显示名称
+                  children: 'children'    // 子级字段名
+                }"
+					url="/public-modules-server/reimbursementApproval/type/treeData1?type=last"
+					:value="searchForm.remiType"
+					:clearable="true"
+					:accordion="true"
+					size="default"
+					@getValue="(value, label) => {searchForm.remiType=label}"/>
+			</el-form-item>
+			<el-form-item v-if="showHideItem" label="报销金额" prop="amounts">
+				<InputNumber :disabled="false" :precision="num" :value="searchForm.amounts"
+							 @changefrom="(val)=>{searchForm.amounts[0]=val}"
+							 @changeto="(val)=>{searchForm.amounts[1]=val}"
+				></InputNumber>
+			</el-form-item>
+			<el-form-item v-if="showHideItem" label="报告号" prop="reportNumber">
+				<el-input v-model="searchForm.reportNumber" placeholder="请输入报告号" clearable></el-input>
+			</el-form-item>
+
+			<el-form-item>
+				<el-button type="default" @click="showHide" :icon="showHideIcon">{{showHideName}}</el-button>
+				<el-button type="primary" @click="refreshList()" icon="el-icon-search">查询</el-button>
+				<el-button @click="resetSearch()" icon="el-icon-refresh-right">重置</el-button>
+			</el-form-item>
+		</el-form>
+
+		<div class="jp-table top" style="">
+			<vxe-toolbar :refresh="{query: refreshList}" ref="toolbarRef" export custom>
+				<template #buttons>
+					<el-button v-if="hasPermission('businessOperation:info:add')" type="primary" icon="el-icon-plus" @click="add()">新建</el-button>
+					<el-button v-if="hasPermission('businessOperation:info:del')" type="danger"  icon="el-icon-delete" @click="del()" :disabled="$refs.infoTable && $refs.infoTable.getCheckboxRecords().length === 0" plain>删除</el-button>
+					<el-button type="warning" icon="el-icon-download" @click="exportInvoiceReimbursementFile()" plain>数电发票报销</el-button>
+				</template>
+				<template #tools>
+					<vxe-button
+						text
+						type="primary"
+						:title="searchVisible ? '收起检索' : '展开检索'"
+						icon="vxe-icon-search"
+						class="tool-btn"
+						@click="searchVisible = !searchVisible"
+					></vxe-button>
+				</template>
+			</vxe-toolbar>
+			<div style="height: calc(100% - 80px)">
+				<vxe-table
+					border="inner"
+					auto-resize
+					resizable
+					height="auto"
+					:loading="loading"
+					ref="infoTable"
+					show-header-overflow
+					show-overflow
+					highlight-hover-row
+					:menu-config="{}"
+					:sort-config="{remote:true}"
+					:export-config="{
+                    remote: true,
+                    filename: `会计报销数据${moment(new Date()).format('YYYY-MM-DD')}`,
+                    sheetName: `会计报销数据${moment(new Date()).format('YYYY-MM-DD')}`,
+                    exportMethod: exportMethod,
+                    types: ['xlsx'],
+                    modes: ['current', 'selected', 'all']
+                  }"
+					:data="dataList"
+					:checkbox-config="{}">
+					<vxe-column type="seq" width="60" title="序号"></vxe-column>
+					<vxe-column type="checkbox" width="60" ></vxe-column>
+					<vxe-column min-width="130" title="报销编号" field="no" align="center">
+						<template #default="scope">
+							<el-link  type="primary" :underline="false" v-if="hasPermission('businessOperation:info:view')" @click="view(scope.row.id)">{{scope.row.no}}</el-link>
+							<el-link  type="primary" :underline="false" v-else-if="hasPermission('businessOperation:info:view')" @click="view(scope.row.id)">{{scope.row.no}}</el-link>
+							<span v-else>{{scope.row.no}}</span>
+						</template>
+					</vxe-column>
+					<vxe-column width="130" title="报销项" field="reimbursementType" align="center">
+						<template #default="scope">
+							{{$dictUtils.getDictLabel('reimbursement_type', scope.row.reimbursementType, '')}}
+						</template>
+					</vxe-column>
+					<vxe-column min-width="130" title="报销类型" field="sourceType" align="center">
+						<template #default="scope">
+							{{$dictUtils.getDictLabel('cw_reimbursement_source_type', scope.row.sourceType, '')}}
+						</template>
+					</vxe-column>
+					<vxe-column min-width="130" title="报销类别" field="typeName" align="center"></vxe-column>
+					<vxe-column min-width="180" title="报销项目" field="projectName" align="center">
+						<template #default="scope">
+							<el-link  type="primary" :underline="false" v-if="hasPermission('businessOperation:info:view') && scope.row.projectId != undefined" @click="viewProject(scope.row.projectId)">{{scope.row.sourceType === '2' ? '' : scope.row.projectName}}</el-link>
+							<el-link  type="primary" :underline="false" v-else-if="hasPermission('businessOperation:info:view') && scope.row.projectId != undefined" @click="viewProject(scope.row.projectId)">{{scope.row.sourceType === '2' ? '' : scope.row.projectName}}</el-link>
+							<span v-else>{{scope.row.sourceType === '2' ? '' : scope.row.projectName}}</span>
+						</template>
+					</vxe-column>
+					<vxe-column min-width="180" title="报销合同" field="projectName" align="center">
+						<template #default="scope">
+							<el-link  type="primary" :underline="false" v-if="hasPermission('businessOperation:info:view') && scope.row.projectId != undefined" @click="viewContract(scope.row.projectId)">{{scope.row.sourceType === '2' ? scope.row.projectName : ''}}</el-link>
+							<span v-else>{{scope.row.sourceType === '2' ? scope.row.projectName : ''}}</span>
+						</template>
+					</vxe-column>
+					<vxe-column min-width="180" title="报告号" field="reportNumber" align="center"></vxe-column>
+					<vxe-column min-width="100" title="经办人" field="userName" align="center"></vxe-column>
+					<vxe-column min-width="100" title="报销人" field="name" align="center"></vxe-column>
+					<vxe-column min-width="100" title="报销部门" field="deptName" align="center"></vxe-column>
+					<vxe-column min-width="100" title="报销日期" field="reimDate" align="center"></vxe-column>
+					<vxe-column min-width="100" title="报销金额(元)" field="number" fixed="right" align="center"></vxe-column>
+					<vxe-column min-width="100" title="状态" fixed="right" align="center" field="type">
+						<template #default="scope">
+							<el-button @click="detail(scope.row)" :type="$dictUtils.getDictLabel('status_info', scope.row.type, '')" effect="dark" >{{$dictUtils.getDictLabel("status", scope.row.type, '未开始')}} </el-button>
+						</template>
+					</vxe-column>
+
+					<vxe-column title="操作" min-width="130px" fixed="right" align="center">
+						<template  #default="scope">
+							<div v-if="isAdmin">
+								<el-button text type="primary" @click="editForm(scope.row)">修改</el-button>
+								<el-button v-if=" (scope.row.type === '5')" text type="primary"  @click="del(scope.row.id)">删除</el-button>
+							</div>
+							<div v-else>
+								<el-button v-if="hasPermission('businessOperation:info:update') && scope.row.createId === $store.state.user.id && (scope.row.type === '1' || scope.row.type === '3' )" text type="primary"   @click="edit(scope.row)">修改</el-button>
+								<el-button v-if="hasPermission('businessOperation:info:update') && scope.row.createId === $store.state.user.id && (scope.row.type === '2')" text type="primary"  @click="reback(scope.row)">撤回</el-button>
+								<el-button v-if="hasPermission('businessOperation:info:del') && scope.row.createId === $store.state.user.id && (scope.row.type === '1')" text type="primary"  @click="del(scope.row.id)">删除</el-button>
+								<!--              审核-->
+								<el-button v-if="scope.row.type==='2' && checkIsAudit(scope.row)" text type="primary"  @click="examine(scope.row)">审核</el-button>
+								<!--              被驳回后当前申请人重新调整-->
+								<el-button v-if="scope.row.createId === $store.state.user.id&&scope.row.type === '4'" text type="primary"  @click="adjust(scope.row)">驳回调整</el-button>
+							</div>
+						</template>
+					</vxe-column>
+				</vxe-table>
+				<vxe-pager
+					background
+					:current-page="tablePage.currentPage"
+					:page-size="tablePage.pageSize"
+					:total="tablePage.total"
+					:page-sizes="[10, 20, 100, 1000, {label: '全量数据', value: 1000000}]"
+					:layouts="['PrevPage', 'JumpNumber', 'NextPage', 'FullJump', 'Sizes', 'Total']"
+					@page-change="currentChangeHandle">
+				</vxe-pager>
+
+				<ProjectChooseForm ref="projectChooseForm" @getProgram="getProgram"></ProjectChooseForm>
+				<InfoForm ref="infoForm" @refreshDataList="refreshList"></InfoForm>
+				<ProjectRecordsForm ref="projectRecordsForm" @refreshDataList="refreshList"></ProjectRecordsForm>
+				<ContractNameForm ref="contractNameForm"></ContractNameForm>
+				<InfoUpdateForm ref="infoUpdateForm" @refreshDataList="refreshList"></InfoUpdateForm>
+				<ProjectListForm ref="projectListForm"></ProjectListForm>
+				<user-select1 ref="userSelect1" @doSubmit="selectUser1"></user-select1>
+				<user-select2 ref="userSelect2" @doSubmit="selectUser2"></user-select2>
+			</div>
+		</div>
+	</div>
+</template>
+
+<script>
+	import ReimbursementApprovalService from '@/api/cw/reimbursementApproval/ReimbursementApprovalService'
+	import InputNumber from '@/views/workContract/InputNumber.vue'
+	import UserSelect from '@/components/userSelect'
+	import SelectTree from '@/components/treeSelect/treeSelect.vue'
+	import ProjectChooseForm from '../projectInfo/ProjectChooseForm'
+	import InfoForm from './InfoForm'
+	import taskService from '@/api/flowable/TaskService'
+	import processService from '@/api/flowable/ProcessService'
+	import pick from 'lodash.pick'
+	import ProjectRecordsForm from '../../projectRecords/ProjectRecordsForm'
+	import ContractNameForm from '../../workContract/ContractNameForm'
+	import userService from '@/api/sys/UserService'
+	import InfoUpdateForm from './InfoUpdateForm'
+	import ProjectListForm from './ProgramForm'
+	import UserSelect1 from '@/views/utils/UserTreeSelect'
+	import UserSelect2 from '@/views/utils/UserTreeSelect'
+	export default {
+		data () {
+			return {
+				searchVisible: true,
+				showHideItem: false,
+				showHideIcon: 'el-icon-arrow-down',
+				showHideName: '展示',
+				num: 0,
+				visable: false,
+				gridData: [],
+				searchForm: {
+					project: '',
+					dates: [],
+					handled: '',
+					reimBy: '',
+					type: [],
+					department: '',
+					remiType: '',
+					amounts: [],
+					reportNumber: '',
+					sourceType: '',
+					no:''
+				},
+				dataList: [],
+				tablePage: {
+					total: 0,
+					currentPage: 1,
+					pageSize: 10,
+					orders: []
+				},
+				loading: false,
+				isAdmin: false,
+				isKjsz:false,
+				isZj:false,
+				isZjbry:false,
+				isSs:false,
+				isDgsbxBmzr:false,
+			}
+		},
+		reimbursementApprovalService: null,
+		created () {
+			this.reimbursementApprovalService = new ReimbursementApprovalService()
+		},
+		components: {
+			InputNumber,
+			SelectTree,
+			ProjectChooseForm,
+			InfoForm,
+			ProjectRecordsForm,
+			UserSelect,
+			ContractNameForm,
+			InfoUpdateForm,
+			ProjectListForm,
+			UserSelect1,
+			UserSelect2,
+		},
+		mounted () {
+			this.$nextTick(() => {
+				//将表格和工具栏进行关联
+				const $table = this.$refs.infoTable;
+				const $toolbar = this.$refs.toolbarRef;
+				$table.connect($toolbar);
+			})
+			this.refreshList()
+		},
+		activated () {
+			this.refreshList()
+		},
+		computed: {
+			userName () {
+				return this.$store.state.user.name
+			},
+			user () {
+				this.create = this.$store.state.user.id
+				console.log('createId', this.$store.state.user)
+				return this.$store.state.user
+			}
+		},
+		methods: {
+			showHide () {
+				if (this.showHideItem === false) {
+					this.showHideItem = true
+					this.showHideIcon = 'el-icon-arrow-up'
+					this.showHideName = '隐藏'
+				} else {
+					this.showHideItem = false
+					this.showHideIcon = 'el-icon-arrow-down'
+					this.showHideName = '展示'
+				}
+			},
+			// 查询当前用户是否是管理员用户
+			checkIsAdmin () {
+				userService.is().then((data) => {
+					this.isAdmin = data
+				})
+			},
+
+			viewContract (id) {
+				this.$refs.contractNameForm.init('view', id)
+			},
+			// 新增
+			add () {
+				// 读取流程表单
+				let tabTitle = `发起流程【业务操作报销审批】`
+				let processTitle = `${this.userName} 在 ${this.moment(new Date()).format('YYYY-MM-DD HH:mm')} 发起了 [业务操作报销审批]`
+				taskService.getTaskDef({ procDefId: this.processDefinitionId,
+					status: 'startAndHold'}).then((data) => {
+					this.$router.push({
+						path: '/flowable/task/TaskForm',
+						query: {
+							...pick(data, 'formType', 'formUrl', 'procDefKey', 'taskDefKey', 'procInsId', 'procDefId', 'taskId', 'status', 'title'),
+							procDefId: this.processDefinitionId,
+							procDefKey: this.procDefKey,
+							status: 'startAndHold',
+							title: tabTitle,
+							formType: data.formType,
+							formUrl: data.formUrl,
+							formTitle: processTitle,
+							businessId: 'false',
+							isShow: false,
+							routePath: '/cw/szfbReimbursementApproval/info/InfoList'
+						}
+					})
+				})
+
+
+			},
+			// 修改
+			edit (row) {
+				// 暂存修改
+				let status = ''
+				if (row.type === '1') {
+					status = 'startAndHold'
+				}
+				// 撤回或者驳回修改
+				if (row.type === '3') {
+					status = 'startAndClose'
+				} else if (row.status === '4') {
+					status = 'reapplyFlag'
+				}
+				// 读取流程表单
+				let tabTitle = `发起流程【业务操作报销审批】`
+				let processTitle = `${this.userName} 在 ${this.moment(new Date()).format('YYYY-MM-DD HH:mm')} 发起了 [业务操作报销审批审批]`
+				taskService.getTaskDef({ procDefId: this.processDefinitionId,
+					businessId: row.id,
+					businessTable: 'cw_reimbursement_info',
+					status: status
+				}).then((data) => {
+					this.$router.push({
+						path: '/flowable/task/TaskForm',
+						query: {
+							...pick(data, 'formType', 'formUrl', 'procDefKey', 'taskDefKey', 'procInsId', 'procDefId', 'taskId', 'status', 'title'),
+							procDefId: this.processDefinitionId,
+							procDefKey: this.procDefKey,
+							status: status,
+							title: tabTitle,
+							formType: data.formType,
+							formUrl: data.formUrl,
+							formTitle: processTitle,
+							businessTable: 'cw_reimbursement_info',
+							businessId: row.id,
+							isShow: false,
+							routePath: '/cw/szfbReimbursementApproval/info/InfoList'
+						}
+					})
+				})
+
+			},
+			// 撤回
+			reback (row) {
+				this.$confirm(`确定撤回流程吗?`, '提示', {
+					confirmButtonText: '确定',
+					cancelButtonText: '取消',
+					type: 'warning'
+				}).then(() => {
+					processService.revokeProcIns(row.procInsId).then((data) => {
+						let param = {type: '3', id: row.id}
+						this.reimbursementApprovalService.updateStatusById(param)
+						this.$message.success('回退成功')
+						this.refreshList()
+					})
+				})
+			},
+			// 查看
+			view (id) {
+				this.$refs.infoForm.init('view', id)
+			},
+			editForm (row) {
+				this.$refs.infoUpdateForm.init('edit', row.id)
+			},
+			// 查看报销项目
+			viewProject (id) {
+				this.$refs.projectListForm.init(id)
+			},
+			// 获取数据列表
+			refreshList () {
+				this.loading = true
+				this.reimbursementApprovalService.list2({
+					'current': this.tablePage.currentPage,
+					'size': this.tablePage.pageSize,
+					'orders': this.tablePage.orders,
+					...this.searchForm
+				}).then((data) => {
+					this.dataList = data.records
+					this.tablePage.total = data.total
+					this.loading = false
+				})
+				this.checkIsAdmin()
+				processService.getByName('苏州-业务操作报销').then((data) => {
+					if (!this.commonJS.isEmpty(data.id)) {
+						this.processDefinitionId = data.id
+						this.procDefKey = data.key
+					}
+				})
+			},
+			// 删除
+			del (id) {
+				let ids = id || this.$refs.infoTable.getCheckboxRecords().map(item => {
+					return item.id
+				}).join(',')
+				this.$confirm(`确定删除所选项吗?`, '提示', {
+					confirmButtonText: '确定',
+					cancelButtonText: '取消',
+					type: 'warning'
+				}).then(() => {
+					this.loading = true
+					this.reimbursementApprovalService.remove(ids).then((data) => {
+						this.$message.success(data)
+						this.refreshList()
+						this.loading = false
+					})
+				})
+			},
+			resetSearch () {
+				this.$refs.searchForm.resetFields()
+				this.refreshList()
+			},
+			// 流程详情
+			detail (row) {
+				if (!this.commonJS.isEmpty(row.type) && row.type !== '1') {
+					taskService.getTaskDef({
+						procInsId: row.procInsId,
+						procDefId: this.processDefinitionId
+					}).then((data) => {
+						this.$router.push({
+							path: '/flowable/task/TaskFormDetail',
+							query: {
+								...pick(data, 'formType', 'formUrl', 'procDefKey', 'taskDefKey', 'procInsId', 'procDefId', 'taskId', 'status', 'title'),
+								isShow: 'false',
+								readOnly: true,
+								title: '流程详情',
+								formTitle: '流程详情',
+								businessId: row.id,
+								status: 'reback'
+							}
+						})
+					})
+				}
+			},
+			openProgramPageForm (rowIndex) {
+				// 打开单选组件
+				this.$refs.projectChooseForm.init(null, false)
+			},
+			getProgram (rows) {
+				// rows[0].name // 项目名称、开票详情
+				// rows[0].contractName // 合同名称
+				// rows[0].no // 项目编号
+				// rows[0].clientName // 客户名称
+				// rows[0].client // 客户id
+				// rows[0].id // 项目id
+				// rows[0].location // 项目所在地
+				this.searchForm.project = rows.projectName
+			},
+			// 下载文档
+			exportFile () {
+				this.loading = true
+				this.reimbursementApprovalService.exportFile({
+					'itemType': '1',
+					...this.searchForm
+				}).then((res) => {
+					// 将二进制流文件写入excel表,以下为重要步骤
+					this.$utils.downloadExcel(res, '会计-报销审批列表信息')
+					this.loading = false
+				}).catch(function (err) {
+					this.loading = false
+					if (err.response) {
+						console.log(err.response)
+					}
+				})
+			},
+			// 下载文档
+			exportInvoiceReimbursementFile () {
+				this.loading = true
+				this.reimbursementApprovalService.exportInvoiceReimbursementFile({
+					'itemType': '1',
+					...this.searchForm
+				}).then((res) => {
+					// 将二进制流文件写入excel表,以下为重要步骤
+					this.$utils.downloadExcel(res, '会计-报销数电发票报销列表')
+					this.loading = false
+				}).catch(function (err) {
+					this.loading = false
+					if (err.response) {
+						console.log(err.response)
+					}
+				})
+			},
+			// 当前页
+			currentChangeHandle ({ currentPage, pageSize }) {
+				this.tablePage.currentPage = currentPage
+				this.tablePage.pageSize = pageSize
+				this.refreshList()
+			},
+			// 自定义服务端导出
+			exportMethod ({ options }) {
+				// 传给服务端的参数
+				const params = {
+					'current': this.tablePage.currentPage,
+					'size': this.tablePage.pageSize,
+					'orders': this.tablePage.orders,
+					...this.searchForm,
+					filename: options.filename,
+					sheetName: options.sheetName,
+					isHeader: options.isHeader,
+					original: options.original,
+					mode: options.mode,
+					selectIds: options.mode === 'selected' ? options.map(item => item.id) : [],
+					exportFields: options.columns.map(column => column.property)
+				}
+				return this.reimbursementApprovalService.exportFile(params).then((res) => {
+					// 将二进制流文件写入excel表,以下为重要步骤
+					this.$utils.downloadExcel(res, options.filename)
+				}).catch(function (err) {
+					if (err.response) {
+						console.log(err.response)
+					}
+				})
+			},
+			// 驳回后调整
+			adjust (row) {
+				console.log('row', row)
+				this.reimbursementApprovalService.findById(row.id).then((data) => {
+					console.log('data', data)
+					if (data.type !== '4') { // status的值不等于“驳回”,就弹出提示
+						this.$message.error('数据已发生改变或不存在,请刷新数据')
+						this.refreshList()
+					} else {
+						this.todo(row)
+					}
+				})
+			},
+			// 审核
+			examine (row) {
+				this.reimbursementApprovalService.findById(row.id).then((data) => {
+					if (data.type !== '2') { // status的值不等于“审核中”,就弹出提示
+						this.$message.error('数据已发生改变或不存在,请刷新数据')
+						this.refreshList()
+					} else {
+						this.todo(row)
+					}
+				})
+			},
+			// 审核或重新调整跳转
+			todo (row) {
+				console.log('row.taskId', row.taskId)
+				let cUser = false
+				taskService.getTaskDefInfo({
+					taskId: row.taskId
+				}).then((data) => {
+					this.$router.push({
+						path: '/flowable/task/TaskForm',
+						query: {
+							...pick(data, 'formType', 'formUrl', 'procDefKey', 'taskDefKey', 'procInsId', 'procDefId', 'taskId', 'status', 'title', 'businessId'),
+							isShow: false,
+							formReadOnly: true,
+							formTitle: `${data.taskName}`,
+							cUser: cUser,
+							title: `审批【${data.taskName || ''}】`,
+							routePath: '/cw/szfbReimbursementApproval/info/InfoList'   // 数据处理后需要跳转的页面路径
+						}
+					})
+				})
+			},
+			// 查询当前登录人是否是数据的审核人
+			checkIsAudit (row) {
+				let loginUserId = this.$store.state.user.id  // 获取当前登录用户id
+				if (this.commonJS.isNotEmpty(row.auditUserIds)) {
+					for (const userId of row.auditUserIds) {
+						if (userId === loginUserId) {  // 当数据的审核人中包含当前登录人id时,返回true
+							return true
+						}
+					}
+				}
+				return false
+			},
+			openUserDia1(){
+				this.$refs.userSelect1.init()
+			},
+			selectUser1(user){
+				console.log(user[0].name)
+				this.searchForm.handled=user[0].name
+			},
+			openUserDia2(){
+				this.$refs.userSelect2.init()
+			},
+			selectUser2(user){
+				console.log(user[0].name)
+				this.searchForm.reimBy=user[0].name
+			},
+		}
+	}
+</script>

Failā izmaiņas netiks attēlotas, jo tās ir par lielu
+ 2541 - 0
src/views/cw/szfbReimbursementApproval/info/InfoUpdateForm.vue


+ 84 - 0
src/views/cw/szfbReimbursementApproval/info/ProgramForm.vue

@@ -0,0 +1,84 @@
+<template xmlns:v-slot="http://www.w3.org/1999/XSL/Transform">
+  <div>
+    <el-dialog
+      :title="title"
+      :close-on-click-modal="false"
+	  draggable
+      width="900px"
+      @close="close"
+      append-to-body
+      v-model="visible">
+      <vxe-table
+        border="inner"
+        show-overflow
+        show-footer
+        ref="baseTable"
+        class="vxe-table-element"
+        :data="dataList"
+      >
+        <vxe-table-column type="seq" width="50" title="序号" align="center"></vxe-table-column>
+        <vxe-table-column min-width="300px" field="projectName" align="left" title="项目名称">
+          <template #default="scope">
+            <el-link type="primary" :underline="false" @click="openProjectForm(scope.row.id)" >{{scope.row.projectName}}</el-link>
+          </template>
+        </vxe-table-column>
+        <vxe-table-column width="250px" field="projectNumber" align="center" title="项目编号"></vxe-table-column>
+      </vxe-table>
+		<template #footer>
+			<span class="dialog-footer">
+				<el-button @click="close()" icon="el-icon-circle-close">关闭</el-button>
+			</span>
+		</template>
+    </el-dialog>
+    <ProjectForm ref="projectForm"></ProjectForm>
+  </div>
+</template>
+
+<script>
+  import ProjectForm from '@/views/cw/projectRecords/ProjectRecordsForm'
+  import ReimbursementApprovalService from '@/api/cw/reimbursementApproval/ReimbursementApprovalService'
+  export default {
+    data () {
+      return {
+        title: '',
+        method: '',
+        visible: false,
+        loading: false,
+        dataList: ''
+      }
+    },
+    reimbursementApprovalService: null,
+    created () {
+      this.reimbursementApprovalService = new ReimbursementApprovalService()
+    },
+    components: {
+      ProjectForm
+    },
+    methods: {
+      init (id) {
+        this.method = 'view'
+        this.title = '查看项目信息'
+        this.visible = true
+        this.dataList = []
+        if (this.commonJS.isNotEmpty(id)) {
+          this.list(id)
+        }
+      },
+      async list (ids) {
+        this.loading = true
+        let resp = await this.reimbursementApprovalService.queryByProIds(ids)
+        if (resp) {
+          this.dataList = resp
+        }
+        this.loading = false
+      },
+      openProjectForm (id) {
+        this.$refs.projectForm.init('view', id)
+      },
+      close () {
+        this.dataList = []
+        this.visible = false
+      }
+    }
+  }
+</script>

Failā izmaiņas netiks attēlotas, jo tās ir par lielu
+ 2415 - 0
src/views/cw/szfbReimbursementApproval/info/ReimbursementForm.vue


+ 192 - 0
src/views/cw/szfbReimbursementApproval/info/ReportNoChooseRadio.vue

@@ -0,0 +1,192 @@
+<template>
+  <div>
+    <el-dialog
+      :title="title"
+      :close-on-click-modal="false"
+	  draggable
+      width="1400px"
+      append-to-body
+      height="500px"
+      @close="close"
+      @keyup.enter.native="getWorkClient"
+      v-model="visibleChoose">
+      <div style="height: calc(100%);">
+<!--        <el-form :inline="true" class="query-form" ref="searchForm" :model="searchForm" @submit.native.prevent>-->
+<!--          &lt;!&ndash; 搜索框&ndash;&gt;-->
+<!--          <el-form-item label="客户名称" prop="name">-->
+<!--            <el-input  v-model="searchForm.name" placeholder="客户名称" clearable></el-input>-->
+<!--          </el-form-item>-->
+<!--          <el-form-item label="客户编号" prop="no">-->
+<!--            <el-input v-model="searchForm.no" placeholder="客户编号" clearable></el-input>-->
+<!--          </el-form-item>-->
+<!--          <el-form-item label="客户类型" prop="type">-->
+<!--            <el-select v-model="searchForm.type" placeholder="请选择" style="width:100%;"clearable>-->
+<!--              <el-option-->
+<!--                v-for="item in $dictUtils.getDictList('cw_work_client_type')"-->
+<!--                :key="item.value"-->
+<!--                :label="item.label"-->
+<!--                :value="item.value">-->
+<!--              </el-option>-->
+<!--            </el-select>-->
+<!--          </el-form-item>-->
+<!--          <el-form-item label="所属行业" prop="industry">-->
+<!--            <el-select v-model="searchForm.industry" placeholder="请选择" style="width:100%;"clearable>-->
+<!--              <el-option-->
+<!--                v-for="item in $dictUtils.getDictList('cw_work_client_industry')"-->
+<!--                :key="item.value"-->
+<!--                :label="item.label"-->
+<!--                :value="item.value">-->
+<!--              </el-option>-->
+<!--            </el-select>-->
+<!--          </el-form-item>-->
+
+
+<!--          <el-form-item>-->
+<!--            <el-button type="primary" @click="list()" icon="el-icon-search">查询</el-button>-->
+<!--            <el-button @click="resetSearch()" icon="el-icon-refresh-right">重置</el-button>-->
+<!--          </el-form-item>-->
+<!--        </el-form>-->
+
+        <vxe-table
+          border="inner"
+          auto-resize
+          resizable
+          height="400px"
+          :loading="loading"
+          ref="clientTable"
+          show-header-overflow
+          show-overflow
+          highlight-hover-row
+          :menu-config="{}"
+          :print-config="{}"
+          :sort-config="{remote:true}"
+          :data="dataList"
+          :row-config="{isCurrent: true}"
+          :radio-config="{trigger: 'row'}">
+          <vxe-column type="seq" width="40"></vxe-column>
+          <vxe-column type="radio" width="40px"></vxe-column>
+          <vxe-column width="" title="报告号" align="center" field="reportNo" ></vxe-column>
+        </vxe-table>
+        <vxe-pager
+          background
+          :current-page="tablePage.currentPage"
+          :page-size="tablePage.pageSize"
+          :total="tablePage.total"
+          :page-sizes="[10, 20, 100, 1000, {label: '全量数据', value: 1000000}]"
+          :layouts="['PrevPage', 'JumpNumber', 'NextPage', 'FullJump', 'Sizes', 'Total']"
+          @page-change="currentChangeHandle">
+        </vxe-pager>
+      </div>
+		<template #footer>
+			<span class="dialog-footer">
+			  <el-button @click="close()" icon="el-icon-circle-close">关闭</el-button>
+			  <el-button type="primary" v-if="method != 'view'" @click="getWorkClient()" icon="el-icon-circle-check" v-noMoreClick>确定</el-button>
+			</span>
+		</template>
+    </el-dialog>
+  </div>
+</template>
+
+<script>
+  // import WorkClientService from '@/api/cw/workClientInfo/WorkClientService'
+  import ReimbursementApprovalService from '@/api/cw/reimbursementApproval/ReimbursementApprovalService'
+  export default {
+    data () {
+      return {
+        title: '',
+        method: '',
+        visibleChoose: false,
+        loading: false,
+        tablePage: {
+          total: 0,
+          currentPage: 1,
+          pageSize: 10,
+          orders: []
+        },
+        dataList: [],
+        searchForm: {
+          projectName: '',
+          name: '',
+          no: '',
+          type: '',
+          industry: ''
+        },
+        projectId: ''
+      }
+    },
+    // workClientService: null,
+    reimbursementApprovalService: null,
+    created () {
+      // this.workClientService = new WorkClientService()
+      this.reimbursementApprovalService = new ReimbursementApprovalService()
+    },
+    components: {
+    },
+    methods: {
+      init (deputy) {
+        this.title = '报告号选择'
+        this.visibleChoose = true
+        this.projectId = deputy
+        this.list()
+      },
+      // 表单提交
+      getWorkClient () {
+        let row = this.$refs.clientTable.getRadioRecord()
+        if (this.commonJS.isEmpty(row)) {
+          this.$message.error('请至少选择一条数据')
+        } else {
+          this.close()
+          this.$emit('getWorkClientRadioChoose', row)
+        }
+      },
+      list () {
+        this.dataList = []
+        this.loading = true
+        this.searchForm.status = '5'
+        this.searchForm.projectId = this.projectId
+        this.reimbursementApprovalService.reportNoList({
+          'current': this.tablePage.currentPage,
+          'size': this.tablePage.pageSize,
+          'orders': this.tablePage.orders,
+          ...this.searchForm
+        }).then((data) => {
+          this.dataList = data.records
+          this.tablePage.total = data.total
+          this.loading = false
+        })
+        // this.workClientService.reportNoList({
+        //   'current': 1,
+        //   'size': -1,
+        //   'orders': this.tablePage.orders,
+        //   ...this.searchForm
+        // }).then((data) => {
+        //   this.dataList = data.records
+        //   this.tablePage.total = data.total
+        //   this.loading = false
+        // })
+      },
+      // 当前页
+      currentChangeHandle ({currentPage, pageSize}) {
+        this.tablePage.currentPage = currentPage
+        this.tablePage.pageSize = pageSize
+        this.list()
+      },
+      resetSearch () {
+        // this.$refs.searchForm.resetFields()
+        this.list()
+      },
+      close () {
+        // this.$refs.searchForm.resetFields()
+        this.visibleChoose = false
+      }
+    }
+  }
+</script>
+<style scoped>
+  /deep/ .el-dialog__body {
+    padding-top: 0;
+  }
+  /deep/ .el-form-item--mini.el-form-item, .el-form-item--small.el-form-item {
+    margin-bottom: 0px;
+  }
+</style>

+ 224 - 0
src/views/cw/szfbReimbursementApproval/projectInfo/ProjectChooseForm.vue

@@ -0,0 +1,224 @@
+<template>
+  <div>
+    <el-dialog
+      title="选择项目"
+      :close-on-click-modal="false"
+	  draggable
+      width="1100px"
+      height="500px"
+      @close="close"
+      append-to-body
+      v-model="visible">
+      <div style="height: calc(100% - 80px);">
+        <el-form :inline="true" class="query-form" ref="searchForm" :model="searchForm" @submit.native.prevent>
+          <!-- 搜索框-->
+          <el-form-item label="项目名称" prop="projectName">
+            <el-input v-model="searchForm.projectName" placeholder="请输入项目名称" clearable></el-input>
+          </el-form-item>
+          <el-form-item label="项目编号" prop="projectNumber">
+            <el-input v-model="searchForm.projectNumber" placeholder="请输入项目编号" clearable></el-input>
+          </el-form-item>
+          <el-form-item label="项目经理" prop="projectMasterName">
+            <el-input v-model="searchForm.projectMasterName" placeholder="请输入项目经理" clearable></el-input>
+          </el-form-item>
+          <el-form-item label="创建时间" prop="createDates">
+            <el-date-picker
+              placement="bottom-start"
+              value-format="YYYY-MM-DD h:m:s"
+              v-model="searchForm.createDates"
+              type="datetimerange"
+              range-separator="至"
+              start-placeholder="开始日期"
+              end-placeholder="结束日期">
+            </el-date-picker>
+          </el-form-item>
+
+          <el-form-item>
+            <el-button type="primary" @click="list()" icon="el-icon-search">查询</el-button>
+            <el-button @click="resetSearch()" icon="el-icon-refresh-right">重置</el-button>
+          </el-form-item>
+        </el-form>
+
+        <vxe-table
+          border="inner"
+          auto-resize
+          resizable
+          height="400px"
+          :loading="loading"
+          ref="projectTable"
+          show-header-overflow
+          show-overflow
+          highlight-hover-row
+          :menu-config="{}"
+          :print-config="{}"
+          :sort-config="{remote:true}"
+          :data="dataList"
+          :row-config="{isCurrent: true}"
+          :radio-config="{trigger: 'row'}"
+        >
+          <vxe-column type="seq" width="60" title="序号"></vxe-column>
+          <vxe-column type="radio" width="40px"></vxe-column>
+          <vxe-column min-width="230" align="center" title="项目名称" field="projectName"></vxe-column>
+          <vxe-column min-width="160" align="center" title="项目编号" field="projectNumber"></vxe-column>
+          <vxe-column min-width="160" align="center" title="项目经理" field="projectMasterName"></vxe-column>
+          <vxe-column min-width="160" align="center" title="创建人" field="createBy.name"></vxe-column>
+          <vxe-column min-width="160" align="center" title="创建时间" field="createDate"></vxe-column>
+
+        </vxe-table>
+        <vxe-pager
+          background
+          :current-page="tablePage.currentPage"
+          :page-size="tablePage.pageSize"
+          :total="tablePage.total"
+          :page-sizes="[10, 20, 100, 1000, {label: '全量数据', value: 1000000}]"
+          :layouts="['PrevPage', 'JumpNumber', 'NextPage', 'FullJump', 'Sizes', 'Total']"
+          @page-change="currentChangeHandle">
+        </vxe-pager>
+      </div>
+      <span slot="footer" class="dialog-footer">
+      <el-button @click="close()" icon="el-icon-circle-close">关闭</el-button>
+      <el-button type="primary" v-if="method != 'view'" @click="getProgram()" icon="el-icon-circle-check" v-noMoreClick>确定</el-button>
+    </span>
+    </el-dialog>
+  </div>
+</template>
+
+<script>
+  import ProgramProjectListInfoService from '@/api/program/ProgramProjectListInfoService'
+  import projectRecordsService from '@/api/cw/projectRecords/ProjectRecordsService'
+  export default {
+    data () {
+      return {
+        title: '项目选择',
+        method: '',
+        visible: false,
+        loading: false,
+        tablePage: {
+          total: 0,
+          currentPage: 1,
+          pageSize: 10,
+          orders: []
+        },
+        dataList: [],
+        searchForm: {
+          projectMasterName: '',
+          projectNumber: '',
+          projectName: '',
+          createDates: [],
+          status: ''
+        },
+        checkType: '',
+        detail: '',
+        isShow: true,
+        num: true // num为true是多选,false是单选
+      }
+    },
+    programProjectListInfoService: null,
+    created () {
+      this.programProjectListInfoService = new ProgramProjectListInfoService()
+    },
+    components: {
+    },
+    methods: {
+      init (isShow, num) {
+        if (this.commonJS.isEmpty(isShow)) {
+          this.isShow = true
+          this.checkType = '1'
+        } else {
+          if (isShow === false || isShow === 'false') {
+            this.isShow = false
+            this.checkType = '1'
+            this.$message({message: '第一条为项目后面新增只能选择项目', type: 'warning', customClass: 'messageZindex'})
+          } else if (isShow === '1') {
+            this.isShow = false
+            this.checkType = '1'
+          } else {
+            this.isShow = false
+            this.checkType = '2'
+          }
+        }
+        if (this.commonJS.isEmpty(num) || num === true) {
+          this.num = true // num为true是多选,false是单选
+        } else {
+          this.num = false
+        }
+        this.visible = true
+        this.list()
+      },
+      // 表单提交
+      getProgram () {
+        let row = this.$refs.projectTable.getRadioRecord()
+        if (this.commonJS.isEmpty(row)) {
+          this.$message.error('请选择一条数据')
+          return
+        }
+        this.close()
+        this.$emit('getProgram', row)
+        // let rows
+        // if (this.checkType === '1') {
+        //   if (this.commonJS.isEmpty(this.$refs.programTable.getCheckboxRecords())) {
+        //     this.$message.error('请至少选择一条数据')
+        //     return
+        //   }
+        //   if (this.num === false) {
+        //     if (this.$refs.programTable.getCheckboxRecords().length > 1) {
+        //       this.$message.error('最多选择一条数据')
+        //       return
+        //     }
+        //   }
+        //   rows = this.$refs.programTable.getCheckboxRecords()
+        // } else {
+        //   if (this.commonJS.isEmpty(this.detail)) {
+        //     this.$message.error('请填写开票详情')
+        //     return
+        //   }
+        //   rows = [{name: this.detail}]
+        // }
+        // this.close()
+        // this.$emit('getProgram', rows)
+      },
+      list () {
+        this.loading = true
+        projectRecordsService.list({
+          'current': this.tablePage.currentPage,
+          'size': this.tablePage.pageSize,
+          'orders': this.tablePage.orders,
+          ...this.searchForm
+        }).then((data) => {
+          this.dataList = data.records
+          this.tablePage.total = data.total
+          this.loading = false
+        })
+        // this.programProjectListInfoService.list({
+        //   'current': this.tablePage.currentPage,
+        //   'size': this.tablePage.pageSize,
+        //   'orders': this.tablePage.orders,
+        //   ...this.searchForm
+        // }).then((data) => {
+        //   this.dataList = data.records
+        //   this.tablePage.total = data.total
+        //   this.loading = false
+        // })
+      },
+      // 当前页
+      currentChangeHandle ({currentPage, pageSize}) {
+        this.tablePage.currentPage = currentPage
+        this.tablePage.pageSize = pageSize
+        this.list()
+      },
+      resetSearch () {
+        this.$refs.searchForm.resetFields()
+        this.list()
+      },
+      close () {
+        this.detail = ''
+        this.visible = false
+      }
+    }
+  }
+</script>
+<style>
+  .messageZindex {
+    z-index:9999 !important;
+  }
+</style>

+ 182 - 0
src/views/cw/szfbReimbursementApproval/type/TypeForm.vue

@@ -0,0 +1,182 @@
+<template>
+  <div>
+    <el-dialog
+      :title="title"
+      :close-on-click-modal="false"
+	  draggable
+      width="500px"
+      @close="close"
+      append-to-body
+      @keyup.enter.native="doSubmit"
+      v-model="visible">
+      <el-form :model="inputForm" ref="inputForm" v-loading="loading" :class="method==='view'?'readonly':''"  :disabled="method==='view'"
+               label-width="100px" @submit.native.prevent>
+        <el-row  :gutter="15">
+          <el-col :span="21">
+            <el-form-item label="上级节点" prop="parentId">
+              <SelectTree
+                ref="areaTree"
+                :props="{
+                      value: 'id',             // ID字段名
+                      label: 'name',         // 显示名称
+                      children: 'children'    // 子级字段名
+                    }"
+                url="/public-modules-server/reimbursementApproval/type/treeData?type=3"
+                :value="inputForm.parentId"
+                :clearable="true"
+                :accordion="true"
+                @getValue="(value) => {inputForm.parentId=value}"/>
+            </el-form-item>
+          </el-col>
+          <el-col :span="21">
+            <el-form-item label="报销内容名称" prop="name"
+                          :rules="[
+                          {required: true, message:'报销内容名称不能为空', trigger:'blur'}
+                 ]">
+              <el-input v-model="inputForm.name" placeholder="请填写报销内容名称"></el-input>
+            </el-form-item>
+          </el-col>
+          <el-col :span="21">
+            <el-form-item label="关联部门" prop="officeIdList">
+              <el-select v-model="inputForm.officeIdList" style="width:100%" multiple placeholder="请选择">
+                <el-option
+                  v-for="item in officeList"
+                  :key="item.id"
+                  :label="item.name"
+                  :value="item.id">
+                </el-option>
+              </el-select>
+            </el-form-item>
+          </el-col>
+          <el-col :span="21">
+            <el-form-item label="序号" prop="no">
+              <el-input v-model="inputForm.no" :disabled="true" show-word-limit></el-input>
+            </el-form-item>
+          </el-col>
+        </el-row>
+      </el-form>
+		<template #footer>
+			<span class="dialog-footer">
+			  <el-button @click="close()" icon="el-icon-circle-close">关闭</el-button>
+			  <el-button type="primary" v-if="method != 'view'" @click="doSubmit()" icon="el-icon-circle-check" v-noMoreClick>确定</el-button>
+			</span>
+		</template>
+
+    </el-dialog>
+  </div>
+</template>
+
+<script>
+  // import ReimbursementTypeService from '@/api/sys/ReimbursementTypeService'
+  import ReimbursementApprovalTypeService from '@/api/cw/reimbursementApproval/ReimbursementApprovalTypeService'
+  import SelectTree from '@/components/treeSelect/treeSelect.vue'
+  import officeService from '@/api/sys/officeService'
+  export default {
+    data () {
+      return {
+        disabled: false,
+        title: '',
+        method: '',
+        visible: false,
+        loading: false,
+        officeList: [],
+        inputForm: {
+          businessType: '',
+          name: '',
+          no: '',
+          parentId: '',
+          officeIdList: []
+        }
+      }
+    },
+    // reimbursementTypeService: null,
+    reimbursementApprovalTypeService: null,
+    created () {
+      // this.reimbursementTypeService = new ReimbursementTypeService()
+      this.reimbursementApprovalTypeService = new ReimbursementApprovalTypeService()
+    },
+    components: {
+      SelectTree
+    },
+    methods: {
+      init (method, id, businessType) {
+        this.method = method
+        this.inputForm = {
+          businessType: '',
+          name: '',
+          no: '',
+          parentId: ''
+        }
+        if (method === 'add') {
+          this.title = `新建报销类型`
+        } else if (method === 'edit') {
+          this.inputForm.id = id
+          this.title = '修改报销类型'
+        } else if (method === 'view') {
+          this.inputForm.id = id
+          this.title = '查看报销类型'
+        } else if (method === 'addChild') {
+          this.title = '添加下级结构'
+          this.inputForm.parentId = id
+          this.inputForm.businessType = businessType
+        }
+        this.visible = true
+        this.loading = false
+        this.$nextTick(() => {
+          if (method === 'edit' || method === 'view') { // 修改或者查看
+            this.loading = true
+            this.$refs.inputForm.resetFields()
+            this.reimbursementApprovalTypeService.findById(this.inputForm.id).then((data) => {
+              this.inputForm = this.recover(this.inputForm, data)
+              this.inputForm = JSON.parse(JSON.stringify(this.inputForm))
+              this.loading = false
+            })
+            // this.reimbursementTypeService.findById(this.inputForm.id).then((data) => {
+            //   this.inputForm = this.recover(this.inputForm, data)
+            //   this.inputForm = JSON.parse(JSON.stringify(this.inputForm))
+            //   this.loading = false
+            // })
+          }
+          officeService.getSecondLevelData().then((data) => {
+            this.officeList = data
+          })
+        })
+      },
+      // 表单提交
+      doSubmit () {
+        this.$refs['inputForm'].validate((valid) => {
+          if (valid) {
+            this.loading = true
+            this.reimbursementApprovalTypeService.save(this.inputForm).then((data) => {
+              if (data === false) {
+                this.close()
+                this.$message.error('报销内容名重复,请重新填写')
+                this.$emit('refreshDataList')
+                this.loading = false
+              } else {
+                this.close()
+                this.$message.success(data)
+                this.$emit('refreshDataList')
+                this.loading = false
+              }
+            }).catch(() => {
+              this.loading = false
+            })
+            // this.reimbursementTypeService.save(this.inputForm).then((data) => {
+            //   this.close()
+            //   this.$message.success(data)
+            //   this.$emit('refreshDataList')
+            //   this.loading = false
+            // }).catch(() => {
+            //   this.loading = false
+            // })
+          }
+        })
+      },
+      close () {
+        this.$refs.inputForm.resetFields()
+        this.visible = false
+      }
+    }
+  }
+</script>

+ 158 - 0
src/views/cw/szfbReimbursementApproval/type/TypeList.vue

@@ -0,0 +1,158 @@
+<template>
+  <div class="page">
+    <el-form :inline="true" class="query-form" ref="searchForm" :model="searchForm" @keyup.enter.native="refreshList()" @submit.native.prevent>
+      <!-- 搜索框-->
+      <el-form-item label="报销内容名称" prop="name">
+        <el-input v-model="searchForm.name" placeholder="请输入报销内容名称" clearable></el-input>
+      </el-form-item>
+<!--      <el-form-item label="序号" prop="sort">-->
+<!--        <el-input size="small" v-model="searchForm.sort" placeholder="请输入序号" clearable></el-input>-->
+<!--      </el-form-item>-->
+
+      <el-form-item>
+        <el-button type="primary" @click="refreshList()" icon="el-icon-search">查询</el-button>
+        <el-button @click="resetSearch()"  icon="el-icon-refresh-right">重置</el-button>
+      </el-form-item>
+    </el-form>
+
+    <div class="jp-table top" style="">
+      <vxe-toolbar :refresh="{query: refreshList}" custom>
+        <template #buttons>
+          <el-button v-if="hasPermission('program:configuration:type:add')" type="primary"  icon="el-icon-plus" @click="add()">新建</el-button>
+<!--          <el-button v-if="hasPermission('program:configuration:type:del')" type="danger"   size="small" icon="el-icon-delete" @click="del()" :disabled="$refs.typeTable && $refs.typeTable.getCheckboxRecords().length === 0" plain>删除</el-button>-->
+        </template>
+      </vxe-toolbar>
+      <div style="height: calc(100% - 50px)">
+        <vxe-table
+          border="inner"
+          auto-resize
+          resizable
+          height="auto"
+          :loading="loading"
+          size="small"
+          ref="typeTable"
+          show-header-overflow
+          show-overflow
+          highlight-hover-row
+          :menu-config="{}"
+          :sort-config="{remote:true}"
+          :data="dataList"
+          :tree-config="{transform: true, rowField: 'id', parentField: 'parentId',expandAll: true}"
+          :checkbox-config="{}">
+          <vxe-column type="seq" width="60" title="序号"></vxe-column>
+          <vxe-column type="checkbox" width="60" ></vxe-column>
+          <vxe-column min-width="200" title="报销内容名称" field="name" align="left" tree-node></vxe-column>
+          <vxe-column min-width="200" title="关联部门" field="relateDepartment" align="center"></vxe-column>
+          <vxe-column min-width="100" title="序号" field="sort" align="center"></vxe-column>
+
+          <vxe-column title="操作" width="230px" fixed="right" align="center">
+            <template  #default="scope">
+              <el-button v-if="hasPermission('reimbursement:type:edit')&&(scope.row.level === '1' || scope.row.level === '2')" text type="primary" @click="addChild(scope.row.id,scope.row.businessType)">添加下级结构</el-button>
+              <el-button v-if="hasPermission('reimbursement:type:edit')" text type="primary" @click="edit(scope.row.id)">修改</el-button>
+              <el-button v-if="hasPermission('reimbursement:type:remove')" text type="primary" @click="del(scope.row.id)">删除</el-button>
+            </template>
+          </vxe-column>
+        </vxe-table>
+
+      </div>
+    </div>
+    <TypeForm  ref="typeForm" @refreshDataList="refreshList"></TypeForm>
+  </div>
+</template>
+
+<script>
+  // import ReimbursementTypeService from '@/api/sys/ReimbursementTypeService'
+  import ReimbursementApprovalTypeService from '@/api/cw/reimbursementApproval/ReimbursementApprovalTypeService'
+  import TypeForm from './TypeForm'
+  export default {
+    data () {
+      return {
+        searchForm: {
+          name: ''
+        },
+        dataList: [],
+        tablePage: {
+          total: 0,
+          currentPage: 1,
+          pageSize: 10,
+          orders: []
+        },
+        loading: false
+      }
+    },
+    // reimbursementTypeService: null,
+    reimbursementApprovalTypeService: null,
+    created () {
+      // this.reimbursementTypeService = new ReimbursementTypeService()
+      this.reimbursementApprovalTypeService = new ReimbursementApprovalTypeService()
+    },
+    components: {
+      TypeForm
+    },
+    mounted () {
+      this.refreshList()
+    },
+    methods: {
+      // 新增
+      add () {
+        this.$refs.typeForm.init('add', '')
+      },
+      addChild (id, businessType) {
+        this.$refs.typeForm.init('addChild', id, businessType)
+      },
+      // 修改
+      edit (id) {
+        id = id || this.$refs.typeTable.getCheckboxRecords().map(item => {
+          return item.id
+        })[0]
+        this.$refs.typeForm.init('edit', id)
+      },
+      // 查看
+      view (id) {
+        this.$refs.typeForm.init('view', id)
+      },
+      // 获取数据列表
+      refreshList () {
+        this.loading = true
+        this.reimbursementApprovalTypeService.list({...this.searchForm}).then((data) => {
+          this.dataList = data
+          this.loading = false
+          this.$nextTick(() => {
+            this.$refs.typeTable.setAllTreeExpand(true)
+          })
+        })
+        // this.reimbursementTypeService.list({...this.searchForm}).then((data) => {
+        //   this.dataList = data
+        //   this.loading = false
+        // })
+      },
+      // 删除
+      del (id) {
+        let ids = id || this.$refs.typeTable.getCheckboxRecords().map(item => {
+          return item.id
+        }).join(',')
+        this.$confirm(`确定删除所选项吗?`, '提示', {
+          confirmButtonText: '确定',
+          cancelButtonText: '取消',
+          type: 'warning'
+        }).then(() => {
+          this.loading = true
+          this.reimbursementApprovalTypeService.remove(ids).then((data) => {
+            this.$message.success(data)
+            this.refreshList()
+            this.loading = false
+          })
+          // this.reimbursementTypeService.remove(ids).then((data) => {
+          //   this.$message.success(data)
+          //   this.refreshList()
+          //   this.loading = false
+          // })
+        })
+      },
+      resetSearch () {
+        this.$refs.searchForm.resetFields()
+        this.refreshList()
+      }
+    }
+  }
+</script>

+ 3 - 1
src/views/flowable/task/TaskForm.vue

@@ -775,6 +775,7 @@ export default {
 		// Process_1711414021644 会计-预开票申请
 		// Process_1711418224962 物资-项目报销
 		// Process_1702534302878 日常办公-请假申请
+		// Process_1713769833657 苏州-业务操作报销
 		// 驳回
 		reject(vars) {
 			if (this.procDefId.includes('Process_1667978088459') ||
@@ -862,7 +863,8 @@ export default {
 				this.procDefId.includes('Process_1710204867282') ||
 				this.procDefId.includes('Process_1711414021644') ||
 				this.procDefId.includes('Process_1711418224962') ||
-				this.procDefId.includes('Process_1702534302878')
+				this.procDefId.includes('Process_1702534302878') ||
+				this.procDefId.includes('Process_1713769833657')
 			) {
 				console.log('进入新版驳回')
 				this.$confirm(`确定驳回流程吗?`, '提示', {