Explorar o código

Merge remote-tracking branch 'origin/master'

ZaiZai %!s(int64=2) %!d(string=hai) anos
pai
achega
bcfb0ba695

+ 5 - 5
src/views/expense/paymentRequest/record.vue

@@ -291,11 +291,11 @@ const getFormData = (submitStatus = 1) => {
     //----处理数据----
     return {
         ...res,
-        cashierUser,
-        ccUserList,
-        finalConfirmationUser,
-        financeUser,
-        responsibleUser,
+        // cashierUser,
+        // ccUserList,
+        // finalConfirmationUser,
+        // financeUser,
+        // responsibleUser,
         submitStatus //提交状态 1=暂存 2=提交审批
     }
 }

+ 2 - 1
src/views/home/components/TaskTable.vue

@@ -165,7 +165,8 @@ const rowNameClick = (row) => {
     router.push({
         name: 'home-task-details', query: {
             id: row.id,
-            type: row?.reportTypeName
+            type: row?.reportTypeName,
+            tabsKey:isTableKey.value
         }
     })
 }

+ 73 - 0
src/views/home/task/components/loan-request.vue

@@ -0,0 +1,73 @@
+<!--  -->
+<template>
+  <div >
+    <el-form ref="formRef" :model="otherInfo"  label-position="top"   disabled>
+        <el-form-item label="申请人:" prop="loanUserName">
+            <el-input v-model="otherInfo.loanUserName"/>
+        </el-form-item>
+        <el-form-item label="借款事由:">
+            <el-input type="textarea" v-model="otherInfo.loanDesc" :autosize="{ minRows: 3, maxRows: 5 }"/>
+        </el-form-item>
+        <el-form-item prop="loanMoney">
+            <template #label>
+                <span>申请金额:</span>
+                <span style="color: #8f8d8d;">{{otherInfo.loanMoneyText}}</span>
+            </template>
+            <el-input v-model="otherInfo.loanMoney" >
+                <template #append>元</template>
+            </el-input>
+        </el-form-item>
+        <div class="hc-form-item">
+            <el-form-item label="使用日期:" prop="useDate">
+                <el-date-picker type="date" class="block" v-model="otherInfo.useDate" format="YYYY-MM-DD" value-format="YYYY-MM-DD"/>
+            </el-form-item>
+            <el-form-item label="归还日期:" prop="returnDate">
+                <el-date-picker type="date" class="block" v-model="otherInfo.returnDate" format="YYYY-MM-DD" value-format="YYYY-MM-DD"/>
+            </el-form-item>
+        </div>
+        <el-form-item label="备注:">
+            <el-input type="textarea" v-model="otherInfo.remarks" :autosize="{ minRows: 3, maxRows: 5 }"/>
+        </el-form-item>
+    </el-form>
+  </div>
+</template>
+
+<script setup>
+import { ref, watch,onActivated } from 'vue'
+import {getProjectList} from "~api/other";
+import {getArrValue} from "js-fast-way";
+onActivated(()=>{
+  getProjectData()
+ })
+//参数
+const props = defineProps({
+  otherInfo: {
+    type: Object,
+    default: {}
+  }
+})
+const trafficTypeData=ref([])
+const wayType=ref([])
+const cityType=ref([])
+const projectType=ref([])
+const partneroptions=ref([])
+//监听
+watch(() => [
+  props.otherInfo,
+], ([otherInfo]) => {
+  console.log(otherInfo, 'otherInfo');
+
+})
+const getProjectData = async () => {
+    const {error, code, data} = await getProjectList()
+    //判断状态
+    if (!error && code === 200) {
+      projectType.value = getArrValue(data)
+    } else {
+      projectType.value = []
+    }
+}
+
+</script>
+<style lang='scss' scoped>
+</style>

+ 117 - 0
src/views/home/task/components/pay-request.vue

@@ -0,0 +1,117 @@
+ <!--  -->
+ <template>
+       <div class="record-form-box">
+                <el-scrollbar>
+                    <el-form ref="formRef" :model="otherInfo" label-position="top"  disabled>
+                      <div class="hc-form-item">
+                        <el-form-item label="申请时间:" prop="afDate">
+                            <el-date-picker type="date" class="block" v-model="otherInfo.afDate" format="YYYY-MM-DD" value-format="YYYY-MM-DD"/>
+                        </el-form-item>
+                        <el-form-item label="关联项目:" v-if="otherInfo.isProjectBonus !== 1">
+                            <el-select block v-model="otherInfo.projectId">
+                                <el-option v-for="items in projectData" :label="items.projectName" :value="items.projectId"/>
+                            </el-select>
+                        </el-form-item>
+                      </div>
+                 
+                        <div class="hc-form-item">
+                            <el-form-item label="申请人:" prop="afUserId">
+                                <el-select block v-model="otherInfo.afUserId">
+                                    <el-option label="暂无接口1" value="1" />
+                                    <el-option label="暂无接口2" value="2" />
+                                </el-select>
+                            </el-form-item>
+                            <el-form-item label="是否为项目提成申请:" prop="isProjectBonus">
+                                <el-select block v-model="otherInfo.isProjectBonus" placeholder="">
+                                    <el-option label="否" :value="0"/>
+                                    <el-option label="是" :value="1"/>
+                                </el-select>
+                            </el-form-item>
+                        </div>
+                        <div class="hc-form-item" v-if="otherInfo.isProjectBonus === 1">
+                            <el-form-item label="关联项目:" prop="projectId">
+                                <el-select block v-model="otherInfo.projectId">
+                                    <el-option v-for="items in projectData" :label="items.projectName" :value="items.projectId"/>
+                                </el-select>
+                            </el-form-item>
+                            <div class="ml-2">
+                                <el-button type="default" style="margin-top: 34px;" @click="budgetModalShow">
+                                    <HcIcon name="add"/>
+                                    <span>关联合同数据</span>
+                                </el-button>
+                            </div>
+                        </div>
+                        <el-form-item label="回款时间:" prop="collectionDate" v-if="otherInfo.isProjectBonus === 1">
+                            <el-input v-model="otherInfo.collectionDate" disabled/>
+                        </el-form-item>
+                        <el-form-item label="回款金额:" prop="collectionMoney" v-if="otherInfo.isProjectBonus === 1">
+                            <el-input v-model="otherInfo.collectionMoney" disabled>
+                                <template #append>元</template>
+                            </el-input>
+                        </el-form-item>
+                        <el-form-item label="申请比例:" prop="afProportion" v-if="otherInfo.isProjectBonus === 1">
+                            <el-input v-model="otherInfo.afProportion">
+                                <template #append>%</template>
+                            </el-input>
+                        </el-form-item>
+                        <el-form-item label="请款金额:" prop="afMoney">
+                            <el-input v-model="otherInfo.afMoney" :disabled="otherInfo.isProjectBonus === 1">
+                                <template #append>元</template>
+                            </el-input>
+                        </el-form-item>
+                        <el-form-item label="收款人:" prop="payeeUserName">
+                            <el-input v-model="otherInfo.payeeUserName"/>
+                        </el-form-item>
+                        <el-form-item label="收款人开户行:" prop="payeeUserBankName">
+                            <el-input v-model="otherInfo.payeeUserBankName"/>
+                        </el-form-item>
+                        <el-form-item label="收款账号:" prop="payeeUserBankId">
+                            <el-input v-model="otherInfo.payeeUserBankId"/>
+                        </el-form-item>
+                        <el-form-item label="请款用途:" prop="payeeUseInfo" v-if="otherInfo.isProjectBonus !== 1">
+                            <el-input type="textarea" v-model="otherInfo.payeeUseInfo" :autosize="{ minRows: 3, maxRows: 5 }"/>
+                        </el-form-item>
+                    
+                        <el-form-item label="备注:">
+                            <el-input type="textarea" v-model="otherInfo.remarks" :autosize="{ minRows: 3, maxRows: 5 }"/>
+                        </el-form-item>
+                    </el-form>
+                </el-scrollbar>
+            </div>
+ </template>
+ 
+ <script setup>
+ import {ref, watch,onActivated} from  'vue'
+ import {getProjectList} from "~api/other";
+ import {getArrValue} from "js-fast-way";
+ onActivated(()=>{
+  getProjectData()
+ })
+ //参数
+ const props = defineProps({
+   otherInfo: {
+         type: Object,
+         default: {}
+     }
+ })
+ //监听
+ watch(() => [
+  props.otherInfo,
+ ], ([otherInfo]) => {
+    console.log(otherInfo,'otherInfo');
+ 
+ })
+ //获取项目数据
+const projectData = ref([])
+const getProjectData = async () => {
+    const {error, code, data} = await getProjectList()
+    //判断状态
+    if (!error && code === 200) {
+        projectData.value = getArrValue(data)
+    } else {
+        projectData.value = []
+    }
+}
+ </script>
+ <style lang='scss' scoped>
+ </style>

+ 97 - 4
src/views/home/task/components/trip-info.vue

@@ -1,10 +1,103 @@
 <!--  -->
 <template>
-  <div >出差详情</div>
+  <div>
+    <el-form ref="formRef" :model="otherInfo" label-width="auto" disabled label-position="top">
+      <div class="project-form-top">
+        <el-form-item label="出差事由:" prop="tripDesc">
+          <el-input v-model="otherInfo.tripDesc" />
+        </el-form-item>
+        <el-form-item label="交通工具" prop="trafficType">
+          <el-select v-model="otherInfo.trafficType" block clearable >
+            <el-option v-for="item in trafficTypeData" :label="item.dictName" :value="item.dictValue" />
+          </el-select>
+        </el-form-item>
+        <el-form-item label="单程往返" prop="isSingletonType">
+          <el-select v-model="otherInfo.isSingletonType" block clearable >
+            <el-option v-for="item in wayType" :label="item.name" :value="item.key" />
+          </el-select>
+        </el-form-item>
+        <el-form-item label="出发城市" prop="startCity">
+          <el-select v-model="otherInfo.startCity" block clearable>
+            <el-option v-for="item in cityType" :label="item.name" :value="item.key" />
+          </el-select>
+        </el-form-item>
+        <el-form-item label="目的城市" prop="endCity">
+          <el-select v-model="otherInfo.endCity" block clearable >
+            <el-option v-for="item in cityType" :label="item.name" :value="item.key" />
+          </el-select>
+        </el-form-item>
+        <el-form-item label="开始时间">
+          <el-date-picker v-model="otherInfo.startDate" type="date"  style="width: 100%;"
+            format="YYYY-MM-DD" value-format="YYYY-MM-DD" />
+        </el-form-item>
+        <el-form-item label="结束时间">
+          <el-date-picker v-model="otherInfo.endDate" type="date"  style="width: 100%;"
+            format="YYYY-MM-DD" value-format="YYYY-MM-DD" />
+        </el-form-item>
+        <el-form-item label="时长" prop="duration">
+          <el-input v-model="otherInfo.duration" disabled  />
+        </el-form-item>
+        <el-form-item label="出差天数:" prop="durationAll">
+          <el-input v-model="otherInfo.durationAll" disabled />
+        </el-form-item>
+        <el-form-item label="出差备注:" prop="remarks">
+          <el-input v-model="otherInfo.remarks" type="textarea" />
+        </el-form-item>
+        <el-form-item label="同行人" prop="fellowTravelerUserIds">
+          <el-select v-model="otherInfo.fellowTravelerUserIds" block clearable style="width: 100%">
+            <el-option v-for="item in partneroptions" :key="item.key" :label="item.name" :value="item.key" />
+          </el-select>
+        </el-form-item>
+        <el-form-item label="所属项目" prop="projectId" >
+          <el-select v-model="otherInfo.projectId" block clearable>
+            <el-option v-for="item in projectType" :label="item.projectName" :value="item.projectId" />
+          </el-select>
+        </el-form-item>
+ 
+
+
+
+      </div>
+
+    </el-form>
+
+  </div>
 </template>
 
 <script setup>
-import {ref, watch} from  'vue'
+import { ref, watch,onActivated } from 'vue'
+import {getProjectList} from "~api/other";
+import {getArrValue} from "js-fast-way";
+
+//参数
+const props = defineProps({
+  otherInfo: {
+    type: Object,
+    default: {}
+  }
+})
+const trafficTypeData=ref([])
+const wayType=ref([])
+const cityType=ref([])
+const projectType=ref([])
+const partneroptions=ref([])
+//监听
+watch(() => [
+  props.otherInfo,
+], ([otherInfo]) => {
+  console.log(otherInfo, 'otherInfo');
+  getProjectData()
+
+})
+const getProjectData = async () => {
+    const {error, code, data} = await getProjectList()
+    //判断状态
+    if (!error && code === 200) {
+      projectType.value = getArrValue(data)
+    } else {
+      projectType.value = []
+    }
+}
+
 </script>
-<style lang='scss' scoped>
-</style>
+<style lang='scss' scoped></style>

+ 18 - 7
src/views/home/task/task-details.vue

@@ -19,7 +19,7 @@
         </HcCardItem>
 
         <HcCardItem title="操作任务" class="mt-4" v-if="dataType === '任务审批'">
-            <el-form ref="formRef" :model="formModel" :rules="formRules" label-width="" :disabled="tabsKey !== 'to-do'">
+            <el-form ref="formRef" :model="formModel" :rules="formRules" label-width="" :disabled="tabsKey !== 1">
                 <el-form-item label="变更类别:" prop="type" size="large">
                     <el-radio-group v-model="formModel.type" size="large">
                         <el-radio label="1">已完成</el-radio>
@@ -41,7 +41,7 @@
             </el-form>
         </HcCardItem>
 
-        <HcCardItem title="数据详情" class="mt-4">
+        <HcCardItem title="数据详情" class="mt-4"  v-if="dataType !== '任务审批'">
              <!-- 报销 -->
             <div class="hc-info-list" v-if="dataType=='报销审批'">
                 <HcListItem title="报销金额:" :content="otherInfo?.frMoney"/>
@@ -81,9 +81,16 @@
             </div>
              <!-- 出差审批 -->
             <div class="hc-info-list" v-if="dataType==='出差审批'">
-                <tripInfo />
+                <tripInfo :other-info="otherInfo"/>
+            </div>
+             <!-- 支付申请 -->
+            <div class="hc-info-list" v-if="dataType==='支付申请'">
+                <paymentRequest :other-info="otherInfo"/>
+            </div>
+              <!-- 借款申请 -->
+             <div class="hc-info-list" v-if="dataType==='借款审批'">
+                <loanRequest :other-info="otherInfo"/>
             </div>
-          
           
         </HcCardItem>
   
@@ -114,12 +121,13 @@
             <!--模拟效果-->
             <div class="w-36 mx-6 inline-block">
                 <el-select v-model="dataType" block placeholder="选择模拟类型" size="large">
-                    <el-option label="任务详情" value="1"/>
+                    <el-option label="任务详情" value="任务审批"/>
                     <el-option label="财务报销" value="报销审批"/>
                     <el-option label="采购" value="3"/>
                     <el-option label="外包支付" value="4"/>
-                    <el-option label="借款审批" value="5"/>
+                    <el-option label="借款审批" value="借款审批"/>
                     <el-option label="出差审批" value="出差审批"/>
+                    <el-option label="支付申请" value="支付申请"/>
                 </el-select>
             </div>
             <el-button hc-btn @click="authTypeClick">模拟财务审核</el-button>
@@ -141,7 +149,10 @@ import {onActivated, ref} from "vue";
 import {useRouter, useRoute} from 'vue-router'
 import taskApi from '~api/home/task.js';
 import {getArrValue,getObjValue} from "js-fast-way"
-import tripInfo from './components/trip-info.vue'
+import tripInfo from './components/trip-info.vue'//出差申请
+import paymentRequest from './components/pay-request.vue'
+import loanRequest from './components/loan-request.vue'
+
 
 //初始变量
 const router = useRouter()

+ 154 - 0
src/views/system/components/tab-invoice.vue

@@ -0,0 +1,154 @@
+<template>
+    <HcCard>
+        <template #header>
+            <span class="mr-2">发票类型:</span>
+            <el-button _icon hc-btn size="small" type="primary" @click="positionEdit(1)">
+                <HcIcon name="add"/>
+            </el-button>
+        </template>
+        <HcTable :column="positiontableColumn" :datas="positiontableData" :loading="tableLoaing">
+            <template #action="{row, index}">
+                <el-button size="small" type="primary" @click="positionEdit(2,row)">编辑</el-button>
+                <el-button size="small" type="primary" @click="delTaskposition(row)">删除</el-button>
+            </template>
+        </HcTable>
+   
+        <HcDialog bgColor="#ffffff" isToBody widths="24rem" :show="positonModal" :title="positonModalTitle" @close="positonModalClose" @save="savepositionClick">
+            <el-form label-position="top" label-width="auto" :model="formposition" size="large">
+                <el-form-item label="发票类型名称:">
+                    <el-input v-model="formposition.dictName"/>
+                </el-form-item>
+        
+            </el-form>
+        </HcDialog>
+    </HcCard>
+</template>
+
+<script setup>
+import {ref, watch,onMounted} from "vue";
+import {submitDictionary,removeDictionary,getParentList,getChildList} from '~api/system/parameter.js';
+import {getArrValue} from "js-fast-way"
+const props = defineProps({
+    cur: {
+        type: [String,Number],
+        default: ''
+    },
+    type:{
+        type: [String,Number],
+        default: ''
+    }
+})
+
+const tabsKey = ref(props.cur)
+const tabsType = ref(props.type)
+
+//监听
+watch(() => [
+    props.cur,
+    props.type,
+], ([key,type]) => {
+    tabsKey.value = key
+    tabsType.value = type
+})
+
+onMounted(() => {
+    getParentListData()
+   
+})
+const tableLoaing=ref(false)
+const getParentListData=async()=>{
+    tableLoaing.value=true
+    const { error, code, data,msg } = await getParentList({
+        type:tabsType.value,
+    })
+    tableLoaing.value=false
+    if (!error && code === 200) {
+        positiontableData.value = getArrValue(data['records'])
+       
+    } 
+    else {
+        positiontableData.value=[]
+        window.$message?.warning(msg)
+    }
+}
+
+
+
+
+const positiontableColumn = [
+    {key: 'dictName', name: '报销类型名称'},
+    {key: 'action', name: '操作', width: 200}
+]
+
+
+const positiontableData = ref([
+   
+])
+
+const positonModal = ref(false)
+const positonModalTitle = ref('')
+const editItem=ref({})
+const positionEdit = (type,row) => {
+    if (type === 1) {
+        positonModalTitle.value = '新增报销类型'
+        formposition.value={}
+        editItem.value={}
+    } else {
+        positonModalTitle.value = '编辑报销类型'
+        editItem.value=row
+        formposition.value=row
+    }
+    positonModal.value = true
+}
+
+
+const positonModalClose = () => {
+    positonModal.value = false
+}
+
+const formposition = ref({})
+
+//新增编辑提交
+const savepositionClick=async()=>{
+    const { error, code, data,msg } = await submitDictionary({
+        type:tabsType.value,
+        dictValue:formposition.value?.dictValue,
+        dictName:formposition.value?.dictName,
+        id:editItem.value.id||null
+      
+    })
+    positonModal.value=false
+    if (!error && code === 200) {
+        window.$message?.success(msg)
+        getParentListData()
+    } 
+    else {
+        window.$message?.warning(msg)
+    }
+}
+const delTaskposition = (row) => {
+    window?.$messageBox?.alert('您确定要删除该信息吗? 一旦注销数据将彻底清除,请谨慎操作?', '删除提醒', {
+            showCancelButton: true,
+            confirmButtonText: '确认注销',
+            cancelButtonText: '取消',
+            type: 'warning',
+            callback: async(action) => {
+                if (action === 'confirm') {
+                        const {error, code, msg} = await removeDictionary({
+                            ids: row?.id,
+                        })
+                        if (!error && code === 200) {
+                            window?.$message?.success('删除成功')
+                            getParentListData()
+                        } else {
+                            window?.$message?.warning(msg)
+                        }
+                }
+            }
+    })
+}
+</script>
+
+<style scoped lang="scss">
+
+</style>

+ 5 - 0
src/views/system/parameter.vue

@@ -18,6 +18,9 @@
         <template #tab-approve>
             <HcTabApprove :cur="tabsKey" :type="6" v-if="tabsKey==='approve'"/>
         </template>
+        <template #tab-invoice>
+            <HcTabInvoice :cur="tabsKey" :type="7" v-if="tabsKey==='invoice'"/>
+        </template>
         <template #tab-other>
             <HcTabOther :cur="tabsKey" :type="11" v-if="tabsKey==='other'"/>
         </template>
@@ -32,6 +35,7 @@ import HcTabPrice from "./components/tab-price.vue";
 import HcTabReimbursement from "./components/tab-reimbursement.vue";
 import HcTabCost from "./components/tab-cost.vue";
 import HcTabApprove from "./components/tab-approve.vue";
+import HcTabInvoice from "./components/tab-invoice.vue";
 import HcTabOther from './components/tab-other.vue'
 
 
@@ -44,6 +48,7 @@ const tabsData = ref([
     {icon: 'sun-cloudy', label: '报销类型字典', key: 'reimbursement'},
     {icon: 'sun-cloudy', label: '成本测算类型', key: 'cost'},
     {icon: 'sun-cloudy', label: '审批流程', key: 'approve'},
+    {icon: 'sun-cloudy', label: '发票字典', key: 'invoice'},
     {icon: 'sun-cloudy', label: '其他', key: 'other'},
 
 ])