Parcourir la source

Merge remote-tracking branch 'origin/master'

zhoupeng il y a 2 ans
Parent
commit
84038f2e2f

+ 17 - 0
chuanyi_client2/src/api/datasource.js

@@ -373,6 +373,23 @@ export function testDataModelById(params) {
 }
 
 /**
+ * 验证数据表达式值
+ * @param params
+ * @returns {AxiosPromise}
+ */
+export function testDataModelByModel(params) {
+    return request({
+        url: '/dataModel/testDataModelByModel?parameter=' + params.parameter
+            + '&mathString=' + encodeURIComponent(params.mathString)
+            + '&dataValue=' + params.dataValue,
+        headers: {
+            isToken: true
+        },
+        method: 'get'
+    })
+}
+
+/**
  * 保存报表模板
  * @param data
  * @returns {AxiosPromise}

+ 1 - 0
chuanyi_client2/src/assets/icons/svg/grey.svg

@@ -0,0 +1 @@
+<svg t="1682231385611" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="2649" width="64" height="64"><path d="M512 322c-104.92 0-190 85.08-190 190s85.08 190 190 190 190-85.06 190-190-85.08-190-190-190z" p-id="2650" fill="#8a8a8a"></path></svg>

+ 9 - 18
chuanyi_client2/src/components/HeaderMain/index.vue

@@ -51,6 +51,7 @@
                 <svg-icon v-else-if="data.id == -1" icon-class="groups"/>
                 <template v-else>
                   <svg-icon v-if="data.runState == 1" icon-class="green"/>
+                  <svg-icon v-else-if="data.runState == 0" icon-class="grey"/>
                   <svg-icon v-else icon-class="red"/>
                 </template>
                 <span :title='data.groupName || data.itemName'
@@ -183,13 +184,13 @@
               </el-form-item>
               <el-form-item label='日期设置' prop="daySetting">
                 <el-checkbox-group v-model="groupRateForm.daySetting">
-                  <el-checkbox name="daySetting" label="1">周一</el-checkbox>
-                  <el-checkbox name="daySetting" label="2">周二</el-checkbox>
-                  <el-checkbox name="daySetting" label="3">周三</el-checkbox>
-                  <el-checkbox name="daySetting" label="4">周四</el-checkbox>
-                  <el-checkbox name="daySetting" label="5">周五</el-checkbox>
-                  <el-checkbox name="daySetting" label="6">周六</el-checkbox>
-                  <el-checkbox name="daySetting" label="0">周日</el-checkbox>
+                  <el-checkbox name="daySetting" label="MON">周一</el-checkbox>
+                  <el-checkbox name="daySetting" label="TUE">周二</el-checkbox>
+                  <el-checkbox name="daySetting" label="WED">周三</el-checkbox>
+                  <el-checkbox name="daySetting" label="THU">周四</el-checkbox>
+                  <el-checkbox name="daySetting" label="FRI">周五</el-checkbox>
+                  <el-checkbox name="daySetting" label="SAT">周六</el-checkbox>
+                  <el-checkbox name="daySetting" label="SUN">周日</el-checkbox>
                 </el-checkbox-group>
               </el-form-item>
               <el-form-item label='记录周期' prop="valuePeriod">
@@ -640,9 +641,6 @@ export default {
         modeValue: [
           { validator: this.testModeValue }
         ],
-        daySetting: [
-          { type: 'array', required: true, message: '请至少选择一个日期设置', trigger: 'change' }
-        ],
         valuePeriod: [
           { required: true, message: '请选择记录周期', trigger: 'blur' }
         ]
@@ -1117,7 +1115,7 @@ export default {
           this.groupRateForm.modeValue = item.modeValue
         }
         this.groupRateForm.valuePeriod = [item.startReadTime, item.endReadTime]
-        this.groupRateForm.daySetting = item.readWeek.split(',')
+        this.groupRateForm.daySetting = item.readWeek ? item.readWeek.split(',') : []
         switch (this.groupRateForm.readMode) {
           case '0':
             this.modeValueTips = '周期值'
@@ -1477,13 +1475,6 @@ export default {
           return false
         }
       }
-      if (this.groupRateForm.daySetting.length == 0) {
-        this.$message({
-          message: '请至少选择一项日期设置!',
-          type: 'warning'
-        })
-        return false
-      }
       if (!this.groupBasicForm.dataSourceId) {
         this.$message({
           message: '请选择数据源!',

+ 10 - 0
chuanyi_client2/src/utils/cqcy.js

@@ -385,6 +385,16 @@ export function showAlertWin(_this, e, callback) {
     })
 }
 
+export function showAlertWinTips(_this, tips, e, callback) {
+    _this.$alert(e, tips, {
+        confirmButtonText: '确定',
+        showClose: false,
+        callback: action => {
+            if (callback) callback(action)
+        }
+    })
+}
+
 /**
  * 排序比较
  * @param {string} propertyName 排序的属性名

+ 76 - 42
chuanyi_client2/src/views/data_model/index.vue

@@ -1,17 +1,17 @@
 <template>
   <div class="cqcy-content" style="margin: 0;height: calc(100% - 70px);">
     <breadcrumb-view :breadcrumbList="breadcrumbList" :show-index="false"></breadcrumb-view>
+    <div class="cy-nav-sx">
+      <el-input placeholder="请输入名称或者四则运算表达式"
+                v-model="searchTxt"
+                style="margin-left: 5px; width: 300px;"
+                prefix-icon="el-icon-search">
+      </el-input>
+      <el-button style="margin-left: 5px;" @click="searchRuleEvent">查询</el-button>
+    </div>
     <el-button type="primary" class="cy-nav-btn" icon="el-icon-circle-plus-outline" size="mini" @click="handleAdd">新增</el-button>
     <el-divider></el-divider>
     <div class="cy-main">
-      <div style="margin-bottom: 10px;">
-        <el-input placeholder="请输入名称或者四则运算表达式"
-                  v-model="searchTxt"
-                  style="margin-left: 5px; width: 300px;"
-                  prefix-icon="el-icon-search">
-        </el-input>
-        <el-button style="margin-left: 5px;" @click="searchRuleEvent">查询</el-button>
-      </div>
       <el-table
           :data="tableData" border :stripe="true"
           :header-cell-style="{background: '#E8E8E8'}"
@@ -73,7 +73,7 @@
     <!-- 新增数据模型 -->
     <el-dialog
         :title="dialogDataModelTitle"
-        width="80%"
+        width="650px"
         top="10vh"
         center
         v-dialog-drag
@@ -87,7 +87,8 @@
           <el-input v-model="dataModelForm.remark" placeholder="请输入名称" maxlength="20" show-word-limit></el-input>
         </el-form-item>
         <el-form-item label="四则运算表达式" prop="operationRule">
-          <el-input v-model="dataModelForm.operationRule" placeholder="请输入四则运算表达式"></el-input>
+          <el-input v-model="dataModelForm.operationRule" style="width: calc(100% - 85px);" placeholder="请输入四则运算表达式"></el-input>
+          <el-button @click="testEditEvent" style="float: right;width: 80px;">测试</el-button>
           <span style="font-size: 12px;">
             提示:四则运算支持的英文符号&nbsp;【<b>+</b>】、【<b>-</b>】、【<b>*</b>】、【<b>/</b>】、【<b>()</b>】,真实数据值使用固定字符串&nbsp;【<b>calcVal</b>】
           </span>
@@ -104,12 +105,12 @@
 
 <script>
 import BreadcrumbView from '@/components/BreadcrumbView'
-import {customCompare, showAlertWin, showLoading} from '@/utils/cqcy'
+import {customCompare, showAlertWin, showAlertWinTips, showLoading} from '@/utils/cqcy'
 import {
   addDataModel,
   delDataModelById,
   getAllDataModel, getDataModelById,
-  testDataModelById,
+  testDataModelById, testDataModelByModel,
   updateDataModel
 } from "@/api/datasource";
 
@@ -119,33 +120,6 @@ export default {
     BreadcrumbView
   },
   data() {
-    /** 四则运算表达式验证 */
-    let validateCalc = (rule, value, callback) => {
-      try {
-        value = value.replace(/ /g, '')
-        value = value.replace(/calcVal/g, '99999')
-        if (/^[\d|\-|\+|\*|\/|\.|\(|\)]+$/.test(value)) {
-          // 排除连续的运算符
-          if (/[\-|\+|\*|\/]{2,}/.test(value)) {
-            callback(new Error('表达式验证失败,请修改后再试'))
-            return
-          }
-          // 解决 0.5 简写成 .5
-          if (/\D\./.test(value)) {
-            callback(new Error('表达式验证失败,请修改后再试'))
-            return
-          }
-          let val = eval(value)
-          if (typeof val == 'number' && val != Infinity) {
-            callback()
-            return
-          }
-        }
-        callback(new Error('表达式验证失败,请修改后再试'))
-      } catch (e) {
-        callback(new Error('表达式验证失败,请修改后再试'))
-      }
-    }
     return {
       breadcrumbList: ['数据模型'],
       dialogDataModelVisible: false,
@@ -164,7 +138,7 @@ export default {
       dataModelRules: {
         operationRule: [
           { required: true, message: '表达式不能为空', trigger: 'blur' },
-          { validator: validateCalc }
+          { validator: this.validateCalc }
         ],
         remark: [
           { required: true, message: '名称不能为空', trigger: 'blur' }
@@ -183,6 +157,33 @@ export default {
     sortChange({ prop, order }) {
       this.tableData.sort(customCompare(prop, order))
     },
+    /** 四则运算表达式验证 */
+    validateCalc(rule, value, callback) {
+      try {
+        value = value.replace(/ /g, '')
+        value = value.replace(/calcVal/g, '99999')
+        if (/^[\d|\-|\+|\*|\/|\.|\(|\)]+$/.test(value)) {
+          // 排除连续的运算符
+          if (/[\-|\+|\*|\/]{2,}/.test(value)) {
+            callback(new Error('表达式验证失败,请修改后再试'))
+            return
+          }
+          // 解决 0.5 简写成 .5
+          if (/\D\./.test(value)) {
+            callback(new Error('表达式验证失败,请修改后再试'))
+            return
+          }
+          let val = eval(value)
+          if (typeof val == 'number' && val != Infinity) {
+            callback()
+            return
+          }
+        }
+        callback(new Error('表达式验证失败,请修改后再试'))
+      } catch (e) {
+        callback(new Error('表达式验证失败,请修改后再试'))
+      }
+    },
     /** 新增数据模型 */
     handleAdd() {
       this.dataModelForm = {
@@ -207,8 +208,22 @@ export default {
         showAlertWin(this, e)
       })
     },
+    /** 新增编辑测试 */
+    testEditEvent() {
+      let txt = this.dataModelForm.operationRule
+      this.validateCalc(null, txt, (e) => {
+        if (e) {
+          this.$message({
+            message: e.message,
+            type: 'warning'
+          })
+          return
+        }
+        this.handleTest(null, null, txt)
+      })
+    },
     /** 测试数据模型值 */
-    handleTest(index, row) {
+    handleTest(index, row, ruleModel) {
       this.$prompt('请输入数值', '四则运算表达式验证', {
         confirmButtonText: '确定',
         cancelButtonText: '取消',
@@ -224,6 +239,25 @@ export default {
         }
       }).then(({ value }) => {
         const loading = showLoading(this, '计算中,请稍候···')
+        if (ruleModel) {
+          let params = {
+            'parameter': 'calcVal',
+            'mathString': ruleModel,
+            'dataValue': value
+          }
+          testDataModelByModel(params).then(res => {
+            loading.close()
+            let bds = ruleModel
+            bds = bds.replaceAll(/calcVal/g, value)
+            bds += '='
+            bds += res.data
+            showAlertWinTips(this, '计算结果', bds)
+          }).catch((e) => {
+            loading.close()
+            showAlertWin(this, e)
+          })
+         return
+        }
         let params = {
           'id': row.id,
           'dataValue': value
@@ -234,7 +268,7 @@ export default {
           bds = bds.replaceAll(/calcVal/g, value)
           bds += '='
           bds += res.data
-          showAlertWin(this, bds)
+          showAlertWinTips(this, '计算结果', bds)
         }).catch((e) => {
           loading.close()
           showAlertWin(this, e)