From 41c7dd199f1919a01dfc5e04f62359ca8bc3cb2c Mon Sep 17 00:00:00 2001
From: 吴羡 <16976746+Xian-TT3@user.noreply.gitee.com>
Date: 星期六, 12 九月 2026 12:43:32 +0800
Subject: [PATCH] feat: 库存管理三表单与详情页签分组、采购台账分栏、油品联动与电话校验、冻结解冻修复
---
src/views/procurementManagement/procurementLedger/index.vue | 383 ++++++++++++++++++++++++++++++++++++++++++++++++++----
1 files changed, 355 insertions(+), 28 deletions(-)
diff --git a/src/views/procurementManagement/procurementLedger/index.vue b/src/views/procurementManagement/procurementLedger/index.vue
index cbd6e23..087f716 100644
--- a/src/views/procurementManagement/procurementLedger/index.vue
+++ b/src/views/procurementManagement/procurementLedger/index.vue
@@ -66,6 +66,9 @@
</div>
<div class="table_list">
<div style="display: flex;justify-content: flex-end;margin-bottom: 20px;">
+ <el-button type="success"
+ plain
+ @click="handleBatchGenerate">鎵归噺鐢熸垚鏁版嵁</el-button>
<el-button type="primary"
@click="openForm('add')">鏂板鍙拌处</el-button>
<el-button type="primary"
@@ -106,7 +109,7 @@
prop="specificationModel" />
<el-table-column label="鍗曚綅"
prop="unit" />
- <el-table-column label="鍏ュ簱瀹℃牳鐘舵��"
+ <el-table-column label="鍏ュ簱瀹℃牳鐘舵��"
prop="stockInApprovalStatus"
width="120">
<template #default="scope">
@@ -118,10 +121,12 @@
</el-table-column>
<el-table-column label="鏁伴噺"
prop="quantity" />
+ <el-table-column label="閿�鍞彂璐ф暟閲�"
+ prop="shippedQuantity" />
<el-table-column label="鍙敤鏁伴噺"
prop="availableQuality" />
<el-table-column label="閫�璐ф暟閲�"
- prop="returnQuality" />
+ prop="returnQuantity" />
<el-table-column label="绋庣巼(%)"
prop="taxRate" />
<el-table-column label="鍚◣鍗曚环(鍏�)"
@@ -155,6 +160,42 @@
<el-table-column label="椤圭洰鍚嶇О"
prop="projectName"
width="320"
+ show-overflow-tooltip />
+ <el-table-column label="閲囪喘绫诲埆"
+ prop="purchaseCategory"
+ width="100"
+ show-overflow-tooltip />
+ <el-table-column label="鎻愯揣鏂瑰紡"
+ prop="pickupMethod"
+ width="100"
+ show-overflow-tooltip />
+ <el-table-column label="閲囪喘娌瑰搧"
+ prop="purchaseOilProduct"
+ width="100"
+ show-overflow-tooltip />
+ <el-table-column label="鐗╂祦鏂瑰紡"
+ prop="logisticsMethod"
+ width="100"
+ show-overflow-tooltip />
+ <el-table-column label="閲囪喘娌瑰簱"
+ prop="oilDepotName"
+ width="150"
+ show-overflow-tooltip />
+ <el-table-column label="瀹㈡埛鍚嶇О"
+ prop="customerName"
+ width="150"
+ show-overflow-tooltip />
+ <el-table-column label="鏈�浣冲埌绔欐棩鏈�"
+ prop="bestArrivalDate"
+ width="120"
+ show-overflow-tooltip />
+ <el-table-column label="閲囪喘鏁伴噺锛堝惃锛�"
+ prop="purchaseQuantity"
+ width="120"
+ align="center" />
+ <el-table-column label="閲囪喘鐢宠璁㈠崟鐘舵��"
+ prop="purchaseOrderStatus"
+ width="140"
show-overflow-tooltip />
<el-table-column label="瀹℃壒鐘舵��"
prop="approvalStatus"
@@ -191,6 +232,11 @@
width="200"
show-overflow-tooltip
:formatter="formattedNumber" />
+ <el-table-column label="瀹為檯鍚堝悓閲戦(鍏�)"
+ prop="netContractAmount"
+ width="200"
+ show-overflow-tooltip
+ :formatter="(_, __, cellValue) => formatMoney(cellValue)" />
<el-table-column label="褰曞叆浜�"
prop="recorderName"
width="120"
@@ -211,7 +257,7 @@
<el-button link
type="primary"
@click="openForm('edit', scope.row)"
- :disabled="scope.row.stockInStatus === '瀹屽叏鍏ュ簱'">缂栬緫
+ :disabled="scope.row.approvalStatus === 3">缂栬緫
</el-button>
<el-button link
type="primary"
@@ -290,17 +336,10 @@
</el-row>
<el-row :gutter="30">
<el-col :span="12">
- <el-form-item label="浠樻鏂瑰紡">
- <el-input v-model="form.paymentMethod"
- placeholder="璇疯緭鍏�"
- clearable />
- </el-form-item>
- </el-col>
- <el-col :span="12">
- <el-form-item label="绛捐鏃ユ湡锛�"
- prop="executionDate">
+ <el-form-item label="鏈�浣冲埌绔欐棩鏈燂細"
+ prop="bestArrivalDate">
<el-date-picker style="width: 100%"
- v-model="form.executionDate"
+ v-model="form.bestArrivalDate"
value-format="YYYY-MM-DD"
format="YYYY-MM-DD"
type="date"
@@ -308,9 +347,16 @@
clearable />
</el-form-item>
</el-col>
+ <el-col :span="12">
+ <el-form-item label="浠樻鏂瑰紡">
+ <el-input v-model="form.paymentMethod"
+ placeholder="璇疯緭鍏�"
+ clearable />
+ </el-form-item>
+ </el-col>
</el-row>
<el-row :gutter="30">
- <el-col :span="12">
+ <el-col :span="8">
<el-form-item label="褰曞叆浜猴細"
prop="recorderId">
<el-select v-model="form.recorderId"
@@ -324,7 +370,19 @@
</el-select>
</el-form-item>
</el-col>
- <el-col :span="12">
+ <el-col :span="8">
+ <el-form-item label="绛捐鏃ユ湡锛�"
+ prop="executionDate">
+ <el-date-picker style="width: 100%"
+ v-model="form.executionDate"
+ value-format="YYYY-MM-DD"
+ format="YYYY-MM-DD"
+ type="date"
+ placeholder="璇烽�夋嫨"
+ clearable />
+ </el-form-item>
+ </el-col>
+ <el-col :span="8">
<el-form-item label="褰曞叆鏃ユ湡锛�"
prop="entryDate">
<el-date-picker style="width: 100%"
@@ -334,6 +392,144 @@
type="date"
placeholder="璇烽�夋嫨"
clearable />
+ </el-form-item>
+ </el-col>
+ </el-row>
+ <div class="form-section-title">閲囪喘鍏ュ簱鎻愪氦</div>
+ <el-row :gutter="30">
+ <el-col :span="12">
+ <el-form-item label="鐢宠鎻愪氦鏃堕棿锛�"
+ prop="applicationSubmitTime">
+ <el-date-picker style="width: 100%"
+ v-model="form.applicationSubmitTime"
+ value-format="YYYY-MM-DD HH:mm:ss"
+ format="YYYY-MM-DD HH:mm:ss"
+ type="datetime"
+ placeholder="璇烽�夋嫨"
+ clearable />
+ </el-form-item>
+ </el-col>
+ <el-col :span="12">
+ <el-form-item label="閲囪喘绫诲埆锛�"
+ prop="purchaseCategory">
+ <el-radio-group v-model="form.purchaseCategory"
+ @change="purchaseCategoryChange">
+ <el-radio value="瀹㈠瓨">瀹㈠瓨</el-radio>
+ <el-radio value="浠e偍">浠e偍</el-radio>
+ <el-radio value="閲囪喘鍏ュ簱">閲囪喘鍏ュ簱</el-radio>
+ <el-radio value="閲囪喘鐩撮攢">閲囪喘鐩撮攢</el-radio>
+ </el-radio-group>
+ </el-form-item>
+ </el-col>
+ </el-row>
+ <el-row :gutter="30">
+ <el-col :span="12">
+ <el-form-item label="閲囪喘娌瑰搧锛�"
+ prop="purchaseOilProduct">
+ <el-select v-model="form.purchaseOilProduct"
+ placeholder="璇烽�夋嫨"
+ clearable
+ style="width: 100%">
+ <el-option label="姹�#92"
+ value="姹�#92" />
+ <el-option label="姹�#95"
+ value="姹�#95" />
+ <el-option label="鏌�#0"
+ value="鏌�#0" />
+ <el-option label="鏌�#-35"
+ value="鏌�#-35" />
+ </el-select>
+ </el-form-item>
+ </el-col>
+ <el-col :span="12">
+ <el-form-item label="鐗╂祦鏂瑰紡锛�"
+ prop="logisticsMethod">
+ <el-select v-model="form.logisticsMethod"
+ placeholder="璇烽�夋嫨"
+ clearable
+ style="width: 100%">
+ <el-option label="鍘傚閰嶉��"
+ value="鍘傚閰嶉��" />
+ <el-option label="濮斿鐗╂祦"
+ value="濮斿鐗╂祦" />
+ <el-option label="瀹㈡埛鑷彁"
+ value="瀹㈡埛鑷彁" />
+ </el-select>
+ </el-form-item>
+ </el-col>
+ </el-row>
+ <el-row :gutter="30">
+ <el-col :span="12">
+ <el-form-item label="鎻愯揣鏂瑰紡锛�"
+ prop="pickupMethod">
+ <el-radio-group v-model="form.pickupMethod">
+ <el-radio value="鏆備笉鎻愯揣">鏆備笉鎻愯揣</el-radio>
+ <el-radio value="鎻愯揣">鎻愯揣</el-radio>
+ </el-radio-group>
+ </el-form-item>
+ </el-col>
+ <el-col :span="12">
+ <el-form-item label="閲囪喘娌瑰簱锛�"
+ prop="oilDepotId">
+ <el-select v-model="form.oilDepotId"
+ placeholder="璇烽�夋嫨"
+ clearable
+ popper-class="oil-depot-select-popper"
+ style="width: 100%">
+ <el-option v-for="item in oilDepotList"
+ :key="item.id"
+ :label="item.depotName"
+ :value="item.id">
+ <div class="oil-depot-option">
+ <div class="oil-depot-option-title">{{ item.depotName }}</div>
+ <div class="oil-depot-option-line">璐熻矗浜猴細{{ item.chargePerson }}</div>
+ <div class="oil-depot-option-line">鑱旂郴鐢佃瘽锛歿{ item.phone }}</div>
+ <div class="oil-depot-option-line">鎵�灞炲叕鍙革細{{ item.company }}</div>
+ <div class="oil-depot-option-line">鍚敤鏃ユ湡锛歿{ item.enableDate }}</div>
+ </div>
+ </el-option>
+ </el-select>
+ </el-form-item>
+ </el-col>
+ </el-row>
+ <el-row :gutter="30">
+ <el-col :span="12">
+ <el-form-item label="瀹㈡埛鍚嶇О锛�"
+ prop="customerName">
+ <el-input v-model="form.customerName"
+ placeholder="浠呴噰璐被鍒负浠e偍/閲囪喘鐩撮攢鏃跺彲濉啓"
+ clearable
+ :disabled="!['浠e偍', '閲囪喘鐩撮攢'].includes(form.purchaseCategory)" />
+ </el-form-item>
+ </el-col>
+ <el-col :span="12">
+ <el-form-item label="閲囪喘鏁伴噺锛堝惃锛夛細"
+ prop="purchaseQuantity">
+ <el-input-number v-model="form.purchaseQuantity"
+ :precision="0"
+ :step="1"
+ :min="0"
+ placeholder="璇疯緭鍏�"
+ style="width: 100%" />
+ </el-form-item>
+ </el-col>
+ </el-row>
+ <div class="form-section-title">绯荤粺淇℃伅</div>
+ <el-row :gutter="30">
+ <el-col :span="12">
+ <el-form-item label="閲囪喘鐢宠璁㈠崟鐘舵�侊細"
+ prop="purchaseOrderStatus">
+ <el-select v-model="form.purchaseOrderStatus"
+ placeholder="璇烽�夋嫨"
+ clearable
+ style="width: 100%">
+ <el-option label="宸茬敵璇凤紝鏈杞�"
+ value="宸茬敵璇凤紝鏈杞�" />
+ <el-option label="浠ュ嚭鍘傦紝鏈叆搴�"
+ value="浠ュ嚭鍘傦紝鏈叆搴�" />
+ <el-option label="宸插叆搴�"
+ value="宸插叆搴�" />
+ </el-select>
</el-form-item>
</el-col>
</el-row>
@@ -721,7 +917,9 @@
getOptions,
getPurchaseTemplateList,
delPurchaseTemplate,
+ batchGeneratePurchaseInboundSteps,
} from "@/api/procurementManagement/procurementLedger.js";
+ import { allOilDepot } from "@/api/basicData/oilDepot.js";
import useFormData from "@/hooks/useFormData.js";
const FileList = defineAsyncComponent(() =>
import("@/components/Dialog/FileList.vue")
@@ -738,6 +936,7 @@
const productOptions = ref([]);
const salesContractList = ref([]);
const supplierList = ref([]);
+ const oilDepotList = ref([]);
const tableLoading = ref(false);
const recordId = ref();
const fileListDialogVisible = ref(false);
@@ -776,9 +975,9 @@
// 鑾峰彇鍏ュ簱鐘舵�佹爣绛剧被鍨�
const getStockInStatusType = status => {
const typeMap = {
- "寰呭叆搴�": "info", // 寰呭叆搴� - 鐏拌壊
- "鍏ュ簱涓�": "warning", // 鍏ュ簱涓� - 姗欒壊
- "瀹屽叏鍏ュ簱": "success", // 瀹屽叏鍏ュ簱 - 缁胯壊
+ 寰呭叆搴�: "info", // 寰呭叆搴� - 鐏拌壊
+ 鍏ュ簱涓�: "warning", // 鍏ュ簱涓� - 姗欒壊
+ 瀹屽叏鍏ュ簱: "success", // 瀹屽叏鍏ュ簱 - 缁胯壊
};
return typeMap[status] || "";
};
@@ -786,9 +985,9 @@
// 鑾峰彇鍏ュ簱瀹℃牳鐘舵�佹爣绛剧被鍨�
const getStockInApprovalStatusType = status => {
const typeMap = {
- "寰呭叆搴�": "info", // 寰呭叆搴� - 鐏拌壊
- "鍏ュ簱涓�": "warning", // 鍏ュ簱涓� - 姗欒壊
- "瀹屽叏鍏ュ簱": "success", // 瀹屽叏鍏ュ簱 - 缁胯壊
+ 寰呭叆搴�: "info", // 寰呭叆搴� - 鐏拌壊
+ 鍏ュ簱涓�: "warning", // 鍏ュ簱涓� - 姗欒壊
+ 瀹屽叏鍏ュ簱: "success", // 瀹屽叏鍏ュ簱 - 缁胯壊
};
return typeMap[status] || "";
};
@@ -920,6 +1119,16 @@
paymentMethod: "",
executionDate: "",
isChecked: false,
+ purchaseCategory: "",
+ purchaseOilProduct: "",
+ logisticsMethod: "",
+ pickupMethod: "",
+ oilDepotId: "",
+ customerName: "",
+ bestArrivalDate: "",
+ purchaseQuantity: "",
+ purchaseOrderStatus: "",
+ applicationSubmitTime: "",
},
rules: {
purchaseContractNumber: [
@@ -931,6 +1140,18 @@
supplierId: [{ required: true, message: "璇疯緭鍏�", trigger: "blur" }],
entryDate: [{ required: true, message: "璇烽�夋嫨", trigger: "change" }],
executionDate: [{ required: true, message: "璇烽�夋嫨", trigger: "change" }],
+ purchaseCategory: [
+ { required: true, message: "璇烽�夋嫨閲囪喘绫诲埆", trigger: "change" },
+ ],
+ purchaseOilProduct: [
+ { required: true, message: "璇烽�夋嫨閲囪喘娌瑰搧", trigger: "change" },
+ ],
+ oilDepotId: [
+ { required: true, message: "璇烽�夋嫨閲囪喘娌瑰簱", trigger: "change" },
+ ],
+ purchaseQuantity: [
+ { required: true, message: "璇疯緭鍏ラ噰璐暟閲�", trigger: "change" },
+ ],
},
});
const { form, rules } = toRefs(data);
@@ -1260,7 +1481,14 @@
};
// 涓昏〃鍚堣鏂规硶
const summarizeMainTable = param => {
- return proxy.summarizeTable(param, ["contractAmount"]);
+ return proxy.summarizeTable(param, ["contractAmount", "netContractAmount"]);
+ };
+ const formatMoney = value => {
+ if (value === null || value === undefined || value === "") {
+ return "--";
+ }
+ const num = Number(value);
+ return Number.isFinite(num) ? num.toFixed(2) : "--";
};
// 瀛愯〃鍚堣鏂规硶
const summarizeProTable = param => {
@@ -1274,7 +1502,7 @@
const openForm = async (type, row) => {
// 缂栬緫鏃舵鏌ュ叆搴撶姸鎬侊紝瀹屽叏鍏ュ簱鏃朵笉鑳界紪杈�
if (type === "edit" && row) {
- if (row.stockInStatus === '瀹屽叏鍏ュ簱') {
+ if (row.stockInStatus === "瀹屽叏鍏ュ簱") {
proxy.$modal.msgWarning("瀹屽叏鍏ュ簱鐘舵�佺殑璁板綍涓嶈兘缂栬緫");
return;
}
@@ -1293,9 +1521,10 @@
isTemplateNameDuplicate.value = false;
try {
// 骞惰鍔犺浇鍩虹鏁版嵁
- const [salesRes, supplierRes] = await Promise.all([
+ const [salesRes, supplierRes, oilDepotRes] = await Promise.all([
getSalesNo(),
getOptions(),
+ allOilDepot(),
]);
salesContractList.value = salesRes || [];
@@ -1303,6 +1532,7 @@
supplierList.value = (supplierRes.data || []).filter(
item => item.isWhite === 0
);
+ oilDepotList.value = oilDepotRes?.data || [];
form.value.entryDate = getCurrentDate();
@@ -1314,7 +1544,10 @@
form.value = { ...purchaseRes, stockInStatus: row.stockInStatus };
fileList.value = purchaseRes.storageBlobVOS || [];
// 浣跨敤 productList 鎺ュ彛鑾峰彇浜у搧鍒楄〃锛屼互鑾峰彇鍏ュ簱瀹℃牳鐘舵��
- const productRes = await productList({ salesLedgerId: row.id, type: 2 });
+ const productRes = await productList({
+ salesLedgerId: row.id,
+ type: 2,
+ });
productData.value = productRes.data || [];
} catch (error) {
console.error("鍔犺浇閲囪喘鍙拌处鏁版嵁澶辫触:", error);
@@ -1447,7 +1680,7 @@
// 鎵撳紑浜у搧寮规
const openProductForm = async (type, row, index) => {
// 缂栬緫鏃舵鏌ヤ骇鍝佸叆搴撳鏍哥姸鎬侊紝瀹屽叏鍏ュ簱鏃朵笉鑳界紪杈�
- if (type === "edit" && row && row.stockInApprovalStatus === '瀹屽叏鍏ュ簱') {
+ if (type === "edit" && row && row.stockInApprovalStatus === "瀹屽叏鍏ュ簱") {
proxy.$modal.msgWarning("瀹屽叏鍏ュ簱鐘舵�佺殑浜у搧涓嶈兘缂栬緫");
return;
}
@@ -1630,13 +1863,17 @@
};
// 鍒犻櫎浜у搧
const deleteProduct = () => {
+ if (productData.value.length <= 1) {
+ proxy.$modal.msgWarning("閲囪喘鍙拌处鑷冲皯闇�瑕佷繚鐣欎竴鏉′骇鍝佹暟鎹�");
+ return;
+ }
if (productSelectedRows.value.length === 0) {
proxy.$modal.msgWarning("璇烽�夋嫨鏁版嵁");
return;
}
// 妫�鏌ラ�変腑鐨勪骇鍝佷腑鏄惁鏈夊畬鍏ㄥ叆搴撶殑
const hasFullyStocked = productSelectedRows.value.some(
- row => row.stockInApprovalStatus === '瀹屽叏鍏ュ簱'
+ row => row.stockInApprovalStatus === "瀹屽叏鍏ュ簱"
);
if (hasFullyStocked) {
proxy.$modal.msgWarning("閫変腑鐨勪骇鍝佷腑鍖呭惈瀹屽叏鍏ュ簱鐨勪骇鍝侊紝鏃犳硶鍒犻櫎");
@@ -1712,6 +1949,37 @@
proxy.$modal.msgSuccess("鍒犻櫎鎴愬姛");
getList();
});
+ })
+ .catch(() => {
+ proxy.$modal.msg("宸插彇娑�");
+ });
+ };
+
+ const handleBatchGenerate = async () => {
+ if (selectedRows.value.length === 0) {
+ proxy.$modal.msgWarning("璇烽�夋嫨鏁版嵁");
+ return;
+ }
+ const ids = selectedRows.value.map((item) => item.id);
+
+ ElMessageBox.confirm("纭鎵归噺鐢熸垚鏁版嵁锛�", "鎵归噺鐢熸垚", {
+ confirmButtonText: "纭",
+ cancelButtonText: "鍙栨秷",
+ type: "info",
+ })
+ .then(() => {
+ proxy.$modal.loading("姝e湪鎵归噺鐢熸垚鏁版嵁锛岃绋嶅��...");
+ batchGeneratePurchaseInboundSteps({ ids })
+ .then((res) => {
+ proxy.$modal.msgSuccess("鎵归噺鐢熸垚鎴愬姛");
+ getList();
+ })
+ .catch(() => {
+ proxy.$modal.msgError("鎵归噺鐢熸垚澶辫触");
+ })
+ .finally(() => {
+ proxy.$modal.closeLoading();
+ });
})
.catch(() => {
proxy.$modal.msg("宸插彇娑�");
@@ -1840,6 +2108,13 @@
}
}
};
+ // 閲囪喘绫诲埆鏀瑰彉锛氫粎浠e偍/閲囪喘鐩撮攢鏃跺鎴峰悕绉板彲鐢紝鍒囨崲鍚庢竻绌�
+ const purchaseCategoryChange = val => {
+ if (!["浠e偍", "閲囪喘鐩撮攢"].includes(val)) {
+ form.value.customerName = "";
+ }
+ };
+
// 閿�鍞悎鍚岄�夋嫨鏀瑰彉鏂规硶
const salesLedgerChange = async row => {
console.log("row", row);
@@ -1855,7 +2130,7 @@
contractNo: form.value.salesLedgerId,
});
if (code == 200) {
- productData.value = data;
+ productData.value = data || [];
}
};
@@ -1928,6 +2203,18 @@
</script>
<style scoped lang="scss">
+ // 琛ㄥ崟鍒嗘爮鏍囬锛氳摑鑹茬珫鏉� + 娴呰摑搴曡壊锛岀獊鍑哄垎鍖�
+ .form-section-title {
+ margin: 18px 0 14px;
+ padding: 8px 14px;
+ font-size: 15px;
+ font-weight: 600;
+ color: #1d6fd8;
+ background: linear-gradient(90deg, rgba(64, 158, 255, 0.14), rgba(64, 158, 255, 0.02));
+ border-left: 4px solid #409eff;
+ border-radius: 3px;
+ }
+
.invalid-row {
opacity: 0.6;
background-color: #f5f7fa;
@@ -1945,6 +2232,24 @@
.select-button-group {
display: flex;
align-items: center;
+ }
+
+ // 閲囪喘娌瑰簱涓嬫媺閫夐」锛氬皬鍗$墖鏍峰紡
+ .oil-depot-option {
+ padding: 8px 10px;
+
+ .oil-depot-option-title {
+ font-size: 14px;
+ font-weight: 600;
+ color: #303133;
+ margin-bottom: 4px;
+ }
+
+ .oil-depot-option-line {
+ font-size: 12px;
+ color: #909399;
+ line-height: 1.8;
+ }
}
// 瀹℃壒浜鸿妭鐐瑰鍣ㄦ牱寮�
@@ -2008,3 +2313,25 @@
}
}
</style>
+
+<style lang="scss">
+ // 涓嬫媺闈㈡澘娓叉煋鍦� body 涓嬶紝闇�鍏ㄥ眬鏍峰紡
+ .oil-depot-select-popper {
+ .el-select-dropdown__item {
+ height: auto;
+ line-height: normal;
+ padding: 4px 0;
+ }
+
+ .oil-depot-option {
+ border: 1px solid #e4e7ed;
+ border-radius: 6px;
+ background-color: #fafbfc;
+
+ &:hover {
+ border-color: #409eff;
+ background-color: #f0f7ff;
+ }
+ }
+ }
+</style>
--
Gitblit v1.9.3