Просмотр исходного кода

1528 表单子表的添加和编辑按钮的事件中,当操作当前数据时,依据当前数据的其中部分字段的值,自动生成第三个字段的值
1593 增加一个全选的按钮,或者增加每日保养选项

cyy 2 лет назад
Родитель
Сommit
8735852474

+ 386 - 0
src/views/component/dataAnalysisDialog.vue

@@ -0,0 +1,386 @@
+<template>
+    <el-dialog ref="dialog" :visible.sync="dialogVisible" :close-on-click-modal="false" class="form-renderer-dialog" :width="width" :top="top" :title="this.dynamicParams.editFromType" :custom-class="customClass"  append-to-body @close="closeDialog">
+        <div class="maintenanceCycle">
+            <div class="maintenanceFont">指标名称:</div>
+                <div style="width:50%;">
+                    <el-select v-model="cycleValue" clearable placeholder="请选择">
+                        
+                        <el-option
+                            v-for="item in cycleOptions"
+                            :key="item.val"
+                            :label="item.label"
+                            :value="item.val">
+                            <span style="float: left">{{ item.label }}</span>
+                            <span style="float: right; color: #8492a6; font-size: 13px">{{ item.leixing }}</span>
+                        </el-option>
+                    </el-select>
+                </div>
+            </div>
+            <div class="maintenanceCycle" style="align-items: normal;">
+                <div class="maintenanceFont">类型:</div>
+                <el-radio-group v-model="tyepRadio">
+                    <el-radio v-for="(item,i) in tyepRadioOptions" :key="i" :label="item.val">{{item.label}}</el-radio>
+                </el-radio-group>
+                
+            </div>
+            <div class="maintenanceCycle" style="align-items: normal;">
+                <div class="maintenanceFont">验证方法:</div>
+                <el-input
+                    style="width:50%;"
+                    type="textarea"
+                    placeholder="请输入内容"
+                    v-model="verificationMethodTextarea"
+                    maxlength="500"
+                    show-word-limit
+                >
+                </el-input>
+                
+            </div>
+            <div class="maintenanceCycle" style="align-items: normal;">
+                <div class="maintenanceFont">判断标准:</div>
+                <el-input
+                    style="width:50%;"
+                    type="textarea"
+                    placeholder="请输入内容"
+                    v-model="criteriaTextarea"
+                    maxlength="500"
+                    show-word-limit
+                >
+                </el-input>
+                
+            </div>
+            <div class="maintenanceCycle" style="align-items: normal;">
+                <div class="maintenanceFont">评价结果:</div>
+                <el-input
+                    style="width:50%;"
+                    type="textarea"
+                    placeholder="请输入内容"
+                    v-model="maintenanceTextarea"
+                    maxlength="500"
+                    show-word-limit
+                >
+                </el-input>
+            </div>
+            <div class="maintenanceCycle" style="align-items: normal;">
+                <div class="maintenanceFont">数据存储:</div>
+                <el-input
+                    style="width:50%;"
+                    type="textarea"
+                    placeholder="请输入内容"
+                    v-model="dataStoreTextarea"
+                    maxlength="500"
+                    show-word-limit
+                >
+                </el-input>
+            </div>
+            <div slot="footer" class="el-dialog--center">
+                <ibps-toolbar :actions="editFromType != 'consult' ? toolbars : toolbarsConsult" @action-event="handleActionEvent" />
+            </div>
+    </el-dialog>
+</template>
+<script>
+import ActionUtils from '@/utils/action'
+import { queryDataTable } from '@/api/platform/data/dataTemplate'
+import { getBuildDataById } from '@/api/platform/data/dataTemplate'
+import { defaultsDeep } from 'lodash'
+import Vue from 'vue'
+// Vue.component('ibps-formrender', () => import('@/business/platform/form/formrender/index.vue'))
+
+export default {
+    props: {
+        visible: {
+            type: Boolean,
+            default: false
+        },
+        title: {
+            type: String
+        },
+        customClass: {
+            type: String
+        },
+        width: {
+            type: String,
+            default: '80%'
+        },
+        top: {
+            type: String,
+            default: '10%'
+        },
+        editFromType: {
+            type: String,
+            default: 'add'
+        },
+        dynamicParams:{
+            type: Object
+        },
+        templateKey:{
+            type: String,
+            default: ''
+        }
+    },
+    data() {
+        
+        const subtableConfiguration = ()=> {
+            let zbTable = this.dynamicParams.formObj.formDefData.fields.find(i => i.field_name == "t_sjfxzb").field_options.columns
+            let zblbTable = zbTable.find(i => i.field_name == "zhiBiaoId").field_options.options
+            
+            return zblbTable;
+        }
+        const subtableTypeConfiguration = ()=> {
+            let zbTable = this.dynamicParams.formObj.formDefData.fields.find(i => i.field_name == "t_sjfxzb").field_options.columns
+            let zblbTable = zbTable.find(i => i.field_name == "leiXing").field_options.options
+            console.log(zblbTable)
+            return zblbTable;
+        }
+        return {
+            qrCode: '',
+            dialogVisible: this.visible,
+            cycleOptions: [],
+            // cycleOptions: subtableConfiguration(),
+            cycleValue: '',
+            tyepRadio: '',
+            tyepRadioOptions: subtableTypeConfiguration(),
+            maintenanceTextarea:'',
+            verificationMethodTextarea:'',
+            criteriaTextarea:'',
+            dataStoreTextarea:'',
+            toolbars: [
+                { key: 'confirm', label: '确定'},
+                { key: 'cancel'}
+            ],
+            bringOut:[],
+            toolbarsConsult: [{ key: 'cancel' }],
+            dataTemplate:[]
+        }
+    },
+    watch: {
+        visible: {
+            handler: function (val, oldVal) {
+                this.dialogVisible = this.visible
+            },
+            immediate: true
+        },
+        cycleValue: {
+            handler: function (val, oldVal) {
+                // console.log(val)
+                //sql版
+                // let text = this.bringOut.find(i=>i.id_ == val)
+                // if (typeof text != 'undefined') {
+                //     this.verificationMethodTextarea = text.yan_zheng_fang_fa
+                //     this.criteriaTextarea = text.pan_duan_biao_zhu
+                // }
+
+                //值来源
+                let text = this.bringOut.find(i=>i.id_ == val)
+                if (typeof text != 'undefined') {
+                    this.tyepRadio = text.lei_xing_
+                    this.verificationMethodTextarea = text.yan_zheng_fang_fa
+                    this.criteriaTextarea = text.pan_duan_biao_zhu
+                }
+                
+            },
+            // immediate: true
+        }
+    },
+    created(){
+        this.loadFormData()
+        this.bringOutData()
+    },
+    methods: {
+        bringOutData(){
+            //sql版
+            // let bm = this.dynamicParams.formObj.getData("bianZhiBuMen")
+            // let sql = "select * from t_zbmbpzzb where parent_id_ = (select id_ from t_zbmbpz where bian_zhi_bu_men_ = '"+bm+"' ORDER BY create_time_ DESC limit 1)"
+            // this.$common.request('sql', sql).then(res => {
+            //     this.bringOut = res.variables.data.length>0?res.variables.data:[]
+            // })
+
+            //值来源
+            getBuildDataById({
+                dataTemplateId: "1214166960749674496"
+            }).then(response => {
+                
+                const data = response.data
+                // 从后台获取数据
+                this.dataTemplate = JSON.parse(data).templates
+                queryDataTable(this.getFormatParams()).then(response => {
+                    const data = response.data
+                    // this.dataResult = data.dataResult || []
+                    console.log(data.dataResult,'111111111111')
+                    this.bringOut = data.dataResult
+                    data.dataResult.forEach(element => {
+                        let newVal = {val:element.id_ || '',label:element.zhi_biao_ming_che || '',yanzheng:element.yan_zheng_fang_fa || '',panduan:element.pan_duan_biao_zhu || '',leixing:element.lei_xing_ || ''}
+                        this.cycleOptions.push(newVal)
+                    });
+                }).catch(() => {
+                })
+            }).catch(() => {
+                this.dialogLoading = false
+            })
+        },
+        handleActionEvent({ key }) {
+            switch (key) {
+                case 'confirm':
+                    this.handleConfirm(key)
+                    break
+                case 'cancel':
+                    this.closeDialog()
+                    break
+                default:
+                    break
+            }
+        },
+        handleConfirm(key) {
+            let a=this.dynamicParams.formObj.getData(this.templateKey)
+            
+            if(this.cycleValue!=''&&this.verificationMethodTextarea!=''&&this.criteriaTextarea!=''&&this.maintenanceTextarea!=''){
+                this.afterSubButton(this.verificationMethodTextarea,this.criteriaTextarea)
+                if(this.dynamicParams.position == 'manage'){
+                    this.$set(a,this.dynamicParams.params.index,{zhiBiaoMingCheng:this.cycleValue,leiXing:this.tyepRadio,yanZhengFangFa:this.verificationMethodTextarea,panDuanBiaoZhun:this.criteriaTextarea,pingJiaJieGuo:this.maintenanceTextarea,shuJuCunChu:this.dataStoreTextarea})
+                }else{
+                    a.push({zhiBiaoMingCheng:this.cycleValue,leiXing:this.tyepRadio,yanZhengFangFa:this.verificationMethodTextarea,panDuanBiaoZhun:this.criteriaTextarea,pingJiaJieGuo:this.maintenanceTextarea,shuJuCunChu:this.dataStoreTextarea})
+                }
+                // this.$nextTick(function(){
+                this.dynamicParams.formObj.setData(this.templateKey,a)
+                // })
+                
+                // this.closeDialog()
+            }else{
+                this.dynamicParams.formObj.$message.warning("请保证所有信息都已填写") 
+            }
+            
+        },
+        // 关闭当前窗口
+        closeDialog() {
+            this.$emit('close', false)
+        },
+        loadFormData() {
+           if(this.dynamicParams.position == 'manage'){
+                let a=this.dynamicParams.formObj.getData(this.templateKey)[this.dynamicParams.params.index]
+                this.cycleValue = a.zhiBiaoMingCheng
+                this.tyepRadio = a.leiXing
+                this.verificationMethodTextarea = a.yanZhengFangFa
+                this.criteriaTextarea = a.panDuanBiaoZhun
+                this.maintenanceTextarea = a.pingJiaJieGuo
+                this.dataStoreTextarea = a.shuJuCunChu
+           }
+        },
+        afterSubButton (val1,val2) {
+            let arr =  val1
+            let arrr =  val2
+            if(arr.length>0||arrr.length>0){
+                const regex = /{[^}]*}/g
+                const result = arr.match(regex)      // 验证方法 数组结构的字段对象
+                const resultt = arrr.match(regex)    // 判断标准 数组结构的字段对象
+                if(!result || !resultt){
+                    this.dynamicParams.formObj.$message.error('数据中的验证方法或判断标准没有填写正确的格式,请确认后在重试') 
+                    return
+                }
+                let resuArr = result.concat(resultt) //合并数组
+                //判断json格式数据是否正确
+                const ypName = resuArr.some(item => item.includes('样品名称'))
+                const numrep = resuArr.some(item => item.includes('重复次数'))
+                const exday = resuArr.some(item => item.includes('实验天数'))
+                const parameter = resuArr.some(item => item.includes('判断参数'))
+                const juvalue = resuArr.some(item => item.includes('判断值'))
+                if(!ypName){
+                    this.dynamicParams.formObj.$message.error('验证方法的{样品名称}未填写')  
+                    return
+                }
+                if(!numrep){
+                    this.dynamicParams.formObj.$message.error('验证方法的{重复次数}未填写')  
+                    return
+                }
+                if(!exday){
+                    this.dynamicParams.formObj.$message.error('验证方法的{实验天数}未填写')  
+                    return
+                }
+                if(!parameter){
+                    this.dynamicParams.formObj.$message.error('判断标准的{判断参数}未填写')  
+                return
+                }
+                if(!juvalue){
+                    this.dynamicParams.formObj.$message.error('判断标准的{判断值}未填写')  
+                    return
+                }
+                let ojb = this.getJson(resuArr)
+                this.dataStoreTextarea = JSON.stringify(ojb)
+                this.closeDialog()
+            }
+        },
+        //自定义方法处理数据转为json格式
+        getJson(arr){
+            let jsonObj = {}
+            arr.forEach(item => {
+            let parts = item.replace(/[{}]/g, '').split(':');
+            if (parts.length === 2) {
+                let key = parts[0].trim(); // 去除空格
+                let value = parts[1].trim(); // 去除空格
+                // 将属性名和属性值添加到 JSON 对象中
+                jsonObj[key] = value;
+            } else {
+                // console.log("格式错误:" + item);
+            }
+            })
+            return jsonObj
+        },
+        /**
+         * 获取格式化参数
+         */
+        getFormatParams() {
+            let formParams = {}
+            if (this.$refs['searchForm']) {
+                formParams = this.$refs['searchForm'].getSearcFormData() || {}
+            }
+            const responseData = this.dataTemplate[0]
+            responseData.datasetKey = 'dlzbpzb'
+            responseData.unique = 'id_'
+            responseData['dynamic_params'] = ''
+            formParams['response_data'] = JSON.stringify(responseData)
+            formParams['filter_condition_key'] = ''
+            return ActionUtils.formatParams(formParams, {limit: 200,page: 1,totalCount: 0})
+        }
+    }
+}
+</script>
+<style lang="scss" >
+.form-renderer-dialog {
+    .el-dialog__body {
+        padding: 10px 0 5px 0;
+    }
+    .el-dialog__headerbtn {
+        z-index: 99999;
+    }
+    @media print {
+        .el-dialog__headerbtn {
+            display: none !important;
+        }
+        .hidden-print {
+            padding: 0;
+            margin: 0;
+        }
+    }
+}
+.maintenanceCycle{
+    display: flex;
+    align-items: center;
+    margin: 2%;
+}
+.maintenanceFont{
+    width: 10%;
+}
+.marginNone{
+    margin: 0;
+}
+.rightMargin{
+    margin-right: 2.5vh !important;
+}
+.describe{
+    margin-top: 2%;
+    font-size: 12px;
+    color: #808080;
+}
+.fontColor{
+    color: #409EFF;
+}
+</style>

+ 7 - 7
src/views/component/deviceSubtableDialog.vue

@@ -54,12 +54,12 @@
                             :value="item.value">
                         </el-option>
                     </el-select>
-                    <div v-if="periodDayDate!=''&&judgeShow==1" class="describe">最近一次维护日期为 <span class="fontColor">{{periodDayDate}}</span></div>
-                    <div v-if="periodWeekDate!=''&&judgeShow==3" class="describe">最近一次维护日期为 <span class="fontColor">{{periodWeekDate}}</span></div>
-                    <div v-if="periodMonthDate!=''&&judgeShow==2" class="describe">最近一次维护日期为 <span class="fontColor">{{periodMonthDate}}</span></div>
-                    <div v-if="periodQuarterDate!=''&&judgeShow==4" class="describe">最近一次维护日期为 <span class="fontColor">{{periodQuarterDate}}</span></div>
-                    <div v-if="periodMidYearDate!=''&&judgeShow==5" class="describe">最近一次维护日期为 <span class="fontColor">{{periodMidYearDate}}</span></div>
-                    <div v-if="periodYearDate!=''&&judgeShow==6" class="describe">最近一次维护日期为 <span class="fontColor">{{periodYearDate}}</span></div>
+                    <div v-if="periodDayDate!=''&&judgeShow==1" class="describe">次维护日期为 <span class="fontColor">{{periodDayDate}}</span></div>
+                    <div v-if="periodWeekDate!=''&&judgeShow==3" class="describe">次维护日期为 <span class="fontColor">{{periodWeekDate}}</span></div>
+                    <div v-if="periodMonthDate!=''&&judgeShow==2" class="describe">次维护日期为 <span class="fontColor">{{periodMonthDate}}</span></div>
+                    <div v-if="periodQuarterDate!=''&&judgeShow==4" class="describe">次维护日期为 <span class="fontColor">{{periodQuarterDate}}</span></div>
+                    <div v-if="periodMidYearDate!=''&&judgeShow==5" class="describe">次维护日期为 <span class="fontColor">{{periodMidYearDate}}</span></div>
+                    <div v-if="periodYearDate!=''&&judgeShow==6" class="describe">次维护日期为 <span class="fontColor">{{periodYearDate}}</span></div>
                 </div>
             </div>
             <div class="maintenanceCycle" style="align-items: normal;">
@@ -178,7 +178,7 @@ export default {
             weekList:['周一','周二','周三','周四','周五','周六','周日'],
             quarterList:[[1,2,3],[4,5,6],[7,8,9],[10,11,12]],
             midList:[[1,2,3,4,5,6],[7,8,9,10,11,12]],
-            dayCheckList:[],
+            dayCheckList:['周一','周二','周三','周四','周五','周六','周日'],
             maintenanceTextarea:'',
             toolbars: [
                 { key: 'confirm', label: '确定'},