add
This commit is contained in:
parent
8954d28f4c
commit
b3e7b263e7
@ -12,10 +12,16 @@
|
|||||||
|
|
||||||
|
|
||||||
<div style="display: flex;justify-content: space-around;">
|
<div style="display: flex;justify-content: space-around;">
|
||||||
<div v-for=" item in customList" :key="item" style="text-align: center;">
|
<router-link :to="{
|
||||||
<div>{{ item.value }}</div>
|
path: item.url,
|
||||||
<div>{{ item.name }}</div>
|
query: item.query ? { year } : null
|
||||||
</div>
|
}" v-for=" item in customList" :key="item" class="header-btn">
|
||||||
|
<div>
|
||||||
|
<div>{{ item.value }}</div>
|
||||||
|
<div>{{ item.name }}</div>
|
||||||
|
</div>
|
||||||
|
</router-link>
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
<div id="customNum" class="chart" v-if="showChart"></div>
|
<div id="customNum" class="chart" v-if="showChart"></div>
|
||||||
</el-card>
|
</el-card>
|
||||||
@ -23,6 +29,8 @@
|
|||||||
<script setup>
|
<script setup>
|
||||||
import * as echarts from 'echarts';
|
import * as echarts from 'echarts';
|
||||||
import { apistatisticscustoms } from '@/api/statistics'
|
import { apistatisticscustoms } from '@/api/statistics'
|
||||||
|
// import route from "vue-route"
|
||||||
|
|
||||||
|
|
||||||
const year = ref('')
|
const year = ref('')
|
||||||
const showChart = ref(true)
|
const showChart = ref(true)
|
||||||
@ -31,11 +39,14 @@ year.value = new Date().getFullYear()
|
|||||||
const customList = reactive([
|
const customList = reactive([
|
||||||
{
|
{
|
||||||
name: "客户总数",
|
name: "客户总数",
|
||||||
value: 3
|
value: 3,
|
||||||
|
url: "/construction/client/myClient/custom"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: "今年增加",
|
name: "今年增加",
|
||||||
value: 3
|
value: 3,
|
||||||
|
url: `/construction/client/myClient/custom`,
|
||||||
|
query: true
|
||||||
}
|
}
|
||||||
])
|
])
|
||||||
|
|
||||||
@ -46,6 +57,8 @@ const labelOption = {
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
const initChart = (id, opt) => {
|
const initChart = (id, opt) => {
|
||||||
var chartDom = document.getElementById(id);
|
var chartDom = document.getElementById(id);
|
||||||
var myChart = echarts.init(chartDom);
|
var myChart = echarts.init(chartDom);
|
||||||
@ -119,4 +132,15 @@ getCustom()
|
|||||||
width: 100%;
|
width: 100%;
|
||||||
height: 300px;
|
height: 300px;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.header-btn {
|
||||||
|
text-align: center;
|
||||||
|
cursor: pointer;
|
||||||
|
padding: 0px 10px;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
.header-btn:active {
|
||||||
|
background-color: #EDEFFF;
|
||||||
|
}
|
||||||
</style>
|
</style>
|
@ -8,10 +8,15 @@
|
|||||||
|
|
||||||
|
|
||||||
<div style="display: flex;justify-content: space-around;">
|
<div style="display: flex;justify-content: space-around;">
|
||||||
<div v-for=" item in customList" :key="item" style="text-align: center;">
|
<router-link :to="{
|
||||||
<div>{{ item.value }}</div>
|
path: item.url,
|
||||||
<div>{{ item.name }}</div>
|
query: item.query ? { ...item.query } : null
|
||||||
</div>
|
}" v-for=" item in customList" :key="item" class="header-btn">
|
||||||
|
<div>
|
||||||
|
<div>{{ item.value }}</div>
|
||||||
|
<div>{{ item.name }}</div>
|
||||||
|
</div>
|
||||||
|
</router-link>
|
||||||
</div>
|
</div>
|
||||||
<div id="projectApproved" class="chart"></div>
|
<div id="projectApproved" class="chart"></div>
|
||||||
</el-card>
|
</el-card>
|
||||||
@ -23,27 +28,33 @@ import { apistatisticsprojectInitiation } from '@/api/statistics'
|
|||||||
const customList = reactive([
|
const customList = reactive([
|
||||||
{
|
{
|
||||||
name: "项目总数",
|
name: "项目总数",
|
||||||
value: 3
|
value: 3,
|
||||||
|
url: "/construction/project/project_lists"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: "项目跟进",
|
name: "项目跟进",
|
||||||
value: 3
|
value: 3,
|
||||||
|
url: "/construction/business/project_follow_up"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: "客户需求",
|
name: "客户需求",
|
||||||
value: 3
|
value: 3,
|
||||||
|
url: "/construction/business/customer_demand"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: "解决方男",
|
name: "解决方案",
|
||||||
value: 3
|
value: 3,
|
||||||
|
url: "/construction/business/customer_demand_solution"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: "项目概算",
|
name: "项目概算",
|
||||||
value: 3
|
value: 3,
|
||||||
|
url: "/construction/business/project_estimate"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: "竞争对手",
|
name: "竞争对手",
|
||||||
value: 3
|
value: 3,
|
||||||
|
url: "/construction/business/competitor"
|
||||||
},
|
},
|
||||||
])
|
])
|
||||||
|
|
||||||
@ -105,4 +116,15 @@ getData()
|
|||||||
width: 100%;
|
width: 100%;
|
||||||
height: 300px;
|
height: 300px;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.header-btn {
|
||||||
|
text-align: center;
|
||||||
|
cursor: pointer;
|
||||||
|
padding: 0px 10px;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
.header-btn:active {
|
||||||
|
background-color: #EDEFFF;
|
||||||
|
}
|
||||||
</style>
|
</style>
|
@ -11,10 +11,15 @@
|
|||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div style="display: flex;justify-content: space-around;">
|
<div style="display: flex;justify-content: space-around;">
|
||||||
<div v-for=" item in customList" :key="item" style="text-align: center;">
|
<router-link :to="{
|
||||||
<div>{{ item.value }}</div>
|
path: item.url,
|
||||||
<div>{{ item.name }}</div>
|
query: item.query ? { year } : null
|
||||||
</div>
|
}" v-for=" item in customList" :key="item" class="header-btn">
|
||||||
|
<div>
|
||||||
|
<div>{{ item.value }}</div>
|
||||||
|
<div>{{ item.name }}</div>
|
||||||
|
</div>
|
||||||
|
</router-link>
|
||||||
</div>
|
</div>
|
||||||
<div id="ProjectPayment" class="chart" v-if="showChart"></div>
|
<div id="ProjectPayment" class="chart" v-if="showChart"></div>
|
||||||
</el-card>
|
</el-card>
|
||||||
@ -31,19 +36,27 @@ const showChart = ref(true)
|
|||||||
const customList = reactive([
|
const customList = reactive([
|
||||||
{
|
{
|
||||||
name: "年度开票金额",
|
name: "年度开票金额",
|
||||||
value: 3
|
value: 0,
|
||||||
|
url: "/construction/finance/Collection/InvoicingRequests"
|
||||||
|
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: "年度回款金额",
|
name: "年度回款金额",
|
||||||
value: 3
|
value: 0,
|
||||||
|
url: "/construction/finance/Collection/RecordsPayment"
|
||||||
|
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: "年度未回款金额",
|
name: "年度未回款金额",
|
||||||
value: 3
|
value: 0,
|
||||||
|
url: "/construction/finance/Collection/refund"
|
||||||
|
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: "年度回款计划金额",
|
name: "年度回款计划金额",
|
||||||
value: 3
|
value: 0,
|
||||||
|
url: "/construction/finance/Collection/Remittance"
|
||||||
|
|
||||||
},
|
},
|
||||||
|
|
||||||
|
|
||||||
@ -176,4 +189,15 @@ getCustom()
|
|||||||
width: 100%;
|
width: 100%;
|
||||||
height: 300px;
|
height: 300px;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.header-btn {
|
||||||
|
text-align: center;
|
||||||
|
cursor: pointer;
|
||||||
|
padding: 0px 10px;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
.header-btn:active {
|
||||||
|
background-color: #EDEFFF;
|
||||||
|
}
|
||||||
</style>
|
</style>
|
@ -11,10 +11,15 @@
|
|||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div style="display: flex;justify-content: space-around;">
|
<div style="display: flex;justify-content: space-around;">
|
||||||
<div v-for=" item in customList" :key="item" style="text-align: center;">
|
<router-link :to="{
|
||||||
<div>{{ item.value }}</div>
|
path: item.url,
|
||||||
<div>{{ item.name }}</div>
|
query: item.query ? { year } : null
|
||||||
</div>
|
}" v-for=" item in customList" :key="item" class="header-btn">
|
||||||
|
<div>
|
||||||
|
<div>{{ item.value }}</div>
|
||||||
|
<div>{{ item.name }}</div>
|
||||||
|
</div>
|
||||||
|
</router-link>
|
||||||
</div>
|
</div>
|
||||||
<div id="ProjectWithdraw" class="chart" v-if="showChart"></div>
|
<div id="ProjectWithdraw" class="chart" v-if="showChart"></div>
|
||||||
</el-card>
|
</el-card>
|
||||||
@ -28,15 +33,18 @@ const showChart = ref(true)
|
|||||||
const customList = reactive([
|
const customList = reactive([
|
||||||
{
|
{
|
||||||
name: "年度回票金额",
|
name: "年度回票金额",
|
||||||
value: 3
|
value: 0,
|
||||||
|
url: "/construction/finance/payment/finance_receipt_record"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: "年度付款金额",
|
name: "年度付款金额",
|
||||||
value: 3
|
value: 0,
|
||||||
|
url: "/construction/finance/payment/finance_payment_plan"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: "年度付款计划金额",
|
name: "年度付款计划金额",
|
||||||
value: 3
|
value: 0,
|
||||||
|
url: "/construction/finance/payment/finance_payment_plan"
|
||||||
},
|
},
|
||||||
|
|
||||||
])
|
])
|
||||||
@ -154,4 +162,15 @@ getCustom()
|
|||||||
width: 100%;
|
width: 100%;
|
||||||
height: 300px;
|
height: 300px;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.header-btn {
|
||||||
|
text-align: center;
|
||||||
|
cursor: pointer;
|
||||||
|
padding: 0px 10px;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
.header-btn:active {
|
||||||
|
background-color: #EDEFFF;
|
||||||
|
}
|
||||||
</style>
|
</style>
|
@ -11,10 +11,15 @@
|
|||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div style="display: flex;justify-content: space-around;">
|
<div style="display: flex;justify-content: space-around;">
|
||||||
<div v-for=" item in customList" :key="item" style="text-align: center;">
|
<router-link :to="{
|
||||||
<div>{{ item.value }}</div>
|
path: item.url,
|
||||||
<div>{{ item.name }}</div>
|
query: item.query ? { ...item.query } : null
|
||||||
</div>
|
}" v-for=" item in customList" :key="item" class="header-btn">
|
||||||
|
<div>
|
||||||
|
<div>{{ item.value }}</div>
|
||||||
|
<div>{{ item.name }}</div>
|
||||||
|
</div>
|
||||||
|
</router-link>
|
||||||
</div>
|
</div>
|
||||||
<div id="PurchaseContracts" class="chart" v-if="showChart"></div>
|
<div id="PurchaseContracts" class="chart" v-if="showChart"></div>
|
||||||
</el-card>
|
</el-card>
|
||||||
@ -30,19 +35,27 @@ const showChart = ref(true)
|
|||||||
const customList = reactive([
|
const customList = reactive([
|
||||||
{
|
{
|
||||||
name: "合同总数",
|
name: "合同总数",
|
||||||
value: 3
|
value: 3,
|
||||||
|
url: "/construction/contract/PurchaseContracts/procurement_contract"
|
||||||
|
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: "总金额",
|
name: "总金额",
|
||||||
value: 3
|
value: 3,
|
||||||
|
url: "/construction/contract/PurchaseContracts/procurement_contract"
|
||||||
|
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: "年度合同数",
|
name: "年度合同数",
|
||||||
value: 3
|
value: 3,
|
||||||
|
url: "/construction/contract/PurchaseContracts/procurement_contract"
|
||||||
|
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: "年度合同金额",
|
name: "年度合同金额",
|
||||||
value: 3
|
value: 3,
|
||||||
|
url: "/construction/contract/PurchaseContracts/procurement_contract"
|
||||||
|
|
||||||
}
|
}
|
||||||
])
|
])
|
||||||
|
|
||||||
@ -128,4 +141,15 @@ getCustom()
|
|||||||
width: 100%;
|
width: 100%;
|
||||||
height: 300px;
|
height: 300px;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.header-btn {
|
||||||
|
text-align: center;
|
||||||
|
cursor: pointer;
|
||||||
|
padding: 0px 10px;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
.header-btn:active {
|
||||||
|
background-color: #EDEFFF;
|
||||||
|
}
|
||||||
</style>
|
</style>
|
@ -12,10 +12,15 @@
|
|||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div style="display: flex;justify-content: space-around;">
|
<div style="display: flex;justify-content: space-around;">
|
||||||
<div v-for=" item in customList" :key="item" style="text-align: center;">
|
<router-link :to="{
|
||||||
<div>{{ item.value }}</div>
|
path: item.url,
|
||||||
<div>{{ item.name }}</div>
|
query: item.query ? { ...item.query } : null
|
||||||
</div>
|
}" v-for=" item in customList" :key="item" class="header-btn">
|
||||||
|
<div>
|
||||||
|
<div>{{ item.value }}</div>
|
||||||
|
<div>{{ item.name }}</div>
|
||||||
|
</div>
|
||||||
|
</router-link>
|
||||||
</div>
|
</div>
|
||||||
<div id="Subcontract" class="chart" v-if="showChart"></div>
|
<div id="Subcontract" class="chart" v-if="showChart"></div>
|
||||||
</el-card>
|
</el-card>
|
||||||
@ -29,23 +34,28 @@ const showChart = ref(true)
|
|||||||
const customList = reactive([
|
const customList = reactive([
|
||||||
{
|
{
|
||||||
name: "总金额",
|
name: "总金额",
|
||||||
value: 3
|
value: 3,
|
||||||
|
url: "/construction/contract/subcontract/subcontracting_contract"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: "洽商金额",
|
name: "洽商金额",
|
||||||
value: 3
|
value: 3,
|
||||||
|
url: "/construction/contract/subcontract/subcontracting_contract_negotiation"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: "合同总数",
|
name: "合同总数",
|
||||||
value: 3
|
value: 3,
|
||||||
|
url: "/construction/contract/subcontract/subcontracting_contract"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: "年度合同金额",
|
name: "年度合同金额",
|
||||||
value: 3
|
value: 3,
|
||||||
|
url: "/construction/contract/subcontract/subcontracting_contract"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: "年度合同数",
|
name: "年度合同数",
|
||||||
value: 3
|
value: 3,
|
||||||
|
url: "/construction/contract/subcontract/subcontracting_contract"
|
||||||
}
|
}
|
||||||
])
|
])
|
||||||
|
|
||||||
@ -126,4 +136,15 @@ getCustom()
|
|||||||
width: 100%;
|
width: 100%;
|
||||||
height: 300px;
|
height: 300px;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.header-btn {
|
||||||
|
text-align: center;
|
||||||
|
cursor: pointer;
|
||||||
|
padding: 0px 10px;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
.header-btn:active {
|
||||||
|
background-color: #EDEFFF;
|
||||||
|
}
|
||||||
</style>
|
</style>
|
@ -6,10 +6,15 @@
|
|||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
<div style="display: flex;justify-content: space-around;">
|
<div style="display: flex;justify-content: space-around;">
|
||||||
<div v-for=" item in customList" :key="item" style="text-align: center;">
|
<router-link :to="{
|
||||||
<div>{{ item.value }}</div>
|
path: item.url,
|
||||||
<div>{{ item.name }}</div>
|
query: item.query ? { ...item.query } : null
|
||||||
</div>
|
}" v-for=" item in customList" :key="item" class="header-btn">
|
||||||
|
<div>
|
||||||
|
<div>{{ item.value }}</div>
|
||||||
|
<div>{{ item.name }}</div>
|
||||||
|
</div>
|
||||||
|
</router-link>
|
||||||
</div>
|
</div>
|
||||||
<div id="main"></div>
|
<div id="main"></div>
|
||||||
</el-card>
|
</el-card>
|
||||||
@ -21,23 +26,32 @@ import { apistatisticsbidding } from '@/api/statistics'
|
|||||||
const customList = reactive([
|
const customList = reactive([
|
||||||
{
|
{
|
||||||
name: "投标决策",
|
name: "投标决策",
|
||||||
value: 3
|
value: 0,
|
||||||
|
url: "/construction/tender/bid_bidding_decision"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: "购买标书",
|
name: "购买标书",
|
||||||
value: 3
|
value: 0,
|
||||||
|
url: "/construction/tender/bid_buy_bidding_document"
|
||||||
|
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: "标书审查",
|
name: "标书审查",
|
||||||
value: 3
|
value: 0,
|
||||||
|
url: "/construction/tender/reviewTender/bid_document_examination"
|
||||||
|
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: "未退保证金额",
|
name: "未退保证金额",
|
||||||
value: 3
|
value: 0,
|
||||||
|
url: "/construction/finance/deposit/BidBond"
|
||||||
|
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: "中标项目",
|
name: "中标项目",
|
||||||
value: 3
|
value: 0,
|
||||||
|
url: "/construction/tender/bid_result"
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -183,4 +197,15 @@ getData()
|
|||||||
width: 100%;
|
width: 100%;
|
||||||
height: 300px;
|
height: 300px;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.header-btn {
|
||||||
|
text-align: center;
|
||||||
|
cursor: pointer;
|
||||||
|
padding: 0px 10px;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
.header-btn:active {
|
||||||
|
background-color: #EDEFFF;
|
||||||
|
}
|
||||||
</style>
|
</style>
|
@ -11,10 +11,15 @@
|
|||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div style="display: flex;justify-content: space-around;">
|
<div style="display: flex;justify-content: space-around;">
|
||||||
<div v-for=" item in customList" :key="item" style="text-align: center;">
|
<router-link :to="{
|
||||||
<div>{{ item.value }}</div>
|
path: item.url,
|
||||||
<div>{{ item.name }}</div>
|
query: item.query ? { year } : null
|
||||||
</div>
|
}" v-for=" item in customList" :key="item" class="header-btn">
|
||||||
|
<div>
|
||||||
|
<div>{{ item.value }}</div>
|
||||||
|
<div>{{ item.name }}</div>
|
||||||
|
</div>
|
||||||
|
</router-link>
|
||||||
</div>
|
</div>
|
||||||
<div id="main3" class="chart" v-if="showChart"></div>
|
<div id="main3" class="chart" v-if="showChart"></div>
|
||||||
</el-card>
|
</el-card>
|
||||||
@ -28,23 +33,34 @@ const showChart = ref(true)
|
|||||||
const customList = reactive([
|
const customList = reactive([
|
||||||
{
|
{
|
||||||
name: "合同金额",
|
name: "合同金额",
|
||||||
value: 3
|
value: 3,
|
||||||
|
url: "/construction/contract/ProjectContracts/contract"
|
||||||
|
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: "洽商金额",
|
name: "洽商金额",
|
||||||
value: 3
|
value: 3,
|
||||||
|
url: "/construction/contract/ProjectContracts/contract_negotiation"
|
||||||
|
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: "合同总数",
|
name: "合同总数",
|
||||||
value: 3
|
value: 3,
|
||||||
|
url: "/construction/contract/ProjectContracts/contract"
|
||||||
|
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: "年度合同金额",
|
name: "年度合同金额",
|
||||||
value: 3
|
value: 3,
|
||||||
|
url: "/construction/contract/ProjectContracts/contract"
|
||||||
|
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: "年度合同总数",
|
name: "年度合同总数",
|
||||||
value: 3
|
value: 3,
|
||||||
|
url: "/construction/contract/ProjectContracts/contract",
|
||||||
|
query: true
|
||||||
|
|
||||||
},
|
},
|
||||||
])
|
])
|
||||||
|
|
||||||
@ -124,4 +140,15 @@ getCustom()
|
|||||||
width: 100%;
|
width: 100%;
|
||||||
height: 300px;
|
height: 300px;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.header-btn {
|
||||||
|
text-align: center;
|
||||||
|
cursor: pointer;
|
||||||
|
padding: 0px 10px;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
.header-btn:active {
|
||||||
|
background-color: #EDEFFF;
|
||||||
|
}
|
||||||
</style>
|
</style>
|
@ -4,7 +4,6 @@
|
|||||||
<el-form class="mb-[-16px]" :model="queryParams" inline>
|
<el-form class="mb-[-16px]" :model="queryParams" inline>
|
||||||
<el-form-item label="所属分类" prop="type">
|
<el-form-item label="所属分类" prop="type">
|
||||||
<el-select class="w-[280px]" v-model="queryParams.type" clearable placeholder="请选择所属分类">
|
<el-select class="w-[280px]" v-model="queryParams.type" clearable placeholder="请选择所属分类">
|
||||||
<el-option label="全部" value=""></el-option>
|
|
||||||
<el-option v-for="(item, index) in dictData.flow_type" :key="index" :label="item.name"
|
<el-option v-for="(item, index) in dictData.flow_type" :key="index" :label="item.name"
|
||||||
:value="item.value" />
|
:value="item.value" />
|
||||||
</el-select>
|
</el-select>
|
||||||
|
@ -10,7 +10,7 @@
|
|||||||
</el-form-item>
|
</el-form-item>
|
||||||
</el-col>
|
</el-col>
|
||||||
<el-col :span="8">
|
<el-col :span="8">
|
||||||
<el-form-item label="审批分类" prop="flow_cate">
|
<el-form-item label="审批分类">
|
||||||
<el-select class="flex-1" v-model="formData.type" clearable placeholder="请选择所属分类"
|
<el-select class="flex-1" v-model="formData.type" clearable placeholder="请选择所属分类"
|
||||||
@change="getFlowTypeList">
|
@change="getFlowTypeList">
|
||||||
<el-option v-for="(item, index) in dictData.flow_type" :key="index" :label="item.name"
|
<el-option v-for="(item, index) in dictData.flow_type" :key="index" :label="item.name"
|
||||||
@ -36,9 +36,18 @@
|
|||||||
</el-col>
|
</el-col>
|
||||||
</el-row>
|
</el-row>
|
||||||
</el-col>
|
</el-col>
|
||||||
|
<el-col :span="8">
|
||||||
|
<el-form-item label="状态" prop="status" v-if="mode == 'edit'">
|
||||||
|
<el-radio-group v-model="formData.status" placeholder="请选择状态">
|
||||||
|
<el-radio v-for="(item, index) in dictData.flow_type_status" :key="index" :label="(item.value)">
|
||||||
|
{{ item.name }}
|
||||||
|
</el-radio>
|
||||||
|
</el-radio-group>
|
||||||
|
</el-form-item>
|
||||||
|
</el-col>
|
||||||
|
|
||||||
<el-col :span="8">
|
<el-col :span="8">
|
||||||
<el-form-item label="流程类型" prop="flow_detail.check_type" clearable :style="{ width: '100%' }">
|
<el-form-item label="流程类型" prop="check_type" clearable :style="{ width: '100%' }">
|
||||||
<el-radio-group v-model="formData.check_type" @change="checkTypeFn">
|
<el-radio-group v-model="formData.check_type" @change="checkTypeFn">
|
||||||
<el-radio :label="1">固定审批</el-radio>
|
<el-radio :label="1">固定审批</el-radio>
|
||||||
<el-radio :label="2">授权审批人</el-radio>
|
<el-radio :label="2">授权审批人</el-radio>
|
||||||
@ -136,7 +145,7 @@
|
|||||||
</el-col>
|
</el-col>
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
<el-form-item label="抄送人ID" prop="copy_unames">
|
<el-form-item label="抄送人" prop="copy_unames">
|
||||||
<el-tag v-for="(tag, index) in formData.copy_uids" @close="formData.copy_uids.splice(index, 1)"
|
<el-tag v-for="(tag, index) in formData.copy_uids" @close="formData.copy_uids.splice(index, 1)"
|
||||||
:key="tag.id" class="mx-1" closable>
|
:key="tag.id" class="mx-1" closable>
|
||||||
{{ tag.name }}
|
{{ tag.name }}
|
||||||
@ -167,6 +176,7 @@ defineProps({
|
|||||||
default: () => ({}),
|
default: () => ({}),
|
||||||
},
|
},
|
||||||
});
|
});
|
||||||
|
|
||||||
const personnel = ref('')
|
const personnel = ref('')
|
||||||
const emit = defineEmits(["success", "close"]);
|
const emit = defineEmits(["success", "close"]);
|
||||||
const formRef = shallowRef<FormInstance>();
|
const formRef = shallowRef<FormInstance>();
|
||||||
@ -187,16 +197,15 @@ const formData = reactive({
|
|||||||
type: "",
|
type: "",
|
||||||
flow_cate: "",
|
flow_cate: "",
|
||||||
remark: "",
|
remark: "",
|
||||||
type: "",
|
flow_list: [
|
||||||
|
|
||||||
"flow_list": [
|
|
||||||
{
|
{
|
||||||
"flow_step": "",
|
flow_step: "",
|
||||||
"flow_user": []
|
flow_user: []
|
||||||
},
|
},
|
||||||
|
|
||||||
],
|
],
|
||||||
"copy_uids": []
|
copy_uids: [],
|
||||||
|
status: 0
|
||||||
});
|
});
|
||||||
|
|
||||||
// 获取对应审批类型
|
// 获取对应审批类型
|
||||||
@ -222,71 +231,42 @@ const checkTypeFn = () => {
|
|||||||
},
|
},
|
||||||
]
|
]
|
||||||
};
|
};
|
||||||
|
|
||||||
// 表单验证
|
// 表单验证
|
||||||
const formRules = reactive<any>({
|
const formRules = reactive<any>({});
|
||||||
name: [
|
|
||||||
{
|
const setRules = () => {
|
||||||
|
let ruleList = ['name', 'check_type', 'type', 'flow_cate', 'remark', 'copy_uids']
|
||||||
|
|
||||||
|
ruleList.forEach(item => {
|
||||||
|
formRules[item] = {
|
||||||
required: true,
|
required: true,
|
||||||
message: "请输入审批流名称",
|
message: "请输入审批流名称",
|
||||||
trigger: ["blur"],
|
trigger: ["blur"]
|
||||||
},
|
}
|
||||||
],
|
})
|
||||||
check_type: [
|
}
|
||||||
{
|
setRules()
|
||||||
required: true,
|
|
||||||
message: "请输入1固定审批,2授权审批人",
|
|
||||||
trigger: ["blur"],
|
|
||||||
},
|
|
||||||
],
|
|
||||||
type: [
|
|
||||||
{
|
|
||||||
required: true,
|
|
||||||
message: "请输入应用模块,1假勤,2行政,3财务,4人事,5其他,6报销,7发票,8合同",
|
|
||||||
trigger: ["blur"],
|
|
||||||
},
|
|
||||||
],
|
|
||||||
flow_cate: [
|
|
||||||
{
|
|
||||||
required: true,
|
|
||||||
message: "请输入应用审批类型id",
|
|
||||||
trigger: ["blur"],
|
|
||||||
},
|
|
||||||
],
|
|
||||||
|
|
||||||
remark: [
|
|
||||||
{
|
|
||||||
required: true,
|
|
||||||
message: "请输入流程说明",
|
|
||||||
trigger: ["blur"],
|
|
||||||
},
|
|
||||||
],
|
|
||||||
});
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
// 获取详情
|
// 获取详情
|
||||||
const setFormData = async (data: Record<any, any>) => {
|
const setFormData = async (data: Record<any, any>) => {
|
||||||
// let res = await apiFlowDetil(data.id);
|
|
||||||
console.log(data)
|
|
||||||
for (const key in formData) {
|
for (const key in formData) {
|
||||||
if (data[key] != null && data[key] != undefined) {
|
if (data[key] != null && data[key] != undefined) {
|
||||||
//@ts-ignore
|
//@ts-ignore
|
||||||
formData[key] = data[key];
|
formData[key] = data[key];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
formData.flow_detail.type = Number(formData.flow_detail.type);
|
formData.check_type = Number(formData.check_type)
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
// 提交按钮
|
// 提交按钮
|
||||||
const handleSubmit = async () => {
|
const handleSubmit = async () => {
|
||||||
|
await formRef.value?.validate();
|
||||||
formData.copy_uids = [].concat(...formData.copy_uids.map(item => ([item.id])));
|
formData.copy_uids = [].concat(...formData.copy_uids.map(item => ([item.id])));
|
||||||
formData.flow_list.forEach(item => {
|
formData.flow_list.forEach(item => {
|
||||||
item.flow_user = [].concat(...item.flow_user.map(items => ([items.id])));
|
item.flow_user = [].concat(...item.flow_user.map(items => ([items.id])));
|
||||||
});
|
});
|
||||||
|
|
||||||
await formRef.value?.validate();
|
|
||||||
mode.value == "edit"
|
mode.value == "edit"
|
||||||
? await apiFlowEdit(formData)
|
? await apiFlowEdit(formData)
|
||||||
: await apiFlowAdd(formData);
|
: await apiFlowAdd(formData);
|
||||||
@ -308,7 +288,6 @@ const submituser = (e) => {
|
|||||||
}
|
}
|
||||||
|
|
||||||
const clearFlowUser = (index) => {
|
const clearFlowUser = (index) => {
|
||||||
|
|
||||||
formData.flow_list[index].flow_user = []
|
formData.flow_list[index].flow_user = []
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -323,7 +302,7 @@ const handleClose = () => {
|
|||||||
emit("close");
|
emit("close");
|
||||||
};
|
};
|
||||||
|
|
||||||
// selectIndex为-1时为抄送选择抄送人员
|
// selectIndex为-1时为抄送选择抄送人员,其余为指定人员所在的flow_list的下标
|
||||||
let selectIndex;
|
let selectIndex;
|
||||||
const openDialog = async (index) => {
|
const openDialog = async (index) => {
|
||||||
showDiolg.value = true
|
showDiolg.value = true
|
||||||
|
@ -1,5 +1,30 @@
|
|||||||
<template>
|
<template>
|
||||||
<div>
|
<div>
|
||||||
|
<el-card class="!border-none mb-4" shadow="never">
|
||||||
|
<el-form class="mb-[-16px]" :model="queryParams" inline>
|
||||||
|
<el-form-item label="流程名称" prop="title">
|
||||||
|
<el-input class="w-[280px]" v-model="queryParams.name" placeholder="请输入审批名称" />
|
||||||
|
</el-form-item>
|
||||||
|
|
||||||
|
<el-form-item label="审批类型" prop="type">
|
||||||
|
<el-select class="w-[280px]" v-model="queryParams.check_type" clearable placeholder="请选择所属分类">
|
||||||
|
<el-option label="全部" value=""></el-option>
|
||||||
|
<el-option v-for="(item, index) in dictData.flow_type" :key="index" :label="item.name"
|
||||||
|
:value="item.value" />
|
||||||
|
</el-select>
|
||||||
|
</el-form-item>
|
||||||
|
<el-form-item label="状态" prop="title">
|
||||||
|
<el-select class="w-[280px]" v-model="queryParams.status" clearable placeholder="请选择状态">
|
||||||
|
<el-option v-for="(item, index) in dictData.flow_type_status" :key="index" :label="item.name"
|
||||||
|
:value="item.value" />
|
||||||
|
</el-select>
|
||||||
|
</el-form-item>
|
||||||
|
<el-form-item>
|
||||||
|
<el-button type="primary" @click="resetPage">查询</el-button>
|
||||||
|
<el-button @click="resetParams">重置</el-button>
|
||||||
|
</el-form-item>
|
||||||
|
</el-form>
|
||||||
|
</el-card>
|
||||||
<el-card class="!border-none" v-loading="pager.loading" shadow="never">
|
<el-card class="!border-none" v-loading="pager.loading" shadow="never">
|
||||||
<el-button v-perms="['flow/add']" type="primary" @click="handleAdd">
|
<el-button v-perms="['flow/add']" type="primary" @click="handleAdd">
|
||||||
<template #icon>
|
<template #icon>
|
||||||
@ -9,7 +34,6 @@
|
|||||||
</el-button>
|
</el-button>
|
||||||
<div class="mt-4">
|
<div class="mt-4">
|
||||||
<el-table :data="pager.lists" @selection-change="handleSelectionChange">
|
<el-table :data="pager.lists" @selection-change="handleSelectionChange">
|
||||||
<el-table-column type="selection" width="55" />
|
|
||||||
<el-table-column label="审批流名称" prop="name" show-overflow-tooltip />
|
<el-table-column label="审批流名称" prop="name" show-overflow-tooltip />
|
||||||
<el-table-column label="审批类型" prop="flow_cate" show-overflow-tooltip />
|
<el-table-column label="审批类型" prop="flow_cate" show-overflow-tooltip />
|
||||||
<el-table-column label="审批流类型" prop="check_type" show-overflow-tooltip />
|
<el-table-column label="审批流类型" prop="check_type" show-overflow-tooltip />
|
||||||
@ -49,17 +73,9 @@ const showEdit = ref(false);
|
|||||||
|
|
||||||
// 查询条件
|
// 查询条件
|
||||||
const queryParams = reactive({
|
const queryParams = reactive({
|
||||||
name: "",
|
|
||||||
check_type: "",
|
check_type: "",
|
||||||
type: "",
|
|
||||||
flow_cate: "",
|
|
||||||
department_ids: "",
|
|
||||||
copy_uids: "",
|
|
||||||
remark: "",
|
|
||||||
flow_list: "",
|
|
||||||
admin_id: "",
|
|
||||||
status: "",
|
status: "",
|
||||||
delete_user_id: "",
|
name: ""
|
||||||
});
|
});
|
||||||
|
|
||||||
// 选中数据
|
// 选中数据
|
||||||
@ -71,7 +87,7 @@ const handleSelectionChange = (val: any[]) => {
|
|||||||
};
|
};
|
||||||
|
|
||||||
// 获取字典数据
|
// 获取字典数据
|
||||||
const { dictData } = useDictData('flow_type,flow_step_flow_type')
|
const { dictData } = useDictData('flow_type,flow_step_flow_type,flow_type_status')
|
||||||
|
|
||||||
// 分页相关
|
// 分页相关
|
||||||
const { pager, getLists, resetParams, resetPage } = usePaging({
|
const { pager, getLists, resetParams, resetPage } = usePaging({
|
||||||
|
Loading…
x
Reference in New Issue
Block a user