Browse Source

按钮权限增加

duy 2 years ago
parent
commit
0da2d9ebbb

+ 2 - 2
src/views/attendance/business-trip/index.vue

@@ -22,11 +22,11 @@
             </div>
         </template>
         <template #extra>
-            <el-button type="warning" size="large" @click="toImportTempClick">
+            <el-button v-auth-btn="['attendance-business-trip-draft-btn']" type="warning" size="large" @click="toImportTempClick">
                 <HcIcon name="delete-bin-2" />
                 <span>草稿箱{{ draftNum > 0 ? `(${draftNum})` : '' }}</span>
             </el-button>
-            <el-button type="primary" size="large" class="ml-2" @click="addinfoClick">
+            <el-button v-auth-btn="['attendance-business-trip-add-btn']" type="primary" size="large" class="ml-2" @click="addinfoClick">
                 <HcIcon name="add" />
                 <span>新增出差申请</span>
             </el-button>

+ 2 - 2
src/views/expense/finReimburse/index.vue

@@ -25,11 +25,11 @@
             </div>
         </template>
         <template #extra>
-            <el-button size="large" type="warning" hc-btn @click="draftsClick">
+            <el-button v-auth-btn="['expense-finReimburse-draft-btn']" size="large" type="warning" hc-btn @click="draftsClick">
                 <HcIcon name="draft" />
                 <span>草稿箱{{ draftNum > 0 ? `(${draftNum})` : '' }}</span>
             </el-button>
-            <el-button size="large" type="primary" hc-btn @click="addRowClick">
+            <el-button v-auth-btn="['expense-finReimburse-edit-btn']" size="large" type="primary" hc-btn @click="addRowClick">
                 <HcIcon name="add" />
                 <span>新增报销记录</span>
             </el-button>

+ 2 - 2
src/views/expense/invoice/index.vue

@@ -20,11 +20,11 @@
             </div>
         </template>
         <template #extra>
-            <el-button size="large" type="warning" hc-btn @click="draftsClick">
+            <el-button v-auth-btn="['expense-invoice-draft-btn']" size="large" type="warning" hc-btn @click="draftsClick">
                 <HcIcon name="draft" />
                 <span>草稿箱{{ draftNum > 0 ? `(${draftNum})` : '' }}</span>
             </el-button>
-            <el-button size="large" type="primary" hc-btn @click="addRowClick">
+            <el-button v-auth-btn="['expense-invoice-add-btn']" size="large" type="primary" hc-btn @click="addRowClick">
                 <HcIcon name="add" />
                 <span>开票审批</span>
             </el-button>

+ 2 - 2
src/views/expense/loanRequest/index.vue

@@ -20,11 +20,11 @@
             </div>
         </template>
         <template #extra>
-            <el-button size="large" type="warning" hc-btn @click="draftsClick">
+            <el-button v-auth-btn="['expense-loanRequest-draft-btn']" size="large" type="warning" hc-btn @click="draftsClick">
                 <HcIcon name="draft" />
                 <span>草稿箱{{ draftNum > 0 ? `(${draftNum})` : '' }}</span>
             </el-button>
-            <el-button size="large" type="primary" hc-btn @click="addRowClick">
+            <el-button v-auth-btn="['expense-loanRequest-add-btn']" size="large" type="primary" hc-btn @click="addRowClick">
                 <HcIcon name="add" />
                 <span>新增借款申请</span>
             </el-button>

+ 64 - 56
src/views/expense/outsourcing/index.vue

@@ -3,60 +3,68 @@
         <template #header>
             <div class="w-72">
                 <el-select v-model="searchForm.projectType" block clearable placeholder="项目名称" size="large">
-                    <el-option v-for="item in projectType" :label="item.projectName" :value="item.projectId"/>
+                    <el-option v-for="item in projectType" :label="item.projectName" :value="item.projectId" />
                 </el-select>
             </div>
             <div class="ml-4">
-                <el-button type="primary" @click="searchClick" size="large">
-                    <HcIcon name="search-2"/>
+                <el-button type="primary" size="large" @click="searchClick">
+                    <HcIcon name="search-2" />
                     <span>搜索</span>
                 </el-button>
             </div>
             <div class="ml-2">
                 <el-button size="large" @click="resetClick">
-                    <HcIcon name="close-circle"/>
+                    <HcIcon name="close-circle" />
                     <span>重置</span>
                 </el-button>
             </div>
         </template>
         <template #extra>
-            <el-button size="large" type="warning" hc-btn @click="draftsClick">
-                <HcIcon name="draft"/>
-                <span>草稿箱{{draftNum > 0 ? `(${draftNum})` : ''}}</span>
+            <el-button v-auth-btn="['expense-outsourcing-draft-btn']" size="large" type="warning" hc-btn @click="draftsClick">
+                <HcIcon name="draft" />
+                <span>草稿箱{{ draftNum > 0 ? `(${draftNum})` : '' }}</span>
             </el-button>
-            <el-button size="large" type="primary" hc-btn @click="addRowClick">
-                <HcIcon name="add"/>
+            <el-button v-auth-btn="['expense-outsourcing-add-btn']" size="large" type="primary" hc-btn @click="addRowClick">
+                <HcIcon name="add" />
                 <span>新增支付记录</span>
             </el-button>
         </template>
 
         <HcTable :column="tableColumn" :datas="tableData" :loading="tableLoading">
-            <template #action="{row,index}">
+            <template #action="{ row, index }">
                 <el-popconfirm title="是否确认撤销?" hide-icon @confirm="rowCancel(row)">
                     <template #reference>
-                        <el-button size="small" type="primary"
-                                   :disabled="row.status !== 1"
-                                   :loading="row.isCancelLoading"
-                        >撤销</el-button>
+                        <el-button
+                            size="small" type="primary"
+                            :disabled="row.status !== 1"
+                            :loading="row.isCancelLoading"
+                        >
+                            撤销
+                        </el-button>
                     </template>
                 </el-popconfirm>
             </template>
         </HcTable>
 
         <template #action>
-            <HcPages :pages="searchForm" @change="pageChange"/>
+            <HcPages :pages="searchForm" @change="pageChange" />
         </template>
 
-        <!--草稿箱-->
-        <HcDialog isToBody isTable bgColor="#ffffff" widths="62rem" :footer="false" :show="draftsModal"
-                  :title="draftNum > 0 ? `草稿箱(${draftNum})` : '草稿箱'" @close="draftsCloseClick"
+        <!-- 草稿箱 -->
+        <HcDialog
+            is-to-body is-table bg-color="#ffffff" widths="62rem" :footer="false" :show="draftsModal"
+            :title="draftNum > 0 ? `草稿箱(${draftNum})` : '草稿箱'" @close="draftsCloseClick"
         >
             <el-alert title="3个月内未更新的草稿将被自动删除" type="warning" show-icon />
             <div style="position: relative;height: calc(100% - 44px);">
-                <HcTable :isIndex="false" :column="tableDraftsColumn" :datas="tableDraftsData">
-                    <template #action="{row,index}">
-                        <el-button size="small" type="primary" @click="editDraftClick(row)">继续编辑</el-button>
-                        <el-button size="small" type="danger" @click="delDraftClick(row)">删除</el-button>
+                <HcTable :is-index="false" :column="tableDraftsColumn" :datas="tableDraftsData">
+                    <template #action="{ row, index }">
+                        <el-button size="small" type="primary" @click="editDraftClick(row)">
+                            继续编辑
+                        </el-button>
+                        <el-button size="small" type="danger" @click="delDraftClick(row)">
+                            删除
+                        </el-button>
                     </template>
                 </HcTable>
             </div>
@@ -65,12 +73,12 @@
 </template>
 
 <script setup>
-import {onActivated, ref} from "vue";
-import {useRouter} from 'vue-router'
-import mainApi from "~api/expense/outsourcing"
-import {getProjectList} from "~api/other"
-import {getArrValue} from "js-fast-way";
-import {delMessage} from "~uti/tools";
+import { onActivated, ref } from 'vue'
+import { useRouter } from 'vue-router'
+import mainApi from '~api/expense/outsourcing'
+import { getProjectList } from '~api/other'
+import { getArrValue } from 'js-fast-way'
+import { delMessage } from '~uti/tools'
 
 
 const router = useRouter()
@@ -89,7 +97,7 @@ const getApi = () => {
 //项目类型
 const projectType = ref([])
 const getProjectData = async () => {
-    const {error, code, data} = await getProjectList()
+    const { error, code, data } = await getProjectList()
     //判断状态
     if (!error && code === 200) {
         projectType.value = getArrValue(data)
@@ -99,21 +107,21 @@ const getProjectData = async () => {
 }
 
 //搜索表单
-const searchForm = ref({projectId: null, current: 1, size: 20, total: 0})
+const searchForm = ref({ projectId: null, current: 1, size: 20, total: 0 })
 
 //搜索
 const searchClick = () => {
-    searchForm.value.current = 1;
+    searchForm.value.current = 1
     getTableData()
 }
 
 //重置搜索表单
 const resetClick = () => {
-    searchForm.value = {current: 1, size: 20, total: 0}
+    searchForm.value = { current: 1, size: 20, total: 0 }
 }
 
 //分页被点击
-const pageChange = ({current, size}) => {
+const pageChange = ({ current, size }) => {
     searchForm.value.current = current
     searchForm.value.size = size
     getTableData()
@@ -122,21 +130,21 @@ const pageChange = ({current, size}) => {
 //获取数据
 const tableLoading = ref(false)
 const tableColumn = [
-    {key: 'outsourcingTypeName', name: '外包类型', width: '140'},
-    {key: 'projectName', name: '关联项目', minWidth: '200'},
-    {key: 'payMoney', name: '支付金额', width: '160', align: 'center'},
-    {key: 'toUnit', name: '支付对方', width: '140', align: 'center'},
-    {key: 'approvalResultName', name: '审批结果', width: '140', align: 'center'},
-    {key: 'approvalStatusName', name: '审批状态', width: '140', align: 'center'},
-    {key: 'payDate', name: '申请支付时间', width: '180', align: 'center'},
-    {key: 'createName', name: '创建人', width: '140', align: 'center'},
-    {key: 'createTime', name: '创建时间', width: '160', align: 'center'},
-    {key: 'action', name: '操作', width: '90', align: 'center', fixed: 'right'},
+    { key: 'outsourcingTypeName', name: '外包类型', width: '140' },
+    { key: 'projectName', name: '关联项目', minWidth: '200' },
+    { key: 'payMoney', name: '支付金额', width: '160', align: 'center' },
+    { key: 'toUnit', name: '支付对方', width: '140', align: 'center' },
+    { key: 'approvalResultName', name: '审批结果', width: '140', align: 'center' },
+    { key: 'approvalStatusName', name: '审批状态', width: '140', align: 'center' },
+    { key: 'payDate', name: '申请支付时间', width: '180', align: 'center' },
+    { key: 'createName', name: '创建人', width: '140', align: 'center' },
+    { key: 'createTime', name: '创建时间', width: '160', align: 'center' },
+    { key: 'action', name: '操作', width: '90', align: 'center', fixed: 'right' },
 ]
 const tableData = ref([])
 const getTableData = async () => {
     tableLoading.value = true
-    const {error, code, data} = await mainApi.page(searchForm.value)
+    const { error, code, data } = await mainApi.page(searchForm.value)
     //判断状态
     tableLoading.value = false
     if (!error && code === 200) {
@@ -151,15 +159,15 @@ const getTableData = async () => {
 //新增预算
 const addRowClick = () => {
     router.push({
-        name: 'expense-outsourcing-record'
+        name: 'expense-outsourcing-record',
     })
 }
 
 //撤销
 const rowCancel = async (row) => {
     row.isCancelLoading = true
-    const {error, code, msg} = await mainApi.cancel({
-        id: row.id
+    const { error, code, msg } = await mainApi.cancel({
+        id: row.id,
     })
     //判断状态
     row.isCancelLoading = false
@@ -185,15 +193,15 @@ const draftsCloseClick = () => {
 //草稿箱数据
 const draftNum = ref(0)
 const tableDraftsColumn = [
-    {key: 'title', name: '标题'},
-    {key: 'updateTime', name: '更新时间', width: '200'},
-    {key: 'action', name: '操作', width: '170', align: 'center'},
+    { key: 'title', name: '标题' },
+    { key: 'updateTime', name: '更新时间', width: '200' },
+    { key: 'action', name: '操作', width: '170', align: 'center' },
 ]
 const tableDraftsData = ref([])
 
 //获取草稿数量
 const getDraftNum = async () => {
-    const {error, code, data} = await mainApi.draft()
+    const { error, code, data } = await mainApi.draft()
     //判断状态
     if (!error && code === 200) {
         const res = getArrValue(data)
@@ -206,19 +214,19 @@ const getDraftNum = async () => {
 }
 
 //继续编辑
-const editDraftClick = ({id}) => {
+const editDraftClick = ({ id }) => {
     draftsModal.value = false
     router.push({
         name: 'expense-outsourcing-record',
-        query: {id: id}
+        query: { id: id },
     })
 }
 
 //删除草稿
-const delDraftClick = ({id}) => {
+const delDraftClick = ({ id }) => {
     delMessage(async () => {
-        const {error, code, msg} = await mainApi.remove({
-            id: id
+        const { error, code, msg } = await mainApi.remove({
+            id: id,
         })
         //判断状态
         if (!error && code === 200) {

+ 66 - 58
src/views/expense/paymentRequest/index.vue

@@ -3,65 +3,73 @@
         <template #header>
             <div class="w-36">
                 <el-select v-model="searchForm.payeeUserId" block clearable placeholder="收款人" size="large">
-                    <el-option v-for="item in payeeUserList" :label="item" :value="item"/>
+                    <el-option v-for="item in payeeUserList" :label="item" :value="item" />
                 </el-select>
             </div>
             <div class="w-72 ml-2">
                 <el-select v-model="searchForm.projectId" block clearable placeholder="项目名称" size="large">
-                    <el-option v-for="item in projectType" :label="item.projectName" :value="item.projectId"/>
+                    <el-option v-for="item in projectType" :label="item.projectName" :value="item.projectId" />
                 </el-select>
             </div>
             <div class="ml-4">
-                <el-button type="primary" @click="searchClick" size="large">
-                    <HcIcon name="search-2"/>
+                <el-button type="primary" size="large" @click="searchClick">
+                    <HcIcon name="search-2" />
                     <span>搜索</span>
                 </el-button>
             </div>
             <div class="ml-2">
                 <el-button size="large" @click="resetClick">
-                    <HcIcon name="close-circle"/>
+                    <HcIcon name="close-circle" />
                     <span>重置</span>
                 </el-button>
             </div>
         </template>
         <template #extra>
-            <el-button size="large" type="warning" hc-btn @click="draftsClick">
-                <HcIcon name="draft"/>
-                <span>草稿箱{{draftNum > 0 ? `(${draftNum})` : ''}}</span>
+            <el-button v-auth-btn="['expense-paymentRequest-draft-btn']" size="large" type="warning" hc-btn @click="draftsClick">
+                <HcIcon name="draft" />
+                <span>草稿箱{{ draftNum > 0 ? `(${draftNum})` : '' }}</span>
             </el-button>
-            <el-button size="large" type="primary" hc-btn @click="addRowClick">
-                <HcIcon name="add"/>
+            <el-button v-auth-btn="['expense-paymentRequest-add-btn']" size="large" type="primary" hc-btn @click="addRowClick">
+                <HcIcon name="add" />
                 <span>新增支付记录</span>
             </el-button>
         </template>
 
         <HcTable :column="tableColumn" :datas="tableData" :loading="tableLoading">
-            <template #action="{row,index}">
+            <template #action="{ row, index }">
                 <el-popconfirm title="是否确认撤销?" hide-icon @confirm="rowCancel(row)">
                     <template #reference>
-                        <el-button size="small" type="primary"
-                                   :disabled="row.status !== 1"
-                                   :loading="row.isCancelLoading"
-                        >撤销</el-button>
+                        <el-button
+                            size="small" type="primary"
+                            :disabled="row.status !== 1"
+                            :loading="row.isCancelLoading"
+                        >
+                            撤销
+                        </el-button>
                     </template>
                 </el-popconfirm>
             </template>
         </HcTable>
 
         <template #action>
-            <HcPages :pages="searchForm" @change="pageChange"/>
+            <HcPages :pages="searchForm" @change="pageChange" />
         </template>
 
-        <!--草稿箱-->
-        <HcDialog isToBody isTable bgColor="#ffffff" widths="62rem" :footer="false" :show="draftsModal"
-                  :title="draftNum > 0 ? `草稿箱(${draftNum})` : '草稿箱'" @close="draftsCloseClick"
+        <!-- 草稿箱 -->
+        <HcDialog
+            is-to-body is-table bg-color="#ffffff" widths="62rem" :footer="false" :show="draftsModal"
+            :title="draftNum > 0 ? `草稿箱(${draftNum})` : '草稿箱'" @close="draftsCloseClick"
         >
             <el-alert title="3个月内未更新的草稿将被自动删除" type="warning" show-icon />
             <div style="position: relative;height: calc(100% - 44px);">
-                <HcTable :isIndex="false" :column="tableDraftsColumn" :datas="tableDraftsData">
-                    <template #action="{row,index}">
-                        <el-button size="small" type="primary" @click="editDraftClick(row)">继续编辑</el-button>
-                        <el-button size="small" type="danger" @click="delDraftClick(row)">删除</el-button>
+                <HcTable :is-index="false" :column="tableDraftsColumn" :datas="tableDraftsData">
+                    <template #action="{ row, index }">
+                        <el-button size="small" type="primary" @click="editDraftClick(row)">
+                            继续编辑
+                        </el-button>
+                        <el-button size="small" type="danger" @click="delDraftClick(row)">
+                            删除
+                        </el-button>
                     </template>
                 </HcTable>
             </div>
@@ -70,12 +78,12 @@
 </template>
 
 <script setup>
-import {onActivated, ref} from "vue";
-import {useRouter} from 'vue-router'
-import mainApi from "~api/expense/paymentRequest";
-import {getProjectList} from "~api/other";
-import {getArrValue} from "js-fast-way";
-import {delMessage} from "~uti/tools";
+import { onActivated, ref } from 'vue'
+import { useRouter } from 'vue-router'
+import mainApi from '~api/expense/paymentRequest'
+import { getProjectList } from '~api/other'
+import { getArrValue } from 'js-fast-way'
+import { delMessage } from '~uti/tools'
 
 const router = useRouter()
 
@@ -93,7 +101,7 @@ const getApi = () => {
 //项目类型
 const projectType = ref([])
 const getProjectData = async () => {
-    const {error, code, data} = await getProjectList()
+    const { error, code, data } = await getProjectList()
     //判断状态
     if (!error && code === 200) {
         projectType.value = getArrValue(data)
@@ -102,9 +110,9 @@ const getProjectData = async () => {
     }
 }
 //获取支付申请人
-const payeeUserList=ref([])
-const getPayeeUserList=async()=>{
-    const {error, code, data} = await mainApi.getPayeeUserNameList()
+const payeeUserList = ref([])
+const getPayeeUserList = async ()=>{
+    const { error, code, data } = await mainApi.getPayeeUserNameList()
     if (!error && code === 200) {
         payeeUserList.value = getArrValue(data)
 
@@ -114,21 +122,21 @@ const getPayeeUserList=async()=>{
     }
 }
 //搜索表单
-const searchForm = ref({payeeUserId: null, projectId: null, current: 1, size: 20, total: 0})
+const searchForm = ref({ payeeUserId: null, projectId: null, current: 1, size: 20, total: 0 })
 
 //搜索
 const searchClick = () => {
-    searchForm.value.current = 1;
+    searchForm.value.current = 1
     getTableData()
 }
 
 //重置搜索表单
 const resetClick = () => {
-    searchForm.value = {current: 1, size: 20, total: 0}
+    searchForm.value = { current: 1, size: 20, total: 0 }
 }
 
 //分页被点击
-const pageChange = ({current, size}) => {
+const pageChange = ({ current, size }) => {
     searchForm.value.current = current
     searchForm.value.size = size
     getTableData()
@@ -137,22 +145,22 @@ const pageChange = ({current, size}) => {
 //获取数据
 const tableLoading = ref(false)
 const tableColumn = [
-    {key: 'afDate', name: '申请时间', minWidth: '160'},
-    {key: 'payeeUserName', name: '收款人', minWidth: '160'},
-    {key: 'afMoney', name: '收款金额', width: '160', align: 'center'},
-    {key: 'payeeUseInfo', name: '收款用途', width: '160', align: 'center'},
-    {key: 'approvalResultName', name: '审批结果', width: '160', align: 'center'},
-    {key: 'approvalStatusName', name: '审批状态', width: '140', align: 'center'},
-    {key: 'afDate', name: '申请时间', width: '160', align: 'center'},
-    {key: 'createName', name: '创建人', width: '140', align: 'center'},
-    {key: 'createTime', name: '创建时间', width: '160', align: 'center'},
-    {key: 'action', name: '操作', width: '90', align: 'center', fixed: 'right'},
+    { key: 'afDate', name: '申请时间', minWidth: '160' },
+    { key: 'payeeUserName', name: '收款人', minWidth: '160' },
+    { key: 'afMoney', name: '收款金额', width: '160', align: 'center' },
+    { key: 'payeeUseInfo', name: '收款用途', width: '160', align: 'center' },
+    { key: 'approvalResultName', name: '审批结果', width: '160', align: 'center' },
+    { key: 'approvalStatusName', name: '审批状态', width: '140', align: 'center' },
+    { key: 'afDate', name: '申请时间', width: '160', align: 'center' },
+    { key: 'createName', name: '创建人', width: '140', align: 'center' },
+    { key: 'createTime', name: '创建时间', width: '160', align: 'center' },
+    { key: 'action', name: '操作', width: '90', align: 'center', fixed: 'right' },
 ]
 const tableData = ref([])
 
 const getTableData = async () => {
     tableLoading.value = true
-    const {error, code, data} = await mainApi.page(searchForm.value)
+    const { error, code, data } = await mainApi.page(searchForm.value)
     //判断状态
     tableLoading.value = false
     if (!error && code === 200) {
@@ -167,7 +175,7 @@ const getTableData = async () => {
 //撤销
 const rowCancel = async (row) => {
     row.isCancelLoading = true
-    const {error, code, msg} = await mainApi.cancel({id: row.id})
+    const { error, code, msg } = await mainApi.cancel({ id: row.id })
     //判断状态
     row.isCancelLoading = false
     if (!error && code === 200) {
@@ -182,7 +190,7 @@ const rowCancel = async (row) => {
 //新增
 const addRowClick = () => {
     router.push({
-        name: 'expense-paymentRequest-record'
+        name: 'expense-paymentRequest-record',
     })
 }
 
@@ -198,14 +206,14 @@ const draftsCloseClick = () => {
 //草稿箱数据
 const draftNum = ref(0)
 const tableDraftsColumn = [
-    {key: 'title', name: '标题'},
-    {key: 'updateTime', name: '更新时间', width: '200'},
-    {key: 'action', name: '操作', width: '170', align: 'center'},
+    { key: 'title', name: '标题' },
+    { key: 'updateTime', name: '更新时间', width: '200' },
+    { key: 'action', name: '操作', width: '170', align: 'center' },
 ]
 const tableDraftsData = ref([])
 //获取草稿数量
 const getDraftNum = async () => {
-    const {error, code, data} = await mainApi.draft()
+    const { error, code, data } = await mainApi.draft()
     //判断状态
     if (!error && code === 200) {
         const res = getArrValue(data)
@@ -218,18 +226,18 @@ const getDraftNum = async () => {
 }
 
 //继续编辑
-const editDraftClick = ({id}) => {
+const editDraftClick = ({ id }) => {
     draftsModal.value = false
     router.push({
         name: 'expense-paymentRequest-record',
-        query: {id: id}
+        query: { id: id },
     })
 }
 
 //删除草稿
-const delDraftClick = ({id}) => {
+const delDraftClick = ({ id }) => {
     delMessage(async () => {
-        const {error, code, msg} = await mainApi.remove({id})
+        const { error, code, msg } = await mainApi.remove({ id })
         //判断状态
         if (!error && code === 200) {
             window.$message?.success(msg)

+ 2 - 2
src/views/expense/purchaseRequest/index.vue

@@ -29,11 +29,11 @@
             </div>
         </template>
         <template #extra>
-            <el-button size="large" type="warning" hc-btn @click="draftsClick">
+            <el-button v-auth-btn="['expense-purchaseRequest-draft-btn']" size="large" type="warning" hc-btn @click="draftsClick">
                 <HcIcon name="draft" />
                 <span>草稿箱{{ draftNum > 0 ? `(${draftNum})` : '' }}</span>
             </el-button>
-            <el-button size="large" type="primary" hc-btn @click="addRowClick">
+            <el-button v-auth-btn="['expense-purchaseRequest-add-btn']" size="large" type="primary" hc-btn @click="addRowClick">
                 <HcIcon name="add" />
                 <span>新增采购申请</span>
             </el-button>

+ 2 - 2
src/views/expense/vehicleRequest/index.vue

@@ -20,11 +20,11 @@
             </div>
         </template>
         <template #extra>
-            <el-button size="large" type="warning" hc-btn @click="draftsClick">
+            <el-button v-auth-btn="['expense-vehicleRequest-draft-btn']" size="large" type="warning" hc-btn @click="draftsClick">
                 <HcIcon name="draft" />
                 <span>草稿箱{{ draftNum > 0 ? `(${draftNum})` : '' }}</span>
             </el-button>
-            <el-button size="large" type="primary" hc-btn @click="addRowClick">
+            <el-button v-auth-btn="['expense-vehicleRequest-add-btn']" size="large" type="primary" hc-btn @click="addRowClick">
                 <HcIcon name="add" />
                 <span>新增用车申请</span>
             </el-button>

+ 2 - 2
src/views/people/archive/index.vue

@@ -41,10 +41,10 @@
                 </span>
             </template>
             <template #action="{ row, index }">
-                <el-button type="primary" size="small" @click="editRowClick(row)">
+                <el-button v-auth-btn="['people-archive-edit-btn']" type="primary" size="small" @click="editRowClick(row)">
                     编辑
                 </el-button>
-                <el-button type="danger" size="small" @click="delRowClick(row)">
+                <el-button v-auth-btn="['people-archive-del-btn']" type="danger" size="small" @click="delRowClick(row)">
                     删除
                 </el-button>
             </template>

+ 40 - 34
src/views/people/contract/index.vue

@@ -7,46 +7,52 @@
                 </el-select>
             </div>
             <div class="ml-4">
-                <el-button type="primary" @click="searchClick" size="large">
-                    <HcIcon name="search-2"/>
+                <el-button type="primary" size="large" @click="searchClick">
+                    <HcIcon name="search-2" />
                     <span>搜索</span>
                 </el-button>
             </div>
             <div class="ml-2">
                 <el-button size="large" @click="resetClick">
-                    <HcIcon name="close-circle"/>
+                    <HcIcon name="close-circle" />
                     <span>重置</span>
                 </el-button>
             </div>
         </template>
         <template #extra>
-            <el-button type="primary" @click="addRowClick" size="large">
-                <HcIcon name="add"/>
+            <el-button v-auth-btn="['people-contract-add-btn']" type="primary" size="large" @click="addRowClick">
+                <HcIcon name="add" />
                 <span>新增合同信息</span>
             </el-button>
         </template>
         <HcTable :loading="tableLoading" :column="tableColumn" :datas="tableData">
-            <template #conFileName="{row}">
-                <div class="text-link text-blue" @click="viewPdf(row)">{{ row?.conFileName }}</div>
+            <template #conFileName="{ row }">
+                <div class="text-link text-blue" @click="viewPdf(row)">
+                    {{ row?.conFileName }}
+                </div>
             </template>
-            <template #action="{row, index}">
-                <el-button type="primary" size="small" @click="editRowClick(row)">编辑</el-button>
-                <el-button type="danger" size="small" @click="delRowClick(row)">删除</el-button>
+            <template #action="{ row, index }">
+                <el-button v-auth-btn="['people-contract-edit-btn']" type="primary" size="small" @click="editRowClick(row)">
+                    编辑
+                </el-button>
+                <el-button v-auth-btn="['people-contract-del-btn']" type="danger" size="small" @click="delRowClick(row)">
+                    删除
+                </el-button>
             </template>
         </HcTable>
         <template #action>
-            <HcPages :pages="searchForm" @change="pageChange"/>
+            <HcPages :pages="searchForm" @change="pageChange" />
         </template>
     </HcCard>
 </template>
 
 <script setup>
-import {onActivated, ref} from 'vue'
-import mainApi from "~api/people/contract";
-import {useRouter} from 'vue-router'
-import {getuserList} from "~api/other";
-import {getArrValue} from "js-fast-way";
-import {delMessage} from "~uti/tools";
+import { onActivated, ref } from 'vue'
+import mainApi from '~api/people/contract'
+import { useRouter } from 'vue-router'
+import { getuserList } from '~api/other'
+import { getArrValue } from 'js-fast-way'
+import { delMessage } from '~uti/tools'
 
 const router = useRouter()
 
@@ -58,28 +64,28 @@ onActivated(() => {
 //获取用户下拉数据
 const userList = ref([])
 const getuserListApi = async () => {
-    const {data} = await getuserList()
+    const { data } = await getuserList()
     userList.value = getArrValue(data)
 }
 
 const searchForm = ref({
     type: 1, userId: null,
-    current: 1, size: 20, total: 0
+    current: 1, size: 20, total: 0,
 })
 
 //搜索
 const searchClick = () => {
-    searchForm.value.current = 1;
+    searchForm.value.current = 1
     getTableData()
 }
 
 //重置搜索表单
 const resetClick = () => {
-    searchForm.value = {current: 1, size: 20, total: 0}
+    searchForm.value = { current: 1, size: 20, total: 0 }
 }
 
 //分页被点击
-const pageChange = ({current, size}) => {
+const pageChange = ({ current, size }) => {
     searchForm.value.current = current
     searchForm.value.size = size
     getTableData()
@@ -88,20 +94,20 @@ const pageChange = ({current, size}) => {
 //表格参数
 const tableLoading = ref(false)
 const tableColumn = [
-    {key: 'userName', name: '姓名'},
-    {key: 'deptName', name: '部门'},
-    {key: 'startDate', name: '合同开始时间'},
-    {key: 'endDate', name: '合同结束时间'},
-    {key: 'conTypeName', name: '合同类型'},
-    {key: 'conFileName', name: '合同附件'},
-    {key: 'action', name: '操作', align: 'center', fixed: 'right'},
+    { key: 'userName', name: '姓名' },
+    { key: 'deptName', name: '部门' },
+    { key: 'startDate', name: '合同开始时间' },
+    { key: 'endDate', name: '合同结束时间' },
+    { key: 'conTypeName', name: '合同类型' },
+    { key: 'conFileName', name: '合同附件' },
+    { key: 'action', name: '操作', align: 'center', fixed: 'right' },
 ]
 
 //获取表格数据
 const tableData = ref([])
 const getTableData = async () => {
     tableLoading.value = true
-    const {data} = await mainApi.page(searchForm.value)
+    const { data } = await mainApi.page(searchForm.value)
     tableData.value = getArrValue(data['records'])
     searchForm.value.total = data['total'] || 0
     tableLoading.value = false
@@ -109,21 +115,21 @@ const getTableData = async () => {
 
 //新增
 const addRowClick = () => {
-    router.push({name: 'people-contract-info'})
+    router.push({ name: 'people-contract-info' })
 }
 
 //编辑
 const editRowClick = (row) => {
     router.push({
         name: 'people-contract-info',
-        query: {id: row.id}
+        query: { id: row.id },
     })
 }
 
 //删除
 const delRowClick = (row) => {
     delMessage(async () => {
-        const {error, code, msg} = await mainApi.remove({ids: row.id})
+        const { error, code, msg } = await mainApi.remove({ ids: row.id })
         if (!error && code === 200) {
             window.$message?.success(msg)
             getTableData().then()
@@ -134,7 +140,7 @@ const delRowClick = (row) => {
 }
 
 //查看pdf
-const viewPdf = ({fileUrl}) => {
+const viewPdf = ({ fileUrl }) => {
     if (fileUrl) {
         window.open(fileUrl, '_blank')
     } else {

+ 58 - 52
src/views/people/dimission.vue

@@ -7,40 +7,47 @@
                 </el-select>
             </div>
             <div class="ml-4">
-                <el-button type="primary" @click="searchClick" size="large">
-                    <HcIcon name="search-2"/>
+                <el-button type="primary" size="large" @click="searchClick">
+                    <HcIcon name="search-2" />
                     <span>搜索</span>
                 </el-button>
             </div>
             <div class="ml-2">
                 <el-button size="large" @click="resetClick">
-                    <HcIcon name="close-circle"/>
+                    <HcIcon name="close-circle" />
                     <span>重置</span>
                 </el-button>
             </div>
         </template>
         <template #extra>
-            <el-button type="primary" @click="addRowClick" size="large">
-                <HcIcon name="add"/>
+            <el-button v-auth-btn="['people-dimission-add-btn']" type="primary" size="large" @click="addRowClick">
+                <HcIcon name="add" />
                 <span>新增</span>
             </el-button>
         </template>
         <HcTable :loading="tableLoading" :column="tableColumn" :datas="tableData">
-            <template #conFileName="{row}">
-                <div class="text-link text-blue" @click="viewPdf(row)">{{ row?.conFileName }}</div>
+            <template #conFileName="{ row }">
+                <div class="text-link text-blue" @click="viewPdf(row)">
+                    {{ row?.conFileName }}
+                </div>
             </template>
-            <template #action="{row, index}">
-                <el-button type="primary" size="small" @click="editRowClick(row)">编辑</el-button>
-                <el-button type="danger" size="small" @click="delRowClick(row)">删除</el-button>
+            <template #action="{ row, index }">
+                <el-button v-auth-btn="['people-dimission-edit-btn']" type="primary" size="small" @click="editRowClick(row)">
+                    编辑
+                </el-button>
+                <el-button v-auth-btn="['people-dimission-del-btn']" type="danger" size="small" @click="delRowClick(row)">
+                    删除
+                </el-button>
             </template>
         </HcTable>
         <template #action>
-            <HcPages :pages="searchForm" @change="pageChange"/>
+            <HcPages :pages="searchForm" @change="pageChange" />
         </template>
 
-        <!--入职登记弹窗-->
-        <HcDialog bgColor="#ffffff" isToBody widths="42rem" :show="formModal" title="入职登记"
-                  :loading="formModalLoading" loadingText="保存中,请稍等" @close="formModalClose" @save="formModalSave"
+        <!-- 入职登记弹窗 -->
+        <HcDialog
+            bg-color="#ffffff" is-to-body widths="42rem" :show="formModal" title="入职登记"
+            :loading="formModalLoading" loading-text="保存中,请稍等" @close="formModalClose" @save="formModalSave"
         >
             <el-form ref="formRef" :model="formModel" :rules="formRules" label-position="left" label-width="auto" size="large">
                 <el-form-item label="员工姓名:" prop="userId">
@@ -49,30 +56,29 @@
                     </el-select>
                 </el-form-item>
                 <el-form-item label="离职时间:" prop="endDate">
-                    <el-date-picker v-model="formModel.endDate" type="date" class="block" format="YYYY-MM-DD" value-format="YYYY-MM-DD"/>
+                    <el-date-picker v-model="formModel.endDate" type="date" class="block" format="YYYY-MM-DD" value-format="YYYY-MM-DD" />
                 </el-form-item>
                 <el-form-item label="离职原因:" prop="leReasion">
-                    <el-input type="textarea" v-model="formModel.leReasion" :autosize="{ minRows: 4, maxRows: 6 }"/>
+                    <el-input v-model="formModel.leReasion" type="textarea" :autosize="{ minRows: 4, maxRows: 6 }" />
                 </el-form-item>
-                <el-form-item label="离职登记表:" v-if="formModel.fileUrl">
-                    <HcFormUpload :src="formModel.fileUrl" @upload="formItemUpload"/>
+                <el-form-item v-if="formModel.fileUrl" label="离职登记表:">
+                    <HcFormUpload :src="formModel.fileUrl" @upload="formItemUpload" />
                 </el-form-item>
-                <el-form-item label="离职登记表:" v-show="!formModel.fileUrl">
-                    <HcUploadFile ref="uploadFileRef" drop :options="uploadOptions" @success="uploadFileSuccess" class="w-full"/>
+                <el-form-item v-show="!formModel.fileUrl" label="离职登记表:">
+                    <HcUploadFile ref="uploadFileRef" drop :options="uploadOptions" class="w-full" @success="uploadFileSuccess" />
                 </el-form-item>
             </el-form>
         </HcDialog>
-
     </HcCard>
 </template>
 
 <script setup>
-import {ref, onActivated} from 'vue'
-import mainApi from "~api/people/contract";
-import {getTokenHeader} from "~src/api/request/header";
-import {getuserList} from "~api/other";
-import {getObjValue, getArrValue, formValidate} from "js-fast-way"
-import {delMessage} from "~uti/tools";
+import { onActivated, ref } from 'vue'
+import mainApi from '~api/people/contract'
+import { getTokenHeader } from '~src/api/request/header'
+import { getuserList } from '~api/other'
+import { formValidate, getArrValue, getObjValue } from 'js-fast-way'
+import { delMessage } from '~uti/tools'
 
 onActivated(() => {
     getuserListApi()
@@ -82,28 +88,28 @@ onActivated(() => {
 //获取用户下拉数据
 const userList = ref([])
 const getuserListApi = async () => {
-    const {data} = await getuserList()
+    const { data } = await getuserList()
     userList.value = getArrValue(data)
 }
 
 const searchForm = ref({
     type: 3, userId: null,
-    current: 1, size: 20, total: 0
+    current: 1, size: 20, total: 0,
 })
 
 //搜索
 const searchClick = () => {
-    searchForm.value.current = 1;
+    searchForm.value.current = 1
     getTableData()
 }
 
 //重置搜索表单
 const resetClick = () => {
-    searchForm.value = {current: 1, size: 20, total: 0}
+    searchForm.value = { current: 1, size: 20, total: 0 }
 }
 
 //分页被点击
-const pageChange = ({current, size}) => {
+const pageChange = ({ current, size }) => {
     searchForm.value.current = current
     searchForm.value.size = size
     getTableData()
@@ -112,20 +118,20 @@ const pageChange = ({current, size}) => {
 //表格参数
 const tableLoading = ref(false)
 const tableColumn = [
-    {key: 'userName', name: '姓名'},
-    {key: 'deptName', name: '部门'},
-    {key: 'postName', name: '职位'},
-    {key: 'endDate', name: '离职日期'},
-    {key: 'leReasion', name: '离职原因'},
-    {key: 'conFileName', name: '离职登记表'},
-    {key: 'action', name: '操作', width: '150'}
+    { key: 'userName', name: '姓名' },
+    { key: 'deptName', name: '部门' },
+    { key: 'postName', name: '职位' },
+    { key: 'endDate', name: '离职日期' },
+    { key: 'leReasion', name: '离职原因' },
+    { key: 'conFileName', name: '离职登记表' },
+    { key: 'action', name: '操作', width: '150' },
 ]
 
 //获取表格数据
 const tableData = ref([])
 const getTableData = async () => {
     tableLoading.value = true
-    const {data} = await mainApi.page(searchForm.value)
+    const { data } = await mainApi.page(searchForm.value)
     tableData.value = getArrValue(data['records'])
     searchForm.value.total = data['total'] || 0
     tableLoading.value = false
@@ -134,7 +140,7 @@ const getTableData = async () => {
 //删除
 const delRowClick = (row) => {
     delMessage(async () => {
-        const {error, code, msg} = await mainApi.remove({ids: row.id})
+        const { error, code, msg } = await mainApi.remove({ ids: row.id })
         if (!error && code === 200) {
             window.$message?.success(msg)
             getTableData().then()
@@ -152,15 +158,15 @@ const formModalLoading = ref(false)
 const formRef = ref(null)
 const formModel = ref({})
 const formRules = {
-    userId: [{required: true, message: '请选择员工', trigger: 'change'}],
-    endDate: [{required: true, message: '请选择离职日期', trigger: 'change'}],
-    leReasion: [{required: true, message: '请输入离职原因', trigger: 'blur'}],
+    userId: [{ required: true, message: '请选择员工', trigger: 'change' }],
+    endDate: [{ required: true, message: '请选择离职日期', trigger: 'change' }],
+    leReasion: [{ required: true, message: '请输入离职原因', trigger: 'blur' }],
 }
 
 //新增
 const addRowClick = () => {
     formModalLoading.value = false
-    formModel.value = {type: 3}
+    formModel.value = { type: 3 }
     formModal.value = true
 }
 
@@ -176,20 +182,20 @@ const uploadFileRef = ref(null)
 const uploadOptions = {
     headers: getTokenHeader(),
     multiple: false,
-    size: 50
+    size: 50,
 }
 
 //上传文件
 const formItemUpload = () => {
-    uploadFileRef.value?.selectFile();
+    uploadFileRef.value?.selectFile()
 }
 
 // 文件上传成功的回调
-const uploadFileSuccess = ({resData}) => {
+const uploadFileSuccess = ({ resData }) => {
     const { pdfUrl, originalName } = getObjValue(resData)
     formModel.value.fileUrl = pdfUrl
     formModel.value.conFileName = originalName
-    uploadFileRef.value?.setModalShow(false);
+    uploadFileRef.value?.setModalShow(false)
 }
 
 
@@ -202,9 +208,9 @@ const formModalSave = async () => {
         return false
     }
     //发起请求
-    const {error, code, msg} = await mainApi.submit({
+    const { error, code, msg } = await mainApi.submit({
         ...formModel.value,
-        type: 3 //合同类型
+        type: 3, //合同类型
     })
     //判断状态
     formModalLoading.value = false
@@ -224,7 +230,7 @@ const formModalClose = () => {
 }
 
 //查看pdf
-const viewPdf = ({fileUrl}) => {
+const viewPdf = ({ fileUrl }) => {
     if (fileUrl) {
         window.open(fileUrl, '_blank')
     } else {

+ 3 - 3
src/views/people/entry.vue

@@ -20,7 +20,7 @@
             </div>
         </template>
         <template #extra>
-            <el-button type="primary" size="large" @click="addRowClick">
+            <el-button v-auth-btn="['people-entry-add-btn']" type="primary" size="large" @click="addRowClick">
                 <HcIcon name="add" />
                 <span>新增</span>
             </el-button>
@@ -32,10 +32,10 @@
                 </div>
             </template>
             <template #action="{ row, index }">
-                <el-button type="primary" size="small" @click="editRowClick(row)">
+                <el-button v-auth-btn="['people-entry-edit-btn']" type="primary" size="small" @click="editRowClick(row)">
                     编辑
                 </el-button>
-                <el-button type="danger" size="small" @click="delRowClick(row)">
+                <el-button v-auth-btn="['people-entry-del-btn']" type="danger" size="small" @click="delRowClick(row)">
                     删除
                 </el-button>
             </template>

+ 53 - 52
src/views/people/salary.vue

@@ -7,55 +7,56 @@
                 </el-select>
             </div>
             <div class="w-36 ml-2">
-                <el-date-picker v-model="searchForm.month" class="block" size="large" type="month" format="YYYY-MM" value-format="YYYY-MM"/>
+                <el-date-picker v-model="searchForm.month" class="block" size="large" type="month" format="YYYY-MM" value-format="YYYY-MM" />
             </div>
             <div class="ml-4">
-                <el-button type="primary" @click="searchClick" size="large">
-                    <HcIcon name="search-2"/>
+                <el-button type="primary" size="large" @click="searchClick">
+                    <HcIcon name="search-2" />
                     <span>搜索</span>
                 </el-button>
             </div>
             <div class="ml-2">
                 <el-button size="large" @click="resetClick">
-                    <HcIcon name="close-circle"/>
+                    <HcIcon name="close-circle" />
                     <span>重置</span>
                 </el-button>
             </div>
         </template>
         <template #extra>
-            <el-button type="primary" @click="downloadXlsx" size="large">
-                <HcIcon name="download-2"/>
+            <el-button v-auth-btn="['people-salary-load']" type="primary" size="large" @click="downloadXlsx">
+                <HcIcon name="download-2" />
                 <span>下载模板</span>
             </el-button>
-            <el-button type="primary" @click="toImportTempClick" size="large" class="ml-2">
-                <HcIcon name="folder-upload"/>
+            <el-button v-auth-btn="['people-salary-import']" type="primary" size="large" class="ml-2" @click="toImportTempClick">
+                <HcIcon name="folder-upload" />
                 <span>导入数据</span>
             </el-button>
         </template>
-        <HcTable border :isIndex="false" :loading="tableLoading" :column="tableColumn" :datas="tableData"/>
+        <HcTable border :is-index="false" :loading="tableLoading" :column="tableColumn" :datas="tableData" />
         <template #action>
-            <HcPages :pages="searchForm" @change="pageChange"/>
+            <HcPages :pages="searchForm" @change="pageChange" />
         </template>
 
-        <!--导入数据弹窗-->
-        <HcDialog bgColor="#ffffff" widths="26rem" isToBody :show="importModal" title="导入数据"
-                  saveText="上传excel" @close="importModalClose" @save="importModalSave"
+        <!-- 导入数据弹窗 -->
+        <HcDialog
+            bg-color="#ffffff" widths="26rem" is-to-body :show="importModal" title="导入数据"
+            save-text="上传excel" @close="importModalClose" @save="importModalSave"
         >
             <div class="w-full">
-                <el-date-picker v-model="uploadParams.dateInfo" class="block" type="month" size="large" format="YYYY-MM" value-format="YYYY-MM"/>
+                <el-date-picker v-model="uploadParams.dateInfo" class="block" type="month" size="large" format="YYYY-MM" value-format="YYYY-MM" />
             </div>
         </HcDialog>
-        <!--上传控件-->
-        <HcUploadFile ref="uploadFileRef" :options="uploadOptions" :params="uploadParams" @success="uploadFileSuccess"/>
+        <!-- 上传控件 -->
+        <HcUploadFile ref="uploadFileRef" :options="uploadOptions" :params="uploadParams" @success="uploadFileSuccess" />
     </HcCard>
 </template>
 
 <script setup>
-import {onActivated, ref} from 'vue'
-import {getuserList} from "~api/other";
-import mainApi from "~api/people/salary";
-import {getTokenHeader} from "~src/api/request/header";
-import {downloadBlob, getArrValue} from "js-fast-way";
+import { onActivated, ref } from 'vue'
+import { getuserList } from '~api/other'
+import mainApi from '~api/people/salary'
+import { getTokenHeader } from '~src/api/request/header'
+import { downloadBlob, getArrValue } from 'js-fast-way'
 
 onActivated(() => {
     getuserListApi()
@@ -65,29 +66,29 @@ onActivated(() => {
 //获取用户下拉数据
 const userList = ref([])
 const getuserListApi = async () => {
-    const {data} = await getuserList()
+    const { data } = await getuserList()
     userList.value = getArrValue(data)
 }
 
 
 const searchForm = ref({
     userId: null, month: null,
-    current: 1, size: 20, total: 0
+    current: 1, size: 20, total: 0,
 })
 
 //搜索
 const searchClick = () => {
-    searchForm.value.current = 1;
+    searchForm.value.current = 1
     getTableData()
 }
 
 //重置搜索表单
 const resetClick = () => {
-    searchForm.value = {current: 1, size: 20, total: 0}
+    searchForm.value = { current: 1, size: 20, total: 0 }
 }
 
 //分页被点击
-const pageChange = ({current, size}) => {
+const pageChange = ({ current, size }) => {
     searchForm.value.current = current
     searchForm.value.size = size
     getTableData()
@@ -96,34 +97,34 @@ const pageChange = ({current, size}) => {
 //表格参数
 const tableLoading = ref(false)
 const tableColumn = [
-    {key: 'name', name: '姓名', width: 100, align: 'center'},
-    {key: 'yaAllDays', name: '应出勤天数', width: 100, align: 'center'},
-    {key: 'saAllDays', name: '实际出勤天数', width: 110, align: 'center'},
-    {key: 'yearDays', name: '年假', width: 80, align: 'center'},
-    {key: 'caLeaveDays', name: '调休假', width: 80, align: 'center'},
-    {key: 'sickLeaveDays', name: '病假', width: 80, align: 'center'},
-    {key: 'absenceDays', name: '事假', width: 80, align: 'center'},
-    {key: 'basicSalary', name: '基本工资', width: 100, align: 'center'},
-    {key: 'postSalary', name: '岗位工资', width: 100, align: 'center'},
-    {key: 'meritSalary', name: '绩效工资', width: 100, align: 'center'},
-    {key: 'bonusSalary', name: '奖励', width: 100, align: 'center'},
-    {key: 'mealWance', name: '伙食补贴', width: 100, align: 'center'},
-    {key: 'otherWance', name: '其他补贴', width: 100, align: 'center'},
-    {key: 'attendDuction', name: '考勤扣款', width: 100, align: 'center'},
-    {key: 'absDuction', name: '事假扣款', width: 100, align: 'center'},
-    {key: 'otherDuction', name: '其他扣款', width: 100, align: 'center'},
-    {key: 'grossPay', name: '应发工资', width: 100, align: 'center'},
-    {key: 'personalTax', name: '代扣个人应交社保', width: 140, align: 'center'},
-    {key: 'socialSec', name: '代扣代缴个税', width: 120, align: 'center'},
-    {key: 'netSalary', name: '实发工资', width: 100, align: 'center'},
-    {key: 'desc', name: '备注', minWidth: 140, align: 'center'},
+    { key: 'name', name: '姓名', width: 100, align: 'center' },
+    { key: 'yaAllDays', name: '应出勤天数', width: 100, align: 'center' },
+    { key: 'saAllDays', name: '实际出勤天数', width: 110, align: 'center' },
+    { key: 'yearDays', name: '年假', width: 80, align: 'center' },
+    { key: 'caLeaveDays', name: '调休假', width: 80, align: 'center' },
+    { key: 'sickLeaveDays', name: '病假', width: 80, align: 'center' },
+    { key: 'absenceDays', name: '事假', width: 80, align: 'center' },
+    { key: 'basicSalary', name: '基本工资', width: 100, align: 'center' },
+    { key: 'postSalary', name: '岗位工资', width: 100, align: 'center' },
+    { key: 'meritSalary', name: '绩效工资', width: 100, align: 'center' },
+    { key: 'bonusSalary', name: '奖励', width: 100, align: 'center' },
+    { key: 'mealWance', name: '伙食补贴', width: 100, align: 'center' },
+    { key: 'otherWance', name: '其他补贴', width: 100, align: 'center' },
+    { key: 'attendDuction', name: '考勤扣款', width: 100, align: 'center' },
+    { key: 'absDuction', name: '事假扣款', width: 100, align: 'center' },
+    { key: 'otherDuction', name: '其他扣款', width: 100, align: 'center' },
+    { key: 'grossPay', name: '应发工资', width: 100, align: 'center' },
+    { key: 'personalTax', name: '代扣个人应交社保', width: 140, align: 'center' },
+    { key: 'socialSec', name: '代扣代缴个税', width: 120, align: 'center' },
+    { key: 'netSalary', name: '实发工资', width: 100, align: 'center' },
+    { key: 'desc', name: '备注', minWidth: 140, align: 'center' },
 ]
 
 //获取表格数据
 const tableData = ref([])
 const getTableData = async () => {
     tableLoading.value = true
-    const {data} = await mainApi.page(searchForm.value)
+    const { data } = await mainApi.page(searchForm.value)
     tableData.value = getArrValue(data['records'])
     searchForm.value.total = data['total'] || 0
     tableLoading.value = false
@@ -131,7 +132,7 @@ const getTableData = async () => {
 
 //下载模板
 const downloadXlsx = async () => {
-    const {error, disposition, res} = await mainApi.exportTemplate()
+    const { error, disposition, res } = await mainApi.exportTemplate()
     if (!error && disposition) {
         downloadBlob(res, disposition)
     } else {
@@ -147,13 +148,13 @@ const uploadTime = ref(null)
 //上传配置
 const uploadFileRef = ref(null)
 const uploadParams = ref({
-    dateInfo: null
+    dateInfo: null,
 })
 const uploadOptions = {
     url: '/api/blade-control/userpayinfo/import-userpay',
     headers: getTokenHeader(),
     multiple: false,
-    size: 50
+    size: 50,
 }
 
 //打开导入数据弹窗
@@ -164,7 +165,7 @@ const toImportTempClick = () => {
 
 //导入数据弹窗保存
 const importModalSave = () => {
-    if(uploadParams.value.dateInfo) {
+    if (uploadParams.value.dateInfo) {
         uploadFileRef.value?.selectFile()
     } else {
         window.$message?.error('请先选择月份')

+ 48 - 44
src/views/program/annual/index.vue

@@ -8,37 +8,41 @@
             </div>
         </template> -->
         <template #extra>
-            <el-button size="large" type="primary" hc-btn @click="addRowClick">
-                <HcIcon name="add"/>
+            <el-button v-auth-btn="['program_annual_add_btn']" size="large" type="primary" hc-btn @click="addRowClick">
+                <HcIcon name="add" />
                 <span>新增经营预算</span>
             </el-button>
         </template>
         <HcTable :column="tableColumn" :datas="tableData" :loading="tableLoading">
-            <template #name="{row}">
-                <span class="text-blue text-hover" @click="rowNameClick(row)">{{row.name}}</span>
+            <template #name="{ row }">
+                <span class="text-blue text-hover" @click="rowNameClick(row)">{{ row.name }}</span>
             </template>
-            <template #key2="{row}">
-                <span >{{row.budgetStartTime?row.budgetStartTime:''}}</span>
-                <span  v-if="row.budgetEndTime">~</span>
-                <span >{{row.budgetEndTime?row.budgetEndTime:''}}</span>
+            <template #key2="{ row }">
+                <span>{{ row.budgetStartTime ? row.budgetStartTime : '' }}</span>
+                <span v-if="row.budgetEndTime">~</span>
+                <span>{{ row.budgetEndTime ? row.budgetEndTime : '' }}</span>
             </template>
-            <template #action="{row,index}">
-                <el-button plain size="small" type="primary" @click="editRowClick(row)">编辑</el-button>
-                <el-button plain size="small" type="danger" @click="rowCancel(row)">删除</el-button>
+            <template #action="{ row, index }">
+                <el-button v-auth-btn="['program_annual_edit_btn']" plain size="small" type="primary" @click="editRowClick(row)">
+                    编辑
+                </el-button>
+                <el-button v-auth-btn="['program_annual_del_btn']" plain size="small" type="danger" @click="rowCancel(row)">
+                    删除
+                </el-button>
             </template>
         </HcTable>
         <template #action>
-            <HcPages :pages="searchForm" @change="pageChange"/>
+            <HcPages :pages="searchForm" @change="pageChange" />
         </template>
     </HcCard>
 </template>
 
 <script setup>
-import {ref,onMounted,onActivated} from "vue";
-import annualApi from '~api/program/annual.js';
-import {getArrValue} from "js-fast-way"
-import {delMessage} from "~uti/tools";
-import {useRouter, useRoute} from 'vue-router'
+import { onActivated, onMounted, ref } from 'vue'
+import annualApi from '~api/program/annual.js'
+import { getArrValue } from 'js-fast-way'
+import { delMessage } from '~uti/tools'
+import { useRoute, useRouter } from 'vue-router'
 
 const router = useRouter()
 
@@ -52,18 +56,18 @@ onActivated(()=>{
 })
 //计划类型
 const planType = ref([
-    {name: '临时计划', key: '1'},
-    {name: '月度计划', key: '2'},
-    {name: '年度计划', key: '3'},
+    { name: '临时计划', key: '1' },
+    { name: '月度计划', key: '2' },
+    { name: '年度计划', key: '3' },
 ])
 
 //搜索表单
 const searchForm = ref({
-    planType: null, current: 1, size: 20, total: 0
+    planType: null, current: 1, size: 20, total: 0,
 })
 
 //分页被点击
-const pageChange = ({current, size}) => {
+const pageChange = ({ current, size }) => {
     searchForm.value.current = current
     searchForm.value.size = size
     getTableData()
@@ -72,25 +76,25 @@ const pageChange = ({current, size}) => {
 //获取数据
 const tableLoading = ref(false)
 const tableColumn = [
-    {key: 'name', name: '预算名称'},
-    {key: 'key2', name: '起止日期', width: '220', align: 'center'},
-    {key: 'totalBudget', name: '总经营预算', width: '120', align: 'center'},
-    {key: 'annualContractTarget', name: '年度合同额指标', width: '140', align: 'center'},
-    {key: 'annualProfitTarget', name: '年度利润指标', width: '120', align: 'center'},
-    {key: 'staffCost', name: '工资支出', width: '120', align: 'center'},
-    {key: 'manageDisburse', name: '其他管理支出', width: '120', align: 'center'},
-    {key: 'action', name: '操作', width: '150', align: 'center'},
+    { key: 'name', name: '预算名称' },
+    { key: 'key2', name: '起止日期', width: '220', align: 'center' },
+    { key: 'totalBudget', name: '总经营预算', width: '120', align: 'center' },
+    { key: 'annualContractTarget', name: '年度合同额指标', width: '140', align: 'center' },
+    { key: 'annualProfitTarget', name: '年度利润指标', width: '120', align: 'center' },
+    { key: 'staffCost', name: '工资支出', width: '120', align: 'center' },
+    { key: 'manageDisburse', name: '其他管理支出', width: '120', align: 'center' },
+    { key: 'action', name: '操作', width: '150', align: 'center' },
 ]
 const tableData = ref([
-    {id: 1, key1: '2023年5月度计划', key2: '2022-07-01~2027-04-12', key3: '111',  key4: '36', key5: '30', key6: '6', key7: '张三'},
-    {id: 2, key1: '2023年5月度计划', key2: '2022-07-01~2027-04-12', key3: '111',  key4: '36', key5: '30', key6: '6', key7: '张三'},
-    {id: 3, key1: '2023年5月度计划', key2: '2022-07-01~2027-04-12', key3: '111',  key4: '36', key5: '30', key6: '6', key7: '张三'},
-    {id: 4, key1: '2023年5月度计划', key2: '2022-07-01~2027-04-12', key3: '111',  key4: '36', key5: '30', key6: '6', key7: '张三'},
+    { id: 1, key1: '2023年5月度计划', key2: '2022-07-01~2027-04-12', key3: '111', key4: '36', key5: '30', key6: '6', key7: '张三' },
+    { id: 2, key1: '2023年5月度计划', key2: '2022-07-01~2027-04-12', key3: '111', key4: '36', key5: '30', key6: '6', key7: '张三' },
+    { id: 3, key1: '2023年5月度计划', key2: '2022-07-01~2027-04-12', key3: '111', key4: '36', key5: '30', key6: '6', key7: '张三' },
+    { id: 4, key1: '2023年5月度计划', key2: '2022-07-01~2027-04-12', key3: '111', key4: '36', key5: '30', key6: '6', key7: '张三' },
 ])
 
-const getTableData = async() => {
+const getTableData = async () => {
     tableLoading.value = true
-    const {error, code, data} = await annualApi.getPage(searchForm.value)
+    const { error, code, data } = await annualApi.getPage(searchForm.value)
     tableLoading.value = false
     if (!error && code === 200) {
         tableData.value = getArrValue(data['records'])
@@ -107,8 +111,8 @@ const rowNameClick = (row) => {
         name: 'program-annual-view',
         query: {
             id: row.id,
-            name:row.name
-        }
+            name:row.name,
+        },
     })
 }
 
@@ -117,8 +121,8 @@ const addRowClick = () => {
     router.push({
         name: 'program-annual-form',
         query:{
-            type:'add'
-        }
+            type:'add',
+        },
     })
 }
 
@@ -128,15 +132,15 @@ const editRowClick = (row) => {
         name: 'program-annual-form',
         query: {
             id: row.id,
-            type:'edit'
-        }
+            type:'edit',
+        },
     })
 }
 //删除
 const rowCancel = (row) => {
     delMessage(async () => {
-        const {error, code, msg} = await annualApi.deleteAnnualBudget({
-            id: row.id
+        const { error, code, msg } = await annualApi.deleteAnnualBudget({
+            id: row.id,
         })
         //判断状态
         if (!error && code === 200) {

+ 82 - 76
src/views/program/section/index.vue

@@ -3,88 +3,94 @@
         <template #header>
             <div class="w-36">
                 <el-select v-model="searchForm.departmentType" block clearable placeholder="选择部门" size="large">
-                    <el-option v-for="item in department" :label="item.deptName" :value="item.deptCategory"/>
+                    <el-option v-for="item in department" :label="item.deptName" :value="item.deptCategory" />
                 </el-select>
             </div>
             <div class="w-36 ml-4">
-                <el-date-picker class="block" v-model="searchForm.planStartDate" type="month" value-format="YYYY-MM" placeholder="开始日期" clearable size="large"/>
+                <el-date-picker v-model="searchForm.planStartDate" class="block" type="month" value-format="YYYY-MM" placeholder="开始日期" clearable size="large" />
+            </div>
+            <div class="mx-2">
+                ~
             </div>
-            <div class="mx-2">~</div>
             <div class="w-36">
-                <el-date-picker class="block" v-model="searchForm.planEndDate" type="month" value-format="YYYY-MM" placeholder="结束日期" clearable size="large"/>
+                <el-date-picker v-model="searchForm.planEndDate" class="block" type="month" value-format="YYYY-MM" placeholder="结束日期" clearable size="large" />
             </div>
             <div class="ml-4">
                 <el-button size="large" type="primary" @click="searchClick">
-                    <HcIcon name="search-2"/>
+                    <HcIcon name="search-2" />
                     <span>搜索</span>
                 </el-button>
             </div>
             <div class="ml-2">
                 <el-button size="large" @click="resetClick">
-                    <HcIcon name="close-circle"/>
+                    <HcIcon name="close-circle" />
                     <span>重置</span>
                 </el-button>
             </div>
         </template>
         <template #extra>
-            <el-button size="large" type="primary" hc-btn @click="addRowClick">
-                <HcIcon name="add"/>
+            <el-button v-auth-btn="['program_section_add_btn']" size="large" type="primary" hc-btn @click="addRowClick">
+                <HcIcon name="add" />
                 <span>新增预算计划</span>
             </el-button>
         </template>
         <HcTable :column="tableColumn" :datas="tableData" :loading="tableLoading">
-            <template #planName="{row}">
-                <span class="text-blue" @click="rowNameClick(row)">{{row.planName}}</span>
+            <template #planName="{ row }">
+                <span class="text-blue" @click="rowNameClick(row)">{{ row.planName }}</span>
             </template>
-            <template #key2="{row}">
-                <span >{{row.planStartDate?row.planStartDate:''}}</span>
-                <span  v-if="row.planStartDate">~</span>
-                <span >{{row.planEndDate?row.planEndDate:''}}</span>
+            <template #key2="{ row }">
+                <span>{{ row.planStartDate ? row.planStartDate : '' }}</span>
+                <span v-if="row.planStartDate">~</span>
+                <span>{{ row.planEndDate ? row.planEndDate : '' }}</span>
             </template>
-            <template #planTotal="{row}">
-                <span>{{row.planTotal}}条</span>
+            <template #planTotal="{ row }">
+                <span>{{ row.planTotal }}条</span>
             </template>
-            <template #finishPlanTotal="{row}">
-                <span>{{row.finishPlanTotal}}条</span>
+            <template #finishPlanTotal="{ row }">
+                <span>{{ row.finishPlanTotal }}条</span>
             </template>
-            <template #beginPlanTotal="{row}">
-                <span>{{row.beginPlanTotal}}条</span>
+            <template #beginPlanTotal="{ row }">
+                <span>{{ row.beginPlanTotal }}条</span>
             </template>
-            <template #action="{row,index}">
-                <el-button size="small" type="primary" @click="editRowClick(row)">编辑</el-button>
-                <el-button size="small" type="danger" @click="delRowClick(row)">删除</el-button>
+            <template #action="{ row, index }">
+                <el-button v-auth-btn="['program_section_edit_btn']" size="small" type="primary" @click="editRowClick(row)">
+                    编辑
+                </el-button>
+                <el-button v-auth-btn="['program_section_del_btn']" size="small" type="danger" @click="delRowClick(row)">
+                    删除
+                </el-button>
             </template>
         </HcTable>
         <template #action>
-            <HcPages :pages="searchForm" @change="pageChange"/>
+            <HcPages :pages="searchForm" @change="pageChange" />
         </template>
 
-        <!--选择计划所属月份-->
-        <HcDialog bgColor="#ffffff" isToBody title="选择计划所属月份" widths="26rem" saveText="确认"
-                  :show="monthModal" @close="monthCloseClick" @save="monthSaveClick"
+        <!-- 选择计划所属月份 -->
+        <HcDialog
+            bg-color="#ffffff" is-to-body title="选择计划所属月份" widths="26rem" save-text="确认"
+            :show="monthModal" @close="monthCloseClick" @save="monthSaveClick"
         >
             <el-form ref="formMonthRef" label-position="top" size="large" :model="formMonthModel" :rules="formMonthRules">
                 <el-form-item label="选择部门" prop="section">
-                    <el-select v-model="formMonthModel.section" block placeholder="选择部门"  @change="changeDpt">
-                        <el-option v-for="item in department" :label="item.deptName" :value="item.deptCategory"/>
+                    <el-select v-model="formMonthModel.section" block placeholder="选择部门" @change="changeDpt">
+                        <el-option v-for="item in department" :label="item.deptName" :value="item.deptCategory" />
                     </el-select>
                 </el-form-item>
                 <el-form-item label="选择月份" prop="month">
-                    <el-date-picker type="month" class="block" v-model="formMonthModel.month" format="YYYY-MM" value-format="YYYY-MM"/>
+                    <el-date-picker v-model="formMonthModel.month" type="month" class="block" format="YYYY-MM" value-format="YYYY-MM" />
                 </el-form-item>
             </el-form>
         </HcDialog>
-
     </HcCard>
 </template>
 
 <script setup>
-import {ref,onMounted,onActivated,watch} from "vue";
-import {useRouter} from 'vue-router'
-import sectionApi from '~api/program/section.js';
-import {getArrValue,getObjValue,formValidate} from "js-fast-way"
-import { getdepartmentList} from "~api/other";
-import {delMessage} from "~uti/tools";
+import { onActivated, onMounted, ref, watch } from 'vue'
+import { useRouter } from 'vue-router'
+import sectionApi from '~api/program/section.js'
+import { formValidate, getArrValue, getObjValue } from 'js-fast-way'
+import { getdepartmentList } from '~api/other'
+import { delMessage } from '~uti/tools'
 
 const router = useRouter()
 onActivated(()=>{
@@ -100,22 +106,22 @@ const department = ref([
 //搜索表单
 const searchForm = ref({
     planType: null, planStartDate: null, planEndDate: null, departmentType: null,
-    current: 1, size: 20, total: 0
+    current: 1, size: 20, total: 0,
 })
 
 //搜索
 const searchClick = () => {
-    searchForm.value.current = 1;
+    searchForm.value.current = 1
     getTableData()
 }
 
 //重置搜索表单
 const resetClick = () => {
-    searchForm.value = {current: 1, size: 20, total: 0}
+    searchForm.value = { current: 1, size: 20, total: 0 }
 }
 
 //分页被点击
-const pageChange = ({current, size}) => {
+const pageChange = ({ current, size }) => {
     searchForm.value.current = current
     searchForm.value.size = size
     getTableData()
@@ -124,23 +130,23 @@ const pageChange = ({current, size}) => {
 //获取数据
 const tableLoading = ref(false)
 const tableColumn = [
-    {key: 'planName', name: '计划名称'},
-    {key: 'key2', name: '计划起止日期', width: '220', align: 'center'},
-    {key: 'planTotal', name: '计划数量', width: '120', align: 'center'},
-    {key: 'finishPlanTotal', name: '已完成计划', width: '120', align: 'center'},
-    {key: 'beginPlanTotal', name: '未完成计划', width: '120', align: 'center'},
-    {key: 'planDesignerName', name: '计划制定人', width: '120', align: 'center'},
-    {key: 'action', name: '操作', width: '160', align: 'center'},
+    { key: 'planName', name: '计划名称' },
+    { key: 'key2', name: '计划起止日期', width: '220', align: 'center' },
+    { key: 'planTotal', name: '计划数量', width: '120', align: 'center' },
+    { key: 'finishPlanTotal', name: '已完成计划', width: '120', align: 'center' },
+    { key: 'beginPlanTotal', name: '未完成计划', width: '120', align: 'center' },
+    { key: 'planDesignerName', name: '计划制定人', width: '120', align: 'center' },
+    { key: 'action', name: '操作', width: '160', align: 'center' },
 ]
 const tableData = ref([
-    {id: 1, key1: '2023年5月度计划', key2: '2022-07-01~2027-04-12', key3: '36', key4: '30', key5: '6', key6: '张三'},
-    {id: 2, key1: '2023年5月度计划', key2: '2022-07-01~2027-04-12', key3: '36', key4: '30', key5: '6', key6: '张三'},
-    {id: 3, key1: '2023年5月度计划', key2: '2022-07-01~2027-04-12', key3: '36', key4: '30', key5: '6', key6: '张三'},
+    { id: 1, key1: '2023年5月度计划', key2: '2022-07-01~2027-04-12', key3: '36', key4: '30', key5: '6', key6: '张三' },
+    { id: 2, key1: '2023年5月度计划', key2: '2022-07-01~2027-04-12', key3: '36', key4: '30', key5: '6', key6: '张三' },
+    { id: 3, key1: '2023年5月度计划', key2: '2022-07-01~2027-04-12', key3: '36', key4: '30', key5: '6', key6: '张三' },
 ])
 
-const getTableData = async() => {
+const getTableData = async () => {
     tableLoading.value = true
-    const {error, code, data} = await sectionApi.getPage(searchForm.value)
+    const { error, code, data } = await sectionApi.getPage(searchForm.value)
     tableLoading.value = false
     if (!error && code === 200) {
         tableData.value = getArrValue(data)
@@ -162,8 +168,8 @@ const addRowClick = () => {
    
 }
 //获取所属部门列表
-const getDepartmentDict=async()=>{
-    const {error, code, data} = await getdepartmentList({deptType:2})
+const getDepartmentDict = async ()=>{
+    const { error, code, data } = await getdepartmentList({ deptType:2 })
     if (!error && code === 200) {
         department.value = getArrValue(data)
 
@@ -179,50 +185,50 @@ const monthModal = ref(false)
 //选择月份的表单数据
 const formMonthRef = ref(null)
 const formMonthModel = ref({
-    section: null, month: null
+    section: null, month: null,
 })
 const formMonthRules = {
-    section: [{required: true, message: '请选择部门', trigger: 'blur'}],
-    month: [{required: true, message: '请选择月份', trigger: 'blur'}],
+    section: [{ required: true, message: '请选择部门', trigger: 'blur' }],
+    month: [{ required: true, message: '请选择月份', trigger: 'blur' }],
 }
 
 const monthCloseClick = () => {
     monthModal.value = false
 }
 //选择部门
-const deptId=ref('')
-const changeDpt=(val)=>{
-    console.log(val,'val');
+const deptId = ref('')
+const changeDpt = (val)=>{
+    console.log(val, 'val')
     department.value.forEach((ele)=>{
-        if(ele.deptCategory===val){
-            deptId.value=ele.id
+        if (ele.deptCategory === val) {
+            deptId.value = ele.id
         }
     })
-    console.log(deptId.value,'deptId.value');
+    console.log(deptId.value, 'deptId.value')
 }
 //新增部门月计划
-const addPlan=async(obj)=>{
-    const {error, code, data,msg} = await sectionApi.addDepartmentPlan( {
+const addPlan = async (obj)=>{
+    const { error, code, data, msg } = await sectionApi.addDepartmentPlan( {
         planDate:obj.month,
         departmentType:obj.section,
-        deptId:deptId.value
+        deptId:deptId.value,
     })
     if (!error && code === 200) {
        window.$message.success(msg)
         monthModal.value = false
-        changeDpt(formMonthModel.section)
+        changeDpt(formMonthModel.value.section)
         router.push({
             name: 'program-section-form',
-            query: {...formMonthModel.value,type:'add',deptId:deptId.value},
+            query: { ...formMonthModel.value, type:'add', deptId:deptId.value },
     
         })
     } 
 
 }
 //确认下一步
-const monthSaveClick =async() => {
+const monthSaveClick = async () => {
     const res = await formValidate(formMonthRef.value)
-    if(res){
+    if (res) {
         addPlan(formMonthModel.value)
     }
     monthModal.value = false
@@ -239,15 +245,15 @@ const editRowClick = (row) => {
             month:row.planDate,
             section:row.departmentType,
             type:'edit',
-            deptId:deptId.value
-        }
+            deptId:deptId.value,
+        },
     })
 }
 
 //删除
-const delRowClick = async(row) => {
-    delMessage(async() => {
-        const {error, code, data,msg} = await sectionApi.deleteById({id:row.id})  
+const delRowClick = async (row) => {
+    delMessage(async () => {
+        const { error, code, data, msg } = await sectionApi.deleteById({ id:row.id })  
             if (!error && code === 200) {
                 window.$message.success(msg)
                 getTableData()

+ 4 - 4
src/views/project/contract/index.vue

@@ -18,11 +18,11 @@
             </div>
         </template>
         <template #extra>
-            <el-button size="large" type="primary" hc-btn @click="updateClick">
+            <el-button v-auth-btn="['project_contract_update_btn']" size="large" type="primary" hc-btn @click="updateClick">
                 <HcIcon name="refresh" />
                 <span>合同回款更新</span>
             </el-button>
-            <el-button size="large" type="primary" hc-btn @click="addRowClick">
+            <el-button v-auth-btn="['project_contract_add_btn']" size="large" type="primary" hc-btn @click="addRowClick">
                 <HcIcon name="add" />
                 <span>新增项目合同信息</span>
             </el-button>
@@ -36,10 +36,10 @@
                 <span>{{ `${row.startTime}~${row.endTime}` }}</span>
             </template>
             <template #action="{ row }">
-                <el-button plain size="small" type="primary" @click="editRowClick(row)">
+                <el-button v-auth-btn="['project_contract_edit_btn']" plain size="small" type="primary" @click="editRowClick(row)">
                     编辑
                 </el-button>
-                <el-button plain size="small" type="danger" @click="delRowClick(row)">
+                <el-button v-auth-btn="['project_contract_del_btn']" plain size="small" type="danger" @click="delRowClick(row)">
                     删除
                 </el-button>
             </template>

+ 4 - 4
src/views/project/cost/index.vue

@@ -18,7 +18,7 @@
             </div>
         </template>
         <template #extra>
-            <el-button size="large" type="primary" hc-btn @click="addRowClick">
+            <el-button v-auth-btn="['project_cost_add_btn']" size="large" type="primary" hc-btn @click="addRowClick">
                 <HcIcon name="add" />
                 <span>新增项目成本测算</span>
             </el-button>
@@ -29,13 +29,13 @@
                 <span class="text-blue text-hover" @click="rowNameTap(row)">{{ row.projectName }}</span>
             </template>
             <template #action="{ row }">
-                <el-button plain size="small" type="success" :disabled="row?.approveStatus !== '1'" @click="approvalRowClick(row)">
+                <el-button v-auth-btn="['project_cost_ approval_btn']" plain size="small" type="success" :disabled="row?.approveStatus !== '1'" @click="approvalRowClick(row)">
                     提交审批
                 </el-button>
-                <el-button plain size="small" type="primary" @click="editRowClick(row)">
+                <el-button v-auth-btn="['project_cost_edit_btn']" plain size="small" type="primary" @click="editRowClick(row)">
                     编辑
                 </el-button>
-                <el-button plain size="small" type="danger" @click="delRowClick(row)">
+                <el-button v-auth-btn="['project_cost_del_btn']" plain size="small" type="danger" @click="delRowClick(row)">
                     删除
                 </el-button>
             </template>

+ 3 - 3
src/views/project/list/index.vue

@@ -45,7 +45,7 @@
             </div>
         </template>
         <template #extra>
-            <el-button size="large" type="primary" hc-btn @click="addRowClick">
+            <el-button v-auth-btn="['project_index_add_btn']" size="large" type="primary" hc-btn @click="addRowClick">
                 <HcIcon name="add" />
                 <span>新增项目信息</span>
             </el-button>
@@ -61,10 +61,10 @@
                 <span class="text-blue ">{{ row.endTime ? row.endTime : '' }}</span>
             </template>
             <template #action="{ row }">
-                <el-button plain size="small" type="primary" @click="editRowClick(row)">
+                <el-button v-auth-btn="['project_index_edit_btn']" plain size="small" type="primary" @click="editRowClick(row)">
                     编辑
                 </el-button>
-                <el-button plain size="small" type="danger" :loading="row.delLoad || false" @click="delRowClick(row)">
+                <el-button v-auth-btn="['project_index_del_btn']" plain size="small" type="danger" :loading="row.delLoad || false" @click="delRowClick(row)">
                     删除
                 </el-button>
             </template>

+ 61 - 58
src/views/system/organization.vue

@@ -1,84 +1,87 @@
 <template>
     <HcCard>
         <template #extra>
-            <el-button type="primary" @click="isedit = true" size="large" v-if="!isedit">
+            <el-button v-if="!isedit" type="primary" size="large" @click="isedit = true">
                 <span>编辑组织机构</span>
             </el-button>
-            <el-button type="primary" @click="isedit = false" size="large" v-if="isedit">
+            <el-button v-if="isedit" type="primary" size="large" @click="isedit = false">
                 <span>返回上一级</span>
             </el-button>
         </template>
-        <div class="h-full text-center" v-if="!isedit">
-            <vue3-tree-org :data="userDeptTreeData" :horizontal="false" :collapsable="false" :node-draggable="false" draggable
+        <div v-if="!isedit" class="h-full text-center">
+            <vue3-tree-org
+                :data="userDeptTreeData" :horizontal="false" :collapsable="false" :node-draggable="false" draggable
                 center :scalable="false" :default-expand-level="5" :define-menus="[]" disabled
             >
-                <template v-slot="{node}">
-                    <div class="hac-node-vue3-tree-org-label">{{ node.label }}</div>
+                <template #default="{ node }">
+                    <div class="hac-node-vue3-tree-org-label">
+                        {{ node.label }}
+                    </div>
                 </template>
             </vue3-tree-org>
         </div>
-        <div class="h-full" v-if="isedit">
+        <div v-if="isedit" class="h-full">
             <el-scrollbar>
-                <HcTreeData :datas="deptTreeData" @menuTap="treeMenuTap"/>
+                <HcTreeData :datas="deptTreeData" @menuTap="treeMenuTap" />
             </el-scrollbar>
         </div>
 
-        <HcDialog bgColor="#ffffff" isToBody :show="formModal" :title="formModalTitle"
-                  @save="formModalSave" @close="formModalClose" widths="26rem"
+        <HcDialog
+            bg-color="#ffffff" is-to-body :show="formModal" :title="formModalTitle"
+            widths="26rem" @save="formModalSave" @close="formModalClose"
         >
             <el-form ref="formRef" :model="formModel" :rules="formRules" label-position="top" size="large">
                 <el-form-item label="组织节点名称:" prop="deptName">
-                    <el-input v-model="formModel.deptName"/>
+                    <el-input v-model="formModel.deptName" />
                 </el-form-item>
                 <el-form-item label="上级组织节点名称:">
-                    <el-input v-model="formModel.parentDeptName" placeholder="已为顶级节点" disabled/>
+                    <el-input v-model="formModel.parentDeptName" placeholder="已为顶级节点" disabled />
                 </el-form-item>
                 <el-form-item label="组织节点类别:">
-                    <el-select block v-model="formModel.deptType" disabled>
-                        <el-option label="公司" :value="1"/>
-                        <el-option label="部门" :value="2"/>
-                        <el-option label="岗位" :value="3"/>
+                    <el-select v-model="formModel.deptType" block disabled>
+                        <el-option label="公司" :value="1" />
+                        <el-option label="部门" :value="2" />
+                        <el-option label="岗位" :value="3" />
                     </el-select>
                 </el-form-item>
             </el-form>
         </HcDialog>
 
-        <HcDialog bgColor="#ffffff" isToBody isTable :show="authModal" title="权限配置" @save="authModalSave" @close="authModalClose" widths="40rem">
+        <HcDialog bg-color="#ffffff" is-to-body is-table :show="authModal" title="权限配置" widths="40rem" @save="authModalSave" @close="authModalClose">
             <el-scrollbar>
-                <HcDataTree ref="authTreeRef" treeKey="id" :h-props="treeProps" :datas="treeMenuNode" :defaultCheckedKeys="treeMenuKeys" showCheckbox>
-                    <template #default="{node, data}">
-                        <span class="hc-tree-menu-label">{{node.label}}</span>
-                        <span class="hc-tree-menu-remark">{{data.remark}}</span>
+                <HcDataTree ref="authTreeRef" tree-key="id" :h-props="treeProps" :datas="treeMenuNode" :default-checked-keys="treeMenuKeys" show-checkbox>
+                    <template #default="{ node, data }">
+                        <span class="hc-tree-menu-label">{{ node.label }}</span>
+                        <span class="hc-tree-menu-remark">{{ data.remark }}</span>
                     </template>
                 </HcDataTree>
             </el-scrollbar>
         </HcDialog>
     </HcCard>
-
 </template>
 
 <script setup>
-import {onActivated, ref} from "vue";
-import mainApi from "~api/system/organization";
-import HcTreeData from "./components/HcTreeData.vue";
-import {arrIndex, formValidate, getArrValue} from "js-fast-way";
-import menuApi from "~api/system/menu";
-import {delMessage} from "~uti/tools";
+import { onActivated, ref } from 'vue'
+import mainApi from '~api/system/organization'
+import HcTreeData from './components/HcTreeData.vue'
+import { arrIndex, formValidate, getArrValue } from 'js-fast-way'
+import menuApi from '~api/system/menu'
+import { delMessage } from '~uti/tools'
 
 //显示模式
 const isedit = ref(true)
 
 //页面被激活时
 onActivated(() => {
-    getTreeData();
+    getTreeData()
     // 获取用户节点树
-    getUserDeptTreeData();
+    getUserDeptTreeData()
 })
 
 //获取树数据
 const deptTreeData = ref({})
 const getTreeData = async () => {
-    const {error, code, data} = await mainApi.deptList()
+    const { error, code, data } = await mainApi.deptList()
     if (!error && code === 200) {
         const res = await setDeptTreeData(data)
         deptTreeData.value = res[0]
@@ -90,7 +93,7 @@ const getTreeData = async () => {
 //获取树数据
 const userDeptTreeData = ref({})
 const getUserDeptTreeData = async () => {
-    const {error, code, data} = await mainApi.treeUserdept()
+    const { error, code, data } = await mainApi.treeUserdept()
     if (!error && code === 200) {
         const res = await setDeptTreeData(data)
         userDeptTreeData.value = res[0]
@@ -100,11 +103,11 @@ const getUserDeptTreeData = async () => {
 }
 
 //组织架构显示信息
-const lavel1_style = {color: "#fff", background: "#108ffe", borderColor: "#108ffe", padding: '10px 15px'}
-const lavel2_style = {background: "#E8E8E8", padding: '10px 15px'}
+const lavel1_style = { color: '#fff', background: '#108ffe', borderColor: '#108ffe', padding: '10px 15px' }
+const lavel2_style = { background: '#E8E8E8', padding: '10px 15px' }
 const lavel3_style = {
-    background: "none", border: 'none', borderBottom: '1px solid #c8c8c8', borderRadius: '0',
-    boxShadow: 'none', fontSize: '14px', padding: '6px 2px'
+    background: 'none', border: 'none', borderBottom: '1px solid #c8c8c8', borderRadius: '0',
+    boxShadow: 'none', fontSize: '14px', padding: '6px 2px',
 }
 
 //遍历处理组织结构数据树
@@ -112,9 +115,9 @@ const lavel3_style = {
 const setDeptTreeData = async (data) => {
     let res = [], arr = getArrValue(data)
     for (let i = 0; i < arr.length; i++) {
-        const {deptName, deptType, children} = arr[i]
-        const obj = {...arr[i], label: deptName, children: [],
-            style: deptType === 1 ? lavel1_style : deptType === 2 ? lavel2_style : lavel3_style
+        const { deptName, deptType, children } = arr[i]
+        const obj = { ...arr[i], label: deptName, children: [],
+            style: deptType === 1 ? lavel1_style : deptType === 2 ? lavel2_style : lavel3_style,
         }
         if (children && children.length > 0) {
             obj.children = await setDeptTreeData(children)
@@ -132,34 +135,34 @@ const formModalTitle = ref('')
 const formRef = ref(null)
 const formModel = ref({})
 const formRules = {
-    deptName: {required: true, trigger: 'blur', message: "请输入组织节点名称"}
+    deptName: { required: true, trigger: 'blur', message: '请输入组织节点名称' },
 }
 
 //树节点的菜单点击事件
 const treeInfo = ref({})
-const treeMenuTap = ({key, node, data}) => {
+const treeMenuTap = ({ key, node, data }) => {
     treeInfo.value = data
     if (key === 'add') {
         formModel.value = {
             parentId: data.id,
             parentDeptName: data.deptName,
             //如果当前节点为顶级节点,则为部门类型,如果为部门节点,则为岗位类型
-            deptType: node.level === 1 ? 2 : node.level === 2 ? 3 : 0
+            deptType: node.level === 1 ? 2 : node.level === 2 ? 3 : 0,
         }
         const type = node.level === 1 ? '部门' : node.level === 2 ? '岗位' : '未知'
         formModalTitle.value = '新增' + type + '信息'
         formModal.value = true
     } else if (key === 'edit') {
         if (node.level > 1) {
-            const parent = node.parent.data;
+            const parent = node.parent.data
             formModel.value = {
                 parentDeptName: parent.deptName,
-                ...data
+                ...data,
             }
         } else {
             formModel.value = data
         }
-        const type = node.level === 1 ? '公司' : node.level === 2 ? '部门' : node.level === 3 ? '岗位' :'未知'
+        const type = node.level === 1 ? '公司' : node.level === 2 ? '部门' : node.level === 3 ? '岗位' : '未知'
         formModalTitle.value = '编辑' + type + '信息'
         formModal.value = true
     } else if (key === 'del') {
@@ -175,7 +178,7 @@ const treeMenuTap = ({key, node, data}) => {
 const formModalSave = async () => {
     const isForm = await formValidate(formRef.value)
     if (isForm) {
-        const {error, code, msg} = await mainApi.submit(formModel.value)
+        const { error, code, msg } = await mainApi.submit(formModel.value)
         if (!error && code === 200) {
             window?.$message?.success(msg)
             getTreeData().then()
@@ -196,7 +199,7 @@ const formModalClose = () => {
 
 //删除节点
 const delNodeClick = async (data) => {
-    const {error, code, msg} = await mainApi.remove(data.id)
+    const { error, code, msg } = await mainApi.remove(data.id)
     if (!error && code === 200) {
         window?.$message?.success(msg)
         getTreeData().then()
@@ -211,7 +214,7 @@ const authTreeRef = ref(null)
 const treeMenuNode = ref([])
 const treeProps = ref({
     label: 'name',
-    children: 'children'
+    children: 'children',
 })
 
 //默认勾选的节点
@@ -225,11 +228,11 @@ const authModalShow = (data) => {
 }
 
 const getMenuData = async () => {
-    const {error, code, data} = await menuApi.lazyList({})
+    const { error, code, data } = await menuApi.lazyList({})
     if (!error && code === 200) {
         const arr = getArrValue(data)
         //移除系统设置的菜单
-        const index = arrIndex(arr, 'code', "system")
+        const index = arrIndex(arr, 'code', 'system')
         arr.splice(index, 1)
         //赋值
         treeMenuNode.value = arr
@@ -241,15 +244,15 @@ const getMenuData = async () => {
 //获取已勾选的菜单key
 const getMenuKeyApi = async (id) => {
     treeMenuKeys.value = []
-    const {error, code, data} = await mainApi.getMenuKeys(id)
+    const { error, code, data } = await mainApi.getMenuKeys(id)
     if (!error && code === 200) {
         let newArr = [], arr = getArrValue(data?.usermenu)
         arr.forEach((item)=>{
-            let res = item.split("---");
-            if(res[1] === 'all'){
+            let res = item.split('---')
+            if (res[1] === 'all') {
                 newArr.push(res[0])
             }
-        });
+        })
         treeMenuKeys.value.push(newArr)
         authTreeRef.value?.treeRef.setCheckedKeys(newArr)
     } else {
@@ -259,9 +262,9 @@ const getMenuKeyApi = async (id) => {
 
 //权限配置弹窗保存
 const authModalSave = async () => {
-    let id = treeInfo.value?.id, menuAll = [];
-    const menuList = authTreeRef.value?.treeRef.getCheckedKeys()        // 全选节点
-    const menuHalf = authTreeRef.value?.treeRef.getHalfCheckedKeys()    // 半选
+    let id = treeInfo.value?.id, menuAll = []
+    const menuList = authTreeRef.value?.treeRef.getCheckedKeys() // 全选节点
+    const menuHalf = authTreeRef.value?.treeRef.getHalfCheckedKeys() // 半选
     menuList.forEach((id)=>{
         menuAll.push(id + '---all')
     })
@@ -269,7 +272,7 @@ const authModalSave = async () => {
         menuAll.push(id + '---hanlf')
     })
     //发起请求
-    const {error, code, msg} = await mainApi.setMenuGrant(id, menuAll)
+    const { error, code, msg } = await mainApi.setMenuGrant(id, menuAll)
     if (!error && code === 200) {
         window?.$message?.success(msg)
         authModal.value = false

+ 103 - 96
src/views/system/user.vue

@@ -3,82 +3,89 @@
         <template #header>
             <div class="w-40">
                 <el-select v-model="searchForm.deptId" placeholder="选择岗位类型" clearable size="large">
-                    <el-option v-for="item in searchOrganization" :label="item.deptName" :value="item.id"/>
+                    <el-option v-for="item in searchOrganization" :label="item.deptName" :value="item.id" />
                 </el-select>
             </div>
             <div class="w-64 ml-3">
-                <el-input v-model="searchForm.realName" size="large" placeholder="请输入名称搜索" clearable/>
+                <el-input v-model="searchForm.realName" size="large" placeholder="请输入名称搜索" clearable />
             </div>
             <div class="ml-3">
-                <el-button type="primary" @click="searchClick" size="large">
-                    <HcIcon name="search-2"/>
+                <el-button type="primary" size="large" @click="searchClick">
+                    <HcIcon name="search-2" />
                     <span>搜索</span>
                 </el-button>
             </div>
         </template>
         <template #extra>
-            <el-button type="primary" @click="addUserClick" size="large">
-                <HcIcon name="add"/>
+            <el-button v-auth-btn="['system-user-add-btn']" type="primary" size="large" @click="addUserClick">
+                <HcIcon name="add" />
                 <span>创建账户</span>
             </el-button>
-            <el-button type="danger" @click="delClick" size="large" :disabled="tableCheckedKeys.length <= 0">
-                <HcIcon name="delete-bin-2"/>
+            <el-button v-auth-btn="['system-user-del-btn']" type="danger" size="large" :disabled="tableCheckedKeys.length <= 0" @click="delClick">
+                <HcIcon name="delete-bin-2" />
                 <span>注销账户</span>
             </el-button>
         </template>
-        <HcTable :column="tableColumn" :datas="tableData" isCheck @selection-change="tableSelectionChange" :loading="tableLoaing">
-            <template #status="{row}">
-                <span>{{row.status === 1 ? '启用': '停用'}}</span>
+        <HcTable :column="tableColumn" :datas="tableData" is-check :loading="tableLoaing" @selection-change="tableSelectionChange">
+            <template #status="{ row }">
+                <span>{{ row.status === 1 ? '启用' : '停用' }}</span>
             </template>
-            <template #action="{row}">
-                <el-button size="small" type="primary" @click="rowEidtClick(row)">编辑</el-button>
+            <template #action="{ row }">
+                <el-button v-auth-btn="['system-user-edit-btn']" size="small" type="primary" @click="rowEidtClick(row)">
+                    编辑
+                </el-button>
             </template>
         </HcTable>
         <template #action>
-            <HcPages :pages="searchForm" @change="pageChange"></HcPages>
+            <HcPages :pages="searchForm" @change="pageChange" />
         </template>
 
-        <!--用户信息弹窗-->
-        <HcDialog bgColor="#ffffff" isToBody isTable :show="formModal" :saveText="formModel.id ? '提交保存' : '确定创建'" :title="formModel.id ? '编辑账户' : '创建账户'"
-                  @save="formModalSave" @close="formModalClose" widths="51rem"
+        <!-- 用户信息弹窗 -->
+        <HcDialog
+            bg-color="#ffffff" is-to-body is-table :show="formModal" :save-text="formModel.id ? '提交保存' : '确定创建'" :title="formModel.id ? '编辑账户' : '创建账户'"
+            widths="51rem" @save="formModalSave" @close="formModalClose"
         >
             <HcCardItem ui="hac-bg-grey" class="h-auto">
                 <template #header>
-                    <div class="hac-card-title">基础信息</div>
+                    <div class="hac-card-title">
+                        基础信息
+                    </div>
                 </template>
                 <template #extra>
-                    <span class="text-sm text-orange" v-if="formModel.id">如果不需要修改密码,就请不要填写密码信息</span>
+                    <span v-if="formModel.id" class="text-sm text-orange">如果不需要修改密码,就请不要填写密码信息</span>
                 </template>
                 <el-form ref="formRef" :model="formModel" :rules="formRules" size="large" label-width="auto" label-position="left">
                     <el-form-item label="登录账号:" prop="account">
-                        <el-input v-model="formModel.account" placeholder="仅支持英文或拼音" autocomplete="new-password" onkeyup="value=value.replace(/[^\w\.\/]/ig,'')" :disabled="!!formModel.id"/>
+                        <el-input v-model="formModel.account" placeholder="仅支持英文或拼音" autocomplete="new-password" onkeyup="value=value.replace(/[^\w\.\/]/ig,'')" :disabled="!!formModel.id" />
                     </el-form-item>
-                    <el-form-item label="登录密码:" :prop="formModel.id?'':'password'">
-                        <el-input v-model="formModel.password" placeholder="请输入英文开头可包含数字的密码" autocomplete="new-password" show-password type="password" onkeyup="value=value.replace(/[^\w\.\/]/ig,'')"/>
+                    <el-form-item label="登录密码:" :prop="formModel.id ? '' : 'password'">
+                        <el-input v-model="formModel.password" placeholder="请输入英文开头可包含数字的密码" autocomplete="new-password" show-password type="password" onkeyup="value=value.replace(/[^\w\.\/]/ig,'')" />
                     </el-form-item>
-                    <el-form-item label="确认密码:" :prop="formModel.id?'':'password1'">
-                        <el-input v-model="formModel.password1" placeholder="请再次输入密码" autocomplete="new-password" show-password type="password" onkeyup="value=value.replace(/[^\w\.\/]/ig,'')"/>
+                    <el-form-item label="确认密码:" :prop="formModel.id ? '' : 'password1'">
+                        <el-input v-model="formModel.password1" placeholder="请再次输入密码" autocomplete="new-password" show-password type="password" onkeyup="value=value.replace(/[^\w\.\/]/ig,'')" />
                     </el-form-item>
                 </el-form>
             </HcCardItem>
             <HcCardItem ui="hac-bg-grey" class="h-auto mt-4">
                 <template #header>
-                    <div class="hac-card-title">机构信息</div>
+                    <div class="hac-card-title">
+                        机构信息
+                    </div>
                 </template>
                 <el-form ref="formRef3" :model="formModel" :rules="formRules" label-position="left" label-width="auto" size="large">
                     <el-form-item label="部门:" prop="deptId">
-                        <el-select v-model="formModel.deptId" placeholder="选择部门" style="width: 100%;" @change="getpostData" clearable>
-                                        <el-option v-for="item in sectionData" :label="item.deptName" :value="item.id"/>
+                        <el-select v-model="formModel.deptId" placeholder="选择部门" style="width: 100%;" clearable @change="getpostData">
+                            <el-option v-for="item in sectionData" :label="item.deptName" :value="item.id" />
                         </el-select>
                     </el-form-item>
                     <el-form-item label="岗位:" prop="postId">
-                        <el-select v-model="formModel.postId" placeholder="选择岗位" style="width: 100%;" clearable  :getdata="getpostData(formModel.deptId)">
+                        <el-select v-model="formModel.postId" placeholder="选择岗位" style="width: 100%;" clearable :getdata="getpostData(formModel.deptId)">
                             <el-option v-for="item in postData" :label="item.deptName" :value="item.id" />
                         </el-select>
                     </el-form-item>
                     <el-form-item label="部门负责人:">
-                        <el-select v-model="isLeaderIds" placeholder="是否为部门负责人"   style="width: 100%;" multiple clearable>
-                            <el-option v-for="item in userDeptData" :label="item.deptName" :value="item.id"/>
+                        <el-select v-model="isLeaderIds" placeholder="是否为部门负责人" style="width: 100%;" multiple clearable>
+                            <el-option v-for="item in userDeptData" :label="item.deptName" :value="item.id" />
                         </el-select>
                     </el-form-item>
                 </el-form>
@@ -121,44 +128,44 @@
 
             <HcCardItem ui="hac-bg-grey" class="h-auto mt-4">
                 <template #header>
-                    <div class="hac-card-title">详细信息</div>
+                    <div class="hac-card-title">
+                        详细信息
+                    </div>
                 </template>
                 <el-form ref="formRef1" :model="formModel" :rules="formRules" label-position="left" label-width="auto" size="large">
                     <el-form-item label="用户姓名:" prop="realName">
-                        <el-input v-model="formModel.realName"/>
+                        <el-input v-model="formModel.realName" />
                     </el-form-item>
                     <el-form-item label="手机号码:" prop="phone">
-                        <el-input v-model="formModel.phone" placeholder="请输入绑定手机"/>
+                        <el-input v-model="formModel.phone" placeholder="请输入绑定手机" />
                     </el-form-item>
                     <el-form-item label="身份证号:">
-                        <el-input v-model="formModel.idNumber"/>
+                        <el-input v-model="formModel.idNumber" />
                     </el-form-item>
                     <el-form-item label="日单价:" prop="oneMoney">
-                        <el-input v-model="formModel.oneMoney"/>
-
+                        <el-input v-model="formModel.oneMoney" />
                     </el-form-item>
                     <el-form-item label="启用状态:" prop="status">
                         <el-select v-model="formModel.status" class="block">
-                            <el-option label="启用" :value="1"/>
-                            <el-option label="停用" :value="0"/>
+                            <el-option label="启用" :value="1" />
+                            <el-option label="停用" :value="0" />
                         </el-select>
                     </el-form-item>
                 </el-form>
             </HcCardItem>
         </HcDialog>
-
     </HcCard>
 </template>
 
 <script setup>
-import {ref, onMounted} from "vue";
-import mainApi from '~api/system/user';
-import organizationApi from '~api/system/organization';
-import {arrIndex, arrToId, formValidate, isPhone, getArrValue, isIdCard} from "js-fast-way"
-import {Plus, Delete} from '@element-plus/icons-vue'
-import {delMessage} from "~uti/tools";
-import {useAppStore} from "~src/store";
-const useAppState = useAppStore();
+import { onMounted, ref } from 'vue'
+import mainApi from '~api/system/user'
+import organizationApi from '~api/system/organization'
+import { arrIndex, arrToId, formValidate, getArrValue, isIdCard, isPhone } from 'js-fast-way'
+import { Delete, Plus } from '@element-plus/icons-vue'
+import { delMessage } from '~uti/tools'
+import { useAppStore } from '~src/store'
+const useAppState = useAppStore()
 
 onMounted(() => {
     getTableData()
@@ -169,7 +176,7 @@ onMounted(() => {
 const searchOrganization = ref([])
 const getOrganization = async () => {
     const { error, code, data } = await organizationApi.getList({
-        deptType: 3
+        deptType: 3,
     })
     if (!error && code === 200) {
         searchOrganization.value = getArrValue(data)
@@ -180,10 +187,10 @@ const getOrganization = async () => {
 
 
 
-const searchForm = ref({deptId: null, realName: '', current: 1, size: 20, total: 0})
+const searchForm = ref({ deptId: null, realName: '', current: 1, size: 20, total: 0 })
 
 //分页被点击
-const pageChange = ({current, size}) => {
+const pageChange = ({ current, size }) => {
     searchForm.value.current = current
     searchForm.value.size = size
     getTableData()
@@ -195,20 +202,20 @@ const searchClick = () => {
 
 //表格数据
 const tableColumn = [
-    {key: 'name', name: '用户名称'},
-    {key: 'account', name: '账号ID'},
-    {key: 'plaintextPassword', name: '密码'},
-    {key: 'deptName', name: '所属部门'},
-    {key: 'postName', name: '岗位'},
-    {key: 'createTime', name: '创建日期'},
-    {key: 'status', name: '启用状态'},
-    {key: 'action', name: '操作', width: 100}
+    { key: 'name', name: '用户名称' },
+    { key: 'account', name: '账号ID' },
+    { key: 'plaintextPassword', name: '密码' },
+    { key: 'deptName', name: '所属部门' },
+    { key: 'postName', name: '岗位' },
+    { key: 'createTime', name: '创建日期' },
+    { key: 'status', name: '启用状态' },
+    { key: 'action', name: '操作', width: 100 },
 ]
 const tableData = ref([])
 
 //获取表格数据
 const tableLoaing = ref(false)
-const getTableData = async()=>{
+const getTableData = async ()=>{
     tableLoaing.value = true
     const { error, code, data } = await mainApi.page(searchForm.value)
     tableLoaing.value = false
@@ -221,7 +228,7 @@ const getTableData = async()=>{
     }
 }
 
-const tableCheckedKeys = ref([]);
+const tableCheckedKeys = ref([])
 const tableSelectionChange = (rows) => {
     tableCheckedKeys.value = rows
 }
@@ -232,7 +239,7 @@ const formModal = ref(false)
 //用户信息表单
 const formRef = ref(null)
 const formRef1 = ref(null)
-const formRef3=ref(null)
+const formRef3 = ref(null)
 
 //循环表单的ref
 const formRefs = ref([])
@@ -242,7 +249,7 @@ const setFormItemRefs = (el, index) => {
         if (indexs !== -1) {
             formRefs.value[index].ref = el
         } else {
-            formRefs.value.push({index: index, ref: el});
+            formRefs.value.push({ index: index, ref: el })
         }
     }
 }
@@ -255,16 +262,16 @@ const getFormRef = async (index) => {
 const formModel = ref({
     // deptList: [{isLeader: 0}], status: 1
 })
-const isLeaderIds=ref([])
+const isLeaderIds = ref([])
 const formRules = {
-    account: [{required: true, message: '请输入登录账号', trigger: 'blur'}],
-    password: [{required: true, message: '请输入密码', trigger: 'blur'}],
-    password1: [{required: true, message: '请输入确认密码', trigger: 'blur'}],
-    deptId: [{required: true, message: '请选择选择部门', trigger: 'change'}],
-    postId: [{required: true, message: '请选择选择岗位', trigger: 'change'}],
-
-    oneMoney: [{required: true, message: '请输入日单价', trigger: 'blur'}],
-    status: [{required: true, message: '请选择启用状态', trigger: 'change'}],
+    account: [{ required: true, message: '请输入登录账号', trigger: 'blur' }],
+    password: [{ required: true, message: '请输入密码', trigger: 'blur' }],
+    password1: [{ required: true, message: '请输入确认密码', trigger: 'blur' }],
+    deptId: [{ required: true, message: '请选择选择部门', trigger: 'change' }],
+    postId: [{ required: true, message: '请选择选择岗位', trigger: 'change' }],
+
+    oneMoney: [{ required: true, message: '请输入日单价', trigger: 'blur' }],
+    status: [{ required: true, message: '请选择启用状态', trigger: 'change' }],
     phone: {
         required: true,
         validator: (rule, value, callback) => {
@@ -276,29 +283,29 @@ const formRules = {
                 callback()
             }
         },
-        trigger: "blur"
+        trigger: 'blur',
     },
 }
 
 //添加用户
 const addUserClick = () => {
-    isLeaderIds.value=[]
+    isLeaderIds.value = []
     formModel.value = {
         // deptList: [{isLeader: 0}],
         tenantId: useAppState.tenantId,
         status: 1,
-        userType: 5
+        userType: 5,
     }
     postData.value = [{}]
     formModal.value = true
-    getSectionData();
-    getUserDeptData();
+    getSectionData()
+    getUserDeptData()
 }
 
 //编辑用户信息
 const rowEidtClick = (row) => {
     // const deptList = getArrValue(row.deptList)
-    isLeaderIds.value=[]
+    isLeaderIds.value = []
     //设置表单数据
     const form = {
         id: row.id,
@@ -328,23 +335,23 @@ const rowEidtClick = (row) => {
     // }
     //设置表单数据
     formModel.value = form
-    if(form?.isLeader){
-        isLeaderIds.value=form?.isLeader?.split(',')
-    }else{
-        isLeaderIds.value=[]
+    if (form?.isLeader) {
+        isLeaderIds.value = form?.isLeader?.split(',')
+    } else {
+        isLeaderIds.value = []
     }
 
     formModal.value = true
     getSectionData()
 
     // 获取下拉框   部门负责人
-    getUserDeptData();
+    getUserDeptData()
 }
 
 //部门下拉数据
 const sectionData = ref([])
 const getSectionData = async () => {
-    const { error, code, data } = await organizationApi.getList({deptType: 2})
+    const { error, code, data } = await organizationApi.getList({ deptType: 2 })
     if (!error && code === 200) {
         sectionData.value = getArrValue(data)
     } else {
@@ -354,10 +361,10 @@ const getSectionData = async () => {
 
 //获取岗位数据
 const postData = ref([])
-const getpostData=async(id)=>{
-    if(id){
+const getpostData = async (id)=>{
+    if (id) {
         //获取岗位数据
-         const { error, code, data } = await organizationApi.getList({parentId: id})
+         const { error, code, data } = await organizationApi.getList({ parentId: id })
         if (!error && code === 200) {
             postData.value = getArrValue(data)
         } else {
@@ -382,14 +389,14 @@ const getUserDeptData = async () => {
 const initPostData = async (id, index) => {
     if (id) {
         //获取岗位数据
-        const { error, code, data } = await organizationApi.getList({parentId: id})
+        const { error, code, data } = await organizationApi.getList({ parentId: id })
         if (!error && code === 200) {
             postData.value[index] = getArrValue(data)
         } else {
             postData.value[index] = []
         }
         //处理负责人限制
-        let isLeader = 0;
+        let isLeader = 0
         const deptList = formModel.value.deptList
         deptList.forEach((item, indexs) => {
             if (item.deptId === id) {
@@ -423,7 +430,7 @@ const isLeaderChange = (id, index) => {
 
 //新增组织
 const addOrganizationClick = () => {
-    formModel.value.deptList.push({isLeader: 0})
+    formModel.value.deptList.push({ isLeader: 0 })
     postData.value.push({})
 }
 
@@ -439,15 +446,15 @@ const formModalSave = async () => {
     const isForm = await formValidate(formRef.value)
     const isForm1 = await formValidate(formRef1.value)
     const isForm3 = await formValidate(formRef3.value)
-    if (!isForm || !isForm1||!isForm3) {
+    if (!isForm || !isForm1 || !isForm3) {
         window.$message?.error('请先完善表单信息')
         return
     }
     const form = formModel.value
-    console.log(form,'form');
-    let isLeader=isLeaderIds.value.join()
-    form.isLeader=isLeader
-    form.roleId=form.postId
+    console.log(form, 'form')
+    let isLeader = isLeaderIds.value.join()
+    form.isLeader = isLeader
+    form.roleId = form.postId
     //判断密码是否一致
     if (form.password && !form.password1) {
         window.$message?.error('请输入确认密码')
@@ -480,7 +487,7 @@ const formModalSave = async () => {
 
 //新增用户
 const formSubmitApi = async (form) => {
-    const {error, code, msg} = await mainApi.submit({
+    const { error, code, msg } = await mainApi.submit({
         ...form,
         name: form.realName,
     })
@@ -496,7 +503,7 @@ const formSubmitApi = async (form) => {
 
 //修改用户
 const formUpdateApi = async (form) => {
-    const {error, code, msg} = await mainApi.update({
+    const { error, code, msg } = await mainApi.update({
         ...form,
         name: form.realName,
     })

+ 2 - 2
src/views/task/logs/index.vue

@@ -39,12 +39,12 @@
                 <span>提交日志</span>
             </el-button>
             <template v-else>
-                <el-button v-if="!isShowEdit" size="large" type="primary" @click="editLogsClick">
+                <el-button v-if="!isShowEdit" v-auth-btn="['task-logs-edit-btn']" size="large" type="primary" @click="editLogsClick">
                     <HcIcon name="add" />
                     <span>写日志</span>
                 </el-button>
                 <!-- 修改自己的日志 -->
-                <el-button v-else size="large" type="primary" @click="editmyLog">
+                <el-button v-else v-auth-btn="['task-logs-edit-btn']" size="large" type="primary" @click="editmyLog">
                     <HcIcon name="add" />
                     <span>修改日志</span>
                 </el-button>

+ 1 - 1
src/views/task/plan/components/TaskTable.vue

@@ -37,7 +37,7 @@
             </div>
         </template>
         <template #extra>
-            <el-button size="large" :type="isTableKey === 1 ? 'primary' : 'info'" :disabled="isTableKey !== 1" hc-btn @click="showChangeState">
+            <el-button v-auth-btn="['task-plan-edit-btn']" size="large" :type="isTableKey === 1 ? 'primary' : 'info'" :disabled="isTableKey !== 1" hc-btn @click="showChangeState">
                 <HcIcon name="edit-circle" />
                 <span>变更状态</span>
             </el-button>