Browse Source

feat: 增加匹配所有的复选框,支持按某一地区或所有地区匹配总表、显示空数据,或者

vian 1 year ago
parent
commit
2cf67d415b

+ 4 - 4
modules/price_info_lib/controllers/index.js

@@ -242,8 +242,8 @@ class PriceInfoController extends BaseController {
 
     async getPriceEmptyData(req, res) {
         try {
-            const { libID, compilationID } = JSON.parse(req.body.data);
-            const data = await facade.getPriceEmptyData(compilationID, libID);
+            const { libID, compilationID, areaID } = JSON.parse(req.body.data);
+            const data = await facade.getPriceEmptyData(compilationID, libID, areaID);
             res.json({ error: 0, message: 'getPriceEmptyData success', data });
         } catch (err) {
             console.log(err);
@@ -287,8 +287,8 @@ class PriceInfoController extends BaseController {
     // 匹配总表
     async matchSummary(req, res) {
         try {
-            const { compilationID, libID } = JSON.parse(req.body.data);
-            await facade.matchSummary(compilationID, libID);
+            const { compilationID, libID, areaID } = JSON.parse(req.body.data);
+            await facade.matchSummary(compilationID, libID, areaID);
             res.json({ error: 0, message: 'matchSummary success' });
         } catch (err) {
             console.log(err);

+ 17 - 5
modules/price_info_lib/facade/index.js

@@ -649,14 +649,22 @@ const getSummaryMap = (items) => {
 // 匹配总表
 // 按规则匹配信息价的编码、别名编码、计算式(只匹配珠海建筑,要单独标记珠海地区);
 // 匹配规则:名称+规格型号+单位,与总表一致则自动填入编码、别名编码、计算式(珠海建筑);
-const matchSummary = async (compilationID, libID) => {
+const matchSummary = async (compilationID, libID, areaID) => {
     const updateBulks = [];
-    const areas = await priceInfoAreaModel.find({ compilationID }, '-_id ID name').lean();
+    const areaFilter = { compilationID };
+    if (areaID) {
+        areaFilter.ID = areaID;
+    }
+    const areas = await priceInfoAreaModel.find(areaFilter, '-_id ID name').lean();
     const areaNameMap = {};
     areas.forEach(area => {
         areaNameMap[area.ID] = area.name;
     });
-    const priceItems = await priceInfoItemModel.find({ libID }, '-_id ID compilationID name specs unit areaID period').lean();
+    const filter = { libID };
+    if (areaID) {
+        filter.areaID = areaID;
+    }
+    const priceItems = await priceInfoItemModel.find(filter, '-_id ID compilationID name specs unit areaID period').lean();
     const summaryItems = await priceInfoSummaryModel.find({}, '-_id ID name specs unit code classCode expString').lean();
     const summaryMap = getSummaryMap(summaryItems);
     priceItems.forEach(priceItem => {
@@ -688,12 +696,16 @@ const matchSummary = async (compilationID, libID) => {
 }
 
 // 获取空数据(没有别名编码)
-const getPriceEmptyData = async (compilationID, libID) => {
+const getPriceEmptyData = async (compilationID, libID, areaID) => {
     const lib = await priceInfoLibModel.findOne({ ID: libID }).lean();
     if (!lib) {
         return [];
     }
-    const priceItems = await priceInfoItemModel.find({ compilationID, libID, period: lib.period }).lean();
+    const filter = { compilationID, libID, period: lib.period };
+    if (areaID) {
+        filter.areaID = areaID;
+    }
+    const priceItems = await priceInfoItemModel.find(filter).lean();
     return priceItems.filter(item => !item.classCode);
 };
 

+ 14 - 0
web/maintain/price_info_lib/css/index.css

@@ -138,4 +138,18 @@ body {
 
 #save-in-summary {
     margin-bottom: 4px;
+}
+
+#match-all {
+    display: inline-block;
+    margin-left: 20px;
+    color: #000;
+}
+
+#match-all-input {
+    margin-left: -1rem !important;
+}
+
+#match-all-label {
+    padding: 0;
 }

+ 6 - 0
web/maintain/price_info_lib/html/edit.html

@@ -23,6 +23,12 @@
                <button id="match-summary">匹配总表</button> 
                <button id="show-empty">显示空数据</button> 
                <button id="check-repeat">检测重复别名编码</button> 
+               <div class="form-check" id="match-all">
+                <input class="form-check-input" type="checkbox" value="" id="match-all-input">
+                <label class="form-check-label" for="match-all-input" id="match-all-label">
+                  匹配所有
+                </label>
+              </div>
             </div>
 
         </nav>

+ 8 - 3
web/maintain/price_info_lib/js/priceClass.js

@@ -462,9 +462,14 @@ const CLASS_BOOK = (() => {
     $.bootstrapLoading.progressStart('匹配总表', true);
     $("#progress_modal_body").text('正在匹配总表,请稍后...');
     try {
-      await ajaxPost('/priceInfo/matchSummary', { libID, compilationID }, 1000 * 60 * 10);
-      $.bootstrapLoading.progressEnd();
-      window.location.reload()
+      const matchAll = $('#match-all-input')[0].checked;
+      const areaID = matchAll ? '' : AREA_BOOK.curArea?.ID;
+      debugger;
+      await ajaxPost('/priceInfo/matchSummary', { libID, compilationID, areaID }, 1000 * 60 * 10);
+      setTimeout(() => {
+        $.bootstrapLoading.progressEnd();
+        window.location.reload()
+      }, 1000);
     } catch (error) {
       alert(error)
       console.log(error);

+ 3 - 1
web/maintain/price_info_lib/js/priceEmpty.js

@@ -97,7 +97,9 @@ const EMPTY_BOOK = (() => {
     curRow = 0;
     $.bootstrapLoading.start();
     try {
-      totalData = await ajaxPost('/priceInfo/getPriceEmptyData', { libID, compilationID }, 1000 * 60 * 10);
+      const matchAll = $('#match-all-input')[0].checked;
+      const areaID = matchAll ? '' : AREA_BOOK.curArea?.ID;
+      totalData = await ajaxPost('/priceInfo/getPriceEmptyData', { libID, compilationID, areaID }, 1000 * 60 * 10);
       setTotalMap(totalData);
       const tableData = getTableData(totalData);
       cache.push(...tableData)