cuiqian2004
2025-05-16 9104222d52107d6244d034e4bbfa1c6408376900
3202
2个文件已添加
3个文件已修改
2587 ■■■■■ 已修改文件
manifest.json 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pages.json 21 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pages/index/index.vue 15 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pages/modal/3202.vue 1495 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pages/modal/3202_view.vue 1052 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
manifest.json
@@ -2,8 +2,8 @@
    "name" : "MoboxPDA",
    "appid" : "__UNI__56D451E",
    "description" : "",
    "versionName" : "1.1.57",
    "versionCode" : 1157,
    "versionName" : "1.1.58",
    "versionCode" : 1158,
    "transformPx" : false,
    /* 5+App特有相关 */
    "app-plus" : {
pages.json
@@ -86,16 +86,14 @@
        },
        {
            "path" : "pages/modal/3018",
            "style" :
            {
            "style": {
                "navigationBarTitleText":"%sys.add2%",
                "enablePullDownRefresh": false
            }
        },
        {
            "path" : "pages/modal/form/index",
            "style" :
            {
            "style": {
                "navigationBarTitleText":"%sys.add2%",
                "enablePullDownRefresh": false
            }
@@ -169,7 +167,22 @@
                "navigationBarTitleText": "%sys.view%",
                "enablePullDownRefresh": false
            }
        },
        {
            "path": "pages/modal/3202",
            "style": {
                "navigationBarTitleText": "%sys.add2%",
                "enablePullDownRefresh": false
            }
        }, {
            "path": "pages/modal/3202_view",
            "style": {
                "navigationBarTitleText": "%sys.view%",
                "enablePullDownRefresh": false
            }
        },
        {
            "path": "pages/modal/5600",
            "style": {
                "navigationBarTitleText": "%sys.sys.coding_disk%",
pages/index/index.vue
@@ -33,7 +33,9 @@
</template>
<script>
    import {Base64} from '@/js/Base64.js';
    import {
        Base64
    } from '@/js/Base64.js';
    import utils from "@/js/utils.js"
    import {
        areaFunc
@@ -223,6 +225,12 @@
                            url: '../modal/3201?param=' + param + "&titlename=" + appName
                        });
                    }
                } else if (defCode == '3202') {
                    if (this.isMobox3) { //Mobox3
                        uni.navigateTo({
                            url: '../modal/3202?param=' + param + "&titlename=" + appName
                        });
                    }
                } else if (defCode == '5600') { //码盘
                    if (this.isMobox3) { //Mobox3
                        uni.navigateTo({
@@ -272,6 +280,7 @@
        height: 100vh;
        background: #EAEAEA;
        display: flex;
        .area-list {
            width: 100%;
            height: 100%;
@@ -287,17 +296,20 @@
                display: flex;
                flex-direction: column;
                width:calc(100% - 40rpx);
                .area-name {
                    font-size: 40rpx;
                    width: 100%;
                    padding:  10rpx ;
                }
                .app-list {
                    width: 100%;
                    padding: 0;
                    display: flex;
                    flex-direction: row;
                    flex-wrap: wrap;
                    .app {
                        padding: 20rpx 25rpx 15rpx 25rpx;
                        text-align: center;
@@ -305,6 +317,7 @@
                        width: 125rpx;
                        display: flex;
                        flex-direction: column;
                        .logo {
                            height: 105rpx;
                            width: 105rpx;
pages/modal/3202.vue
New file
@@ -0,0 +1,1495 @@
<template>
    <view class="uni-page-modal-3202">
        <view class="v-content">
            <!-- 表头样式 -->
            <OIForm ref="refBaseForm" class="v-headStyle" :form="head_styledef.form" @on-focus="ontap"
                @on-change="onEnterChange" @on-click-prefix="onEnterChange" @on-click-suffix="onEnterChange"></OIForm>
            <view class="v-scroll-view">
                <scroll-view :scroll-top="scrollTop" :scroll-y="true" class="scroll-y" @scrolltolower="scrolltolower"
                    @scroll="scroll">
                    <view class="view-content" id="tabpanel">
                        <view class="dv-panel dv-panel-bkcolor" v-for="(style,ii) in detail1StyleDefList" :key="ii"
                            @click="onPanelClick(ii)" :id="'panel'+style.form.htmlobjId"
                            :class="activeItem == style?'bk-active':''">
                            <div class="dv-panel-input">
                                <OIForm class="v-area dv-panel" :form="style.form" viewMode></OIForm>
                            </div>
                            <div class="dv-panel-button" v-if="click_item_view">
                                <a @click="onViewPageClick(style)"><i class="mobox-normal-right-arrow" /></a>
                            </div>
                        </view>
                    </view>
                </scroll-view>
            </view>
        </view>
    </view>
</template>
<script>
    import {
        Base64
    } from '@/js/Base64.js';
    import classUtils from "@/js/utils.js"
    import {
        appGetInfo,
        dictGetInfo
    } from "@/api/mobox.js"
    import {
        getUIStyleInfo,
        runCustomEvent,
        dataObjQuery,
        dataObjDel
    } from "@/api/data.js"
    import dayjs from "dayjs";
    import OIForm from '@/components/oi-form/index.vue'
    import buttonClickMixin from '@/mixins/button-click.js';
    export default {
        mixins: [buttonClickMixin],
        components: {
            OIForm
        },
        data() {
            return {
                title: this.translateSys('add2'),
                isFilter: true,
                param: {},
                focusMateria: false,
                styledef: {},
                head_styledef: {
                    form: {
                        items: []
                    }
                },
                detail1_styledef: {},
                detail1StyleDefList: [],
                items: [],
                active_id: '',
                activeItem: {},
                where: '',
                wheres: '',
                orderby: '',
                query_id: '',
                pageindex: 1,
                page_size: 10,
                page_count: 0,
                scrollTop: 0,
                old: {
                    scrollTop: 0
                },
                isScroll: true,
                //获取数据类的HTML页面
                click_item_view: false,
                refreshing: false
            };
        },
        computed: {
            clickItemEvent() {
                return {
                    name: this.param?.ClickItem_Event?.name,
                    id: this.param?.ClickItem_Event?.id,
                };
            },
        },
        async onLoad(options) {
            // console.log(options);
            uni.setNavigationBarTitle({
                title: options.titlename
            }); //设置顶部标题
            this.title = options.titlename;
            this.param = JSON.parse(options.param);
            this.styledef = {};
            this.head_styledef = {
                form: {
                    items: []
                }
            };
            this.detail1_styledef = {};
            this.detail1StyleDefList = [];
            this.items = [];
            this.active_id = '';
            this.activeItem = {};
            this.click_item_view = false
            if (this.param?.ClickItem_Event?.id)
                this.click_item_view = true
            await this.Detail1_UIstyleGetInfo(this.param.ClsID, this.param.ListItem_Panel.id);
            this.initial()
        },
        methods: {
            //
            setData: function(obj) {
                let that = this;
                let keys = [];
                let val, data;
                Object.keys(obj).forEach(function(key) {
                    keys = key.split(".");
                    val = obj[key];
                    data = that.$data;
                    keys.forEach(function(key2, index) {
                        if (index + 1 == keys.length) {
                            that.$set(data, key2, val);
                        } else {
                            if (!data[key2]) {
                                that.$set(data, key2, {});
                            }
                        }
                        data = data[key2];
                    });
                });
            },
            //初始化
            async initial() {
                this.refreshing = true
                await this.Head_UIStyleGetInfo(this.param.ClsID, this.param.Input_Panel.id);
                this.wheres = '';
                this.pageindex = 1;
                this.page_size = 3;
                this.query_id = "";
                this.detail1StyleDefList = [];
                this.refreshing = false
            },
            //滚动到底部后懒加载数据
            async scrolltolower(e) {
                // console.log(e)
                if (this.isScroll) { //判断刷新一次后不会持续刷新
                    if (this.page_count == this.pageindex) {
                        return;
                    }
                    this.pageindex += 1;
                    if (this.where || this.page_count == 1) {
                        this.query_id = "";
                        this.detail1StyleDefList = [];
                    }
                    await this.loadDataGetList();
                }
            },
            scroll: function(e) {
                // console.log(e.detail.scrollTop)
                this.old.scrollTop = e.detail.scrollTop
            },
            async Head_UIStyleGetInfo(class_id, style_id) { //获取自定义表单样式
                try {
                    var $this = this;
                    var dataInfo = {
                        class_id: class_id,
                        ui_style_id: style_id,
                    };
                    // console.log(dataInfo);
                    const result = await getUIStyleInfo(dataInfo)
                    var styledef = "";
                    if (result.style_def) {
                        //mobox2的style_def是json字符串
                        styledef = result.style_def.replace(/\\/g, "");
                        //mobox3的style_def是base64字符串
                        if (!result.style_def.includes('"')) styledef = Base64.decode(result
                            .style_def);
                    }
                    $this.head_styledef = result.style_def ? JSON.parse(styledef) : {};
                    // this.form = this.head_styledef.form.model;
                    // console.log($this.head_styledef);
                    if ($this.head_styledef.form?.items) {
                        $this.head_styledef.form.items.forEach(async (ele, index) => {
                            if (ele.useDict == true) { //判断useDict是否使用字典
                                await this.DictGetInfo(ele.bind.dict, index, 'mast');
                            } else {
                                if (ele?.name === "Select") {
                                    const selections = ele?.selections || []
                                    //有默认值,显示默认值
                                    let itemName = ele.value || "";
                                    if (itemName) {
                                        $this.head_styledef.form
                                            .model[ele.fieldId] = itemName;
                                    }
                                    $this.head_styledef.form.items[index].selections = selections.map((
                                        a) => {
                                        return {
                                            value: a.value,
                                            text: a.label
                                        }
                                    })
                                }
                            }
                        });
                    }
                } catch (ex) {
                    // console.log(ex);
                    let tip = typeof ex.errMsg == "string" ? ex.errMsg : ex
                    uni.showModal({
                        title: this.translateSys("error") + "1.1",
                        content: tip,
                        showCancel: false,
                        confirmText: this.translateSys('close')
                    });
                }
            },
            async Detail1_UIstyleGetInfo(class_id, style_id) { //获取自定义表单样式
                try {
                    var $this = this;
                    var dataInfo = {
                        class_id: class_id,
                        ui_style_id: style_id,
                    };
                    // console.log(dataInfo);
                    const result = await getUIStyleInfo(dataInfo)
                    var styledef = "";
                    if (result.style_def) {
                        //mobox2的style_def是json字符串
                        styledef = result.style_def.replace(/\\/g, "");
                        //mobox3的style_def是base64字符串
                        if (!result.style_def.includes('"')) styledef = Base64.decode(result
                            .style_def);
                    }
                    $this.detail1_styledef = result.style_def ? JSON.parse(styledef) : {};
                    $this.detail1_styledef.SelBut_Checked = false;
                } catch (ex) {
                    // console.log(ex);
                    let tip = typeof ex.errMsg == "string" ? ex.errMsg : ex
                    uni.showModal({
                        title: this.translateSys("error") + "1.1",
                        content: tip,
                        showCancel: false,
                        confirmText: this.translateSys('close')
                    });
                }
            },
            async DictGetInfo(dict, index, type) { //Mobox3得到得到字典信息字典项列表
                this.data = [];
                var $this = this;
                var dataInfo = {
                    dict_id: dict.id,
                    dict_name: dict.name
                };
                try {
                    const result = await dictGetInfo(dataInfo)
                    if (type == 'mast') {
                        var list = [];
                        var itemName = '';
                        (result.dict_item_list || []).forEach((item) => {
                            if (item.is_default == '1')
                                itemName = item.name
                            list.push({
                                text: item.value ? item.value : item.name,
                                value: item.name,
                            });
                        });
                        //有默认值,显示默认值
                        if (itemName) {
                            $this.head_styledef.form.items[index].value = itemName;
                            var attr = $this.head_styledef.form.items[index].fieldId;
                            $this.head_styledef.form.model[attr] = itemName;
                        }
                        $this.head_styledef.form.items[index].dict = list;
                        var head_styledef = JSON.parse(JSON.stringify($this.head_styledef));
                        $this.head_styledef = [];
                        $this.head_styledef = head_styledef;
                    }
                } catch (ex) {
                    // console.log(ex);
                    uni.showModal({
                        title: this.translateSys("error") + "3",
                        content: ex.errMsg,
                        showCancel: false,
                        confirmText: this.translateSys('close')
                    });
                }
            },
            //查询数据类数据信息
            async loadDataGetList() {
                try {
                    uni.showLoading({
                        title: this.translateSys("loading"),
                        mask: true
                    });
                    //条件查询
                    var condition = this.wheres;
                    if (this.where) {
                        if (condition) condition += ' and ';
                        condition += this.where;
                    }
                    // console.log(condition);
                    // console.log(this.orderby);
                    var $this = this;
                    var dataInfo = {
                        class_id: this.param.ClsID,
                        attrs: [],
                        condition: this.toWhereBase64String("" + condition + ""),
                        prj_rel_type: "",
                        order_by: this.orderby,
                        page_size: this.page_size,
                        page: this.pageindex,
                        query_id: this.query_id,
                    };
                    dataObjQuery(dataInfo).then(result => {
                        console.log(result);
                        uni.hideLoading();
                        // var list=[];
                        $this.query_id = '';
                        if (result) {
                            $this.page_count = result.page_count;
                            if (result.page_count > 1) $this.query_id = result.query_id;
                            // $this.detail1StyleDefList=[];
                            const detail1StyleDefList = []
                            result.obj_list.forEach((obj) => {
                                var styleStr = JSON.stringify($this.detail1_styledef);
                                var detailStyle = JSON.parse(styleStr);
                                // var info ={
                                //     S_ID:obj.id,
                                // };
                                obj.attr_list.forEach((attr) => {
                                    // info[attr.name]=attr.value;
                                    detailStyle.form.items.forEach(ele => {
                                        if (ele.name != 'Layout') {
                                            if (ele.fieldId == attr
                                                .name) ele
                                                .value = attr.value;
                                        } else if (ele.name ==
                                            'Layout') {
                                            ele.setting.colList
                                                .forEach(
                                                    col => {
                                                        if (col) {
                                                            if (col
                                                                .fieldId ==
                                                                attr
                                                                .name)
                                                                col
                                                                .value =
                                                                attr
                                                                .value;
                                                        }
                                                    });
                                        }
                                    });
                                });
                                detailStyle.form.htmlobjId = obj.id ? obj.id.replace(/-/g, '')
                                    .replace('{', '').replace('}', '') : 'null';
                                detailStyle.form.objId = obj.id;
                                detailStyle.form.attrs = obj.attr_list;
                                detail1StyleDefList.push(detailStyle);
                            });
                            console.log(detail1StyleDefList)
                            $this.setData({
                                detail1StyleDefList: detail1StyleDefList
                            })
                            // 解决view层不同步的问题
                            // $this.scrollTop = $this.old.scrollTop;
                            $this.isScroll = false;
                            setTimeout(function() {
                                $this.isScroll = true;
                            }, 1000);
                            // console.log($this.detail1StyleDefList);
                        }
                    }).catch(ex => {
                        // console.log(ex);
                        uni.showModal({
                            title: this.translateSys("error") + "5.1",
                            content: ex.errMsg,
                            showCancel: false,
                            confirmText: this.translateSys('close')
                        });
                    });
                } catch (ex) {
                    var tip = typeof ex == "string" ? ex : ex.message;
                    uni.showModal({
                        title: this.translateSys("error") + "5.2",
                        content: tip,
                        showCancel: false,
                        confirmText: this.translateSys('close')
                    });
                }
            },
            //刷新
            Refresh(value) {
                this.initial()
            },
            //点击显示浏览对象显示页面
            async onViewPageClick(style) {
                if (!this.clickItemEvent.id) {
                    return;
                }
                const $this = this
                var obj_attr = this.head_styledef.form.model;
                // console.log(obj_attr);
                var input_param = Base64.encode(
                    JSON.stringify(
                        Object.keys(obj_attr).map((a) => ({
                            attr: a,
                            value: obj_attr[a] || "",
                        }))
                    )
                );
                let detail_attr = {};
                style.form.items.forEach((item) => {
                    if (item.name == "Layout") {
                        item.setting.colList.forEach((cols) => {
                            if (cols != null) detail_attr[cols.fieldId] = cols.value;
                        });
                    } else detail_attr[item.fieldId] = item.value;
                });
                detail_attr["id"] = style.form.objId;
                const attrs = Object.keys(detail_attr)
                    .map((a) => ({
                        attr: a,
                        value: detail_attr[a] || "",
                    }))
                    .filter((a) => {
                        return a.attr != "id";
                    });
                let data_json = Base64.encode(JSON.stringify(attrs));
                runCustomEvent({
                    ed_type: 0,
                    start_transaction: true,
                    class_id: this.param.ClsID,
                    event_id: this.clickItemEvent.id,
                    input_param,
                    data_json,
                }).then(result => {
                    // console.log(result);
                    if (result.ret != 0) {
                        var tip = result.err_info ? typeof result
                            .err_info ==
                            'string' ?
                            result
                            .err_info : result.err_info.join(
                                '<br/>') : '';
                        if (result.ret == 801) {
                            if (this.param.Only_Script_Error) {
                                let pos = tip.indexOf(":");
                                if (pos > -1) tip = tip.substring(
                                    pos + 1);
                            }
                            uni.showModal({
                                title: this.translateSys(
                                    "tip"),
                                content: tip,
                                showCancel: false,
                                confirmText: this
                                    .translateSys('close')
                            });
                        } else uni.showModal({
                            title: this.translateSys(
                                "tip"),
                            content: tip + ',' + this
                                .translateSys('tip') +
                                ':' +
                                result
                                .ret,
                            showCancel: false,
                            confirmText: this.translateSys(
                                'close')
                        });
                        return false;
                    } else {
                        var tip = result.info ? typeof result
                            .info == 'string' ? result
                            .info :
                            result.info.join('<br/>') : '';
                        if (tip) uni.showModal({
                            title: this.translateSys(
                                "tip"),
                            content: tip,
                            showCancel: false,
                            confirmText: this.translateSys(
                                'close')
                        });
                        if (result.result_type == 0 && result.action) {
                            result.action.forEach(item => {
                                if (item.action_type == "jump_pda_page") {
                                    // value = {"attr":"xxx", "value":"xxx"}
                                    var data = item.value;
                                    uni.navigateTo({
                                        url: `../modal/3202_view?param=${JSON.stringify($this.param)}&titlename=${data.page?.page_name || ""}&dataObj=${JSON.stringify(data)}`,
                                        events: {
                                            // 为指定事件添加一个监听器,获取被打开页面传送到当前页面的数据
                                            ExitViewEvent: function(data) {
                                                console.log(data);
                                                this.runCustomEvent(data);
                                            }
                                        }
                                    });
                                }
                            })
                        } else {
                            if (result.info) {
                                uni.showModal({
                                    title: this
                                        .translateSys(
                                            "tip"),
                                    content: result.info,
                                    showCancel: false,
                                    confirmText: this
                                        .translateSys(
                                            'close')
                                });
                            }
                        }
                    }
                }).catch(ex => {
                    // console.log(ex);
                    uni.showModal({
                        title: this.translateSys("error") +
                            "8.1",
                        content: ex.errMsg,
                        showCancel: false,
                        confirmText: this.translateSys(
                            'close')
                    });
                });
            },
            ontap(item) { //扫码功能
                // var $ele = e;
                //console.log(e.target)
                getApp().onScan((result) => {
                    console.log(result.decodedata);
                    item.value = result.decodedata;
                    uni.hideKeyboard();
                    var $this = this;
                    console.log(item);
                    let newVal = item.value.trim()
                    if (newVal) {
                        item.oldvalue = newVal;
                        var attr = item.fieldId;
                        this.head_styledef.form.model[attr] = newVal;
                        var onChangeEvent = item.bind.onChangeEvent; //内容变化后事件
                        var onSuffixClickCallbackEvent = item.bind
                            .onSuffixClickCallbackEvent; //后图标点击事件
                        var onSuffixClickEvent = item.bind
                            .onSuffixClickEvent; //后图标点击回调
                        var isflag = false;
                        if (onChangeEvent.id) { //内容变化后事件
                            $this.onChange(onChangeEvent);
                        } else {
                            $this.where = item.fieldId + " like '%" + newVal + "%'";
                            $this.query_id = '';
                            $this.pageindex = 1;
                            $this.detail1StyleDefList = [];
                            $this.loadDataGetList();
                        }
                        $this.focusMateria = true; //初始化,第二个输入框focus属性
                        setTimeout(function() {
                            uni.hideKeyboard();
                        }, 1000);
                    }
                })
            },
            onEnterChange(item) { //回车,点击按钮,取消节点事件
                // console.log(item);
                let newVal = item.value
                if (typeof item.value == "string") {
                    newVal = item.value.trim()
                    if (!newVal)
                        return
                }
                if (item.oldvalue != newVal) {
                    item.oldvalue = newVal;
                    var attr = item.fieldId;
                    this.head_styledef.form.model[attr] = newVal;
                    var onChangeEvent = item.bind.onChangeEvent; //内容变化后事件
                    var onSuffixClickCallbackEvent = item.bind
                        .onSuffixClickCallbackEvent; //后图标点击事件
                    var onSuffixClickEvent = item.bind.onSuffixClickEvent; //后图标点击回调
                    var isflag = false;
                    if (onChangeEvent.id) { //内容变化后事件
                        this.onChange(onChangeEvent);
                    } else {
                        this.where = item.fieldId + " like '%" + item.value + "%'";
                        this.query_id = '';
                        this.pageindex = 1;
                        this.detail1StyleDefList = [];
                        this.loadDataGetList();
                    }
                }
            },
            // 内容变化后事件
            async onChange(event) {
                try {
                    if (event.id) {
                        var obj_attr = this.head_styledef.form.model;
                        // console.log(obj_attr);
                        var input_param = Base64.encode(
                            JSON.stringify(
                                Object.keys(obj_attr).map((a) => ({
                                    attr: a,
                                    value: obj_attr[a] || "",
                                }))
                            )
                        );
                        var $this = this;
                        var dataInfo = {
                            ed_type: 0,
                            start_transaction: true,
                            class_id: this.head_styledef.form.clsId,
                            class_name: '',
                            event_id: event.id,
                            event_name: '',
                            data_obj_id: '',
                            obj_attr: obj_attr,
                            prj_id: '',
                            ref_cls_id: '',
                            rel_obj_id: '',
                            user_login: '',
                            data_json: '',
                            compose_info: '',
                            ext_info: '',
                            global_attr: '',
                            input_param: input_param,
                        };
                        runCustomEvent(dataInfo).then(result => {
                            // console.log(result);
                            if (result.ret != 0) {
                                var tip = result.err_info ? typeof result
                                    .err_info ==
                                    'string' ?
                                    result
                                    .err_info : result.err_info.join(
                                        '<br/>') : '';
                                if (result.ret == 801) {
                                    if (this.param.Only_Script_Error) {
                                        let pos = tip.indexOf(":");
                                        if (pos > -1) tip = tip.substring(
                                            pos + 1);
                                    }
                                    uni.showModal({
                                        title: this.translateSys(
                                            "tip"),
                                        content: tip,
                                        showCancel: false,
                                        confirmText: this
                                            .translateSys('close')
                                    });
                                } else uni.showModal({
                                    title: this.translateSys(
                                        "tip"),
                                    content: tip + ',' + this
                                        .translateSys('tip') +
                                        ':' +
                                        result
                                        .ret,
                                    showCancel: false,
                                    confirmText: this.translateSys(
                                        'close')
                                });
                                return false;
                            } else {
                                var tip = result.info ? typeof result
                                    .info == 'string' ? result
                                    .info :
                                    result.info.join('<br/>') : '';
                                if (tip) uni.showModal({
                                    title: this.translateSys(
                                        "tip"),
                                    content: tip,
                                    showCancel: false,
                                    confirmText: this.translateSys(
                                        'close')
                                });
                                if (result.result_type == 0 && result.action) {
                                    result.action.forEach(item => {
                                        if (item.action_type ==
                                            "set_query_condition") {
                                            var value = item.value;
                                            $this.wheres = value.condition;
                                            $this.orderby = value.order ? value.order :
                                                ""
                                            $this.pageindex = 1;
                                            $this.query_id = "";
                                            $this.detail1StyleDefList = [];
                                            $this.loadDataGetList();
                                        }
                                    })
                                } else {
                                    if (result.info) {
                                        uni.showModal({
                                            title: this
                                                .translateSys(
                                                    "tip"),
                                            content: result.info,
                                            showCancel: false,
                                            confirmText: this
                                                .translateSys(
                                                    'close')
                                        });
                                    }
                                }
                            }
                        }).catch(ex => {
                            // console.log(ex);
                            uni.showModal({
                                title: this.translateSys("error") +
                                    "8.1",
                                content: ex.errMsg,
                                showCancel: false,
                                confirmText: this.translateSys(
                                    'close')
                            });
                        });
                    }
                } catch (ex) {
                    var tip = typeof ex == "string" ? ex : ex.message;
                    uni.showModal({
                        title: this.translateSys("error") + "8.2",
                        content: this.translate(
                                'execute_after_change_event_failed') + this
                            .translateSys(
                                "comma") +
                            this.translate('reason') + this.translateSys(
                                "colon") + tip,
                        showCancel: false,
                        confirmText: this.translateSys('close')
                    });
                }
            },
            setFormValues(attrs) {
                const head_styledef = this.head_styledef
                if (JSON.stringify(attrs) == '{}') {
                    return;
                }
                console.log(attrs)
                attrs.forEach(async (attr, key) => {
                    if (attr.choice_list) {
                        var dictItemList = [];
                        attr.choice_list.forEach(async (val, index) => {
                            dictItemList.push({
                                text: val,
                                value: val
                            });
                        });
                        head_styledef.form.items.forEach(async (attr_item, index) => {
                            if (attr_item.name != "Layout") {
                                if (attr_item.fieldId == attr.attr) {
                                    if (attr_item.useDict) {
                                        attr_item.dict = dictItemList;
                                    } else {
                                        attr_item.selections = dictItemList;
                                    }
                                }
                            } else if (attr_item.name == "Layout") {
                                attr_item.setting.colList.forEach((col) => {
                                    if (col) {
                                        if (col.fieldId == attr.attr) {
                                            if (col.useDict) {
                                                col.dict =
                                                    dictItemList;
                                            } else {
                                                col.selections =
                                                    dictItemList;
                                            }
                                        }
                                    }
                                });
                            }
                        });
                    }
                    if (!head_styledef.form.model[attr.attr]) {
                        head_styledef.form.model[attr.attr] = attr.value;
                    }
                    head_styledef.form.items.forEach(async (ele) => {
                        if (ele.name != "Layout") {
                            if (ele.fieldId == attr.attr) {
                                ele.value = attr.value;
                                ele.oldvalue = attr.value;
                                if (ele.name == "Input") {
                                    if (attr.prompt) ele.placeholder = attr
                                        .prompt;
                                }
                                if (attr.enable !== undefined) {
                                    if (attr.enable) ele.disabled = false;
                                    else ele.disabled = true;
                                }
                            }
                        } else if (ele.name == "Layout") {
                            ele.setting.colList.forEach((col) => {
                                if (col) {
                                    if (col.fieldId == attr.attr) {
                                        col.value = attr.value;
                                        col.oldvalue = attr.value;
                                        if (col.name == "Input") {
                                            if (attr.prompt) col
                                                .placeholder =
                                                attr.prompt;
                                        }
                                        if (attr.enable !==
                                            undefined) {
                                            if (attr.enable) col
                                                .disabled =
                                                false;
                                            else col.disabled = true;
                                        }
                                    }
                                }
                            });
                        }
                    })
                    //判断表单里是否有返回字段,没有就装载到model里,点击确定提交的时候带上这些数据
                })
                console.log(head_styledef)
                this.setData({
                    head_styledef: head_styledef
                })
            },
            //点中表单
            onPanelClick(value) { //点击面板高亮显示
                // console.log(value);
                this.setData({
                    activeItem: this.detail1StyleDefList[value]
                })
            },
            //事件处理
            async runCustomEvent(dataInfo) {
                try {
                    var $this = this;
                    runCustomEvent(dataInfo).then(result => {
                        console.log(result);
                        if (result.ret != 0) {
                            var tip = result.err_info ? typeof result
                                .err_info ==
                                'string' ?
                                result
                                .err_info : result.err_info.join(
                                    '<br/>') : '';
                            if (result.ret == 801) {
                                if (this.param.Only_Script_Error) {
                                    let pos = tip.indexOf(":");
                                    if (pos > -1) tip = tip.substring(
                                        pos + 1);
                                }
                                uni.showModal({
                                    title: this.translateSys(
                                        "tip"),
                                    content: tip,
                                    showCancel: false,
                                    confirmText: this
                                        .translateSys('close')
                                });
                            } else uni.showModal({
                                title: this.translateSys(
                                    "tip"),
                                content: tip + ',' + this
                                    .translateSys('tip') +
                                    ':' +
                                    result.ret,
                                showCancel: false,
                                confirmText: this.translateSys(
                                    'close')
                            });
                            return false;
                        } else {
                            var tip = result.info ? typeof result
                                .info == 'string' ? result
                                .info : result
                                .info.join('<br/>') : '';
                            if (tip) uni.showModal({
                                title: this.translateSys(
                                    "tip"),
                                content: tip,
                                showCancel: false,
                                confirmText: this.translateSys(
                                    'close')
                            });
                            if (result.result_type == 0 && result.action) {
                                result.action.forEach(item => {
                                    if (item.action_type ==
                                        "goback_to_pre_page") { //返回上一页
                                        var value = item.value;
                                        uni.navigateBack({
                                            delta: 1, //返回层数,2则上上页
                                        });
                                    } else {
                                        uni.showModal({
                                            title: this
                                                .translateSys(
                                                    "tip"
                                                ),
                                            content: this
                                                .translateSys(
                                                    "quotation_mark_left"
                                                ) +
                                                item
                                                .action_type +
                                                this
                                                .translateSys(
                                                    "quotation_mark_right"
                                                ) +
                                                this
                                                .translate(
                                                    "tip_action_unprocessed"
                                                ),
                                            showCancel: false,
                                            confirmText: this
                                                .translateSys(
                                                    'close'
                                                )
                                        });
                                    }
                                });
                            } else {
                                if (result.info) {
                                    uni.showModal({
                                        title: this
                                            .translateSys(
                                                "tip"),
                                        content: result.info,
                                        showCancel: false,
                                        confirmText: this
                                            .translateSys(
                                                'close')
                                    });
                                }
                            }
                        }
                    }).catch(ex => {
                        // console.log(ex);
                        uni.showModal({
                            title: this.translateSys("error") +
                                "9.1",
                            content: ex.errMsg,
                            showCancel: false,
                            confirmText: this.translateSys(
                                'close')
                        });
                    });
                } catch (ex) {
                    var tip = typeof ex == "string" ? ex : ex.message;
                    uni.showModal({
                        title: this.translateSys("error") + "9.2",
                        content: this.translate('execute_event_failed') +
                            this.translateSys(
                                "comma") +
                            this.translate('reason') + this.translateSys(
                                "colon") + tip,
                        showCancel: false,
                        confirmText: this.translateSys('close')
                    });
                }
            },
            cancel(e) { //取消
                uni.navigateBack({
                    delta: 1, //返回层数,2则上上页
                });
            },
            /**
             * 只支持["column1='A' or column2='B'", "column3='C' and column4='D'", "column5='E'"]这种格式
             * {
             *     "model": 0 / 1,
             *     "condition":
             *     [
             *         [
             *             { },
             *             { },
             *             { }
             *         ],
             *         [
             *             { }
             *         ],
             *         [
             *             { }
             *         ]
             *     ]
             * }
             */
            toWhereBase64String(list) {
                if (typeof list == 'string') list = [list]
                var sql = []
                var seps = [' not in', ' in', '<>', '!=', '<=', '>=', '<', '=',
                    '>', ' like'
                ]
                list.forEach(ls => {
                    var where = ls.trim()
                    if (where.startsWith('(') && where.endsWith(')'))
                        where = where.replace(
                            /^\(/,
                            '').replace(
                            /\)$/, '')
                    if (where.toLowerCase().includes(' and ')) {
                        // 二级and放在第一级数组中
                        where.split(/ and /i).forEach(li => {
                            var l = li.trim()
                            if (l.startsWith('(') && l.endsWith(
                                    ')')) l = l.replace(
                                /^\(/,
                                '').replace(
                                /\)$/, '')
                            var sep = ''
                            for (var i = 0; i < seps.length; i++) {
                                if (l.toLowerCase().includes(seps[
                                        i])) {
                                    sep = seps[i]
                                    break
                                }
                            }
                            if (sep) {
                                var values = l.split(new RegExp(
                                    sep, 'i'))
                                var field = values[0]?.trim()
                                    .replace(/^\[/, '')
                                    .replace(
                                        /\]$/, '')
                                var value = ''
                                var op = sep.trim()
                                if ([' in', ' not in'].includes(
                                        sep) && values[1]
                                    ?.toLowerCase().includes(
                                        'select ') && values[1]
                                    ?.toLowerCase()
                                    .includes(
                                        ' from ')) {
                                    value = l.replace(field, '')
                                        .replace(
                                            /^\s*(in|not in)\s*/i,
                                            '').trim()
                                    if (value.startsWith('(') &&
                                        value.endsWith(')'))
                                        value = value
                                        .replace(/^\(/, '')
                                        .replace(/\)$/, '').trim()
                                } else {
                                    value = values[1]?.trim()
                                        .replace(/^\'/, '')
                                        .replace(
                                            /\'$/, '')
                                    if (['in', 'not in'].includes(
                                            op)) {
                                        value = value.replace(
                                            /^\(/, '').replace(
                                            /\)$/,
                                            '')
                                        value = value.split(',')
                                            .map(v => v.trim()
                                                .replace(
                                                    /^\'/, '')
                                                .replace(/\'$/, '')
                                            )
                                    }
                                }
                                sql.push([{
                                    field,
                                    value,
                                    op
                                }])
                            }
                        })
                    } else if (where.toLowerCase().includes(' or ')) {
                        // 二级or放在第二级同一组数组中
                        var s = []
                        where.split(/ or /i).forEach(li => {
                            var l = li.trim()
                            if (l.startsWith('(') && l.endsWith(
                                    ')')) l = l.replace(
                                /^\(/,
                                '').replace(
                                /\)$/, '')
                            var sep = ''
                            for (var i = 0; i < seps.length; i++) {
                                if (l.toLowerCase().includes(seps[
                                        i])) {
                                    sep = seps[i]
                                    break
                                }
                            }
                            if (sep) {
                                var values = l.split(new RegExp(
                                    sep, 'i'))
                                var field = values[0]?.trim()
                                    .replace(/^\[/, '')
                                    .replace(
                                        /\]$/, '')
                                var value = ''
                                var op = sep.trim()
                                if ([' in', ' not in'].includes(
                                        sep) && values[1]
                                    ?.toLowerCase().includes(
                                        'select ') && values[1]
                                    ?.toLowerCase()
                                    .includes(
                                        ' from ')) {
                                    value = l.replace(field, '')
                                        .replace(
                                            /^\s*(in|not in)\s*/i,
                                            '').trim()
                                    if (value.startsWith('(') &&
                                        value.endsWith(')'))
                                        value = value
                                        .replace(/^\(/, '')
                                        .replace(/\)$/, '').trim()
                                } else {
                                    value = values[1]?.trim()
                                        .replace(/^\'/, '')
                                        .replace(
                                            /\'$/, '')
                                    if (['in', 'not in'].includes(
                                            op)) {
                                        value = value.replace(
                                            /^\(/, '').replace(
                                            /\)$/,
                                            '')
                                        value = value.split(',')
                                            .map(v => v.trim()
                                                .replace(
                                                    /^\'/, '')
                                                .replace(/\'$/, '')
                                            )
                                    }
                                }
                                sql.push([{
                                    field,
                                    value,
                                    op
                                }])
                            }
                        })
                        sql.push(s)
                    } else {
                        var li = where
                        // 单一查询条件直接放在第一级数组中
                        var l = li.trim()
                        if (l.startsWith('(') && l.endsWith(')')) l = l
                            .replace(/^\(/, '')
                            .replace(
                                /\)$/, '')
                        var sep = ''
                        for (var i = 0; i < seps.length; i++) {
                            if (l.toLowerCase().includes(seps[i])) {
                                sep = seps[i]
                                break
                            }
                        }
                        if (sep) {
                            var values = l.split(new RegExp(sep, 'i'))
                            var field = values[0]?.trim().replace(/^\[/,
                                '').replace(/\]$/, '')
                            var value = ''
                            var op = sep.trim()
                            if ([' in', ' not in'].includes(sep) && values[
                                    1]?.toLowerCase()
                                .includes('select ') &&
                                values[1]?.toLowerCase().includes(' from ')
                            ) {
                                value = l.replace(field, '').replace(
                                        /^\s*(in|not in)\s*/i, '')
                                    .trim()
                                if (value.startsWith('(') && value
                                    .endsWith(')')) value = value
                                    .replace(/^\(/, '')
                                    .replace(/\)$/, '').trim()
                            } else {
                                value = values[1]?.trim().replace(/^\'/,
                                    '').replace(/\'$/, '')
                                if (['in', 'not in'].includes(op)) {
                                    value = value.replace(/^\(/, '')
                                        .replace(/\)$/, '')
                                    value = value.split(',').map(v => v
                                        .trim().replace(/^\'/,
                                            '')
                                        .replace(/\'$/,
                                            ''))
                                }
                            }
                            sql.push([{
                                field,
                                value,
                                op
                            }])
                        }
                    }
                })
                if (sql.length > 0)
                    return Base64.encode(JSON.stringify({
                        model: 1,
                        condition: sql
                    }))
                else
                    return ''
            },
            translate(t) {
                if (typeof this.$t == "function") return this.$t(`page.${t}`)
                else return t;
            },
            translateSys(t) {
                if (typeof this.$t == "function") return this.$t(`sys.${t}`)
                else return t;
            },
        },
    };
</script>
<style lang="scss">
    .uni-page-modal-3202 {
        display: flex;
        flex-direction: column;
        height: calc(100vh - 30rpx);
        padding: 15rpx 0;
        .v-headStyle {
            width: 95%;
        }
        .v-content {
            flex: 1;
            display: flex;
            width: 100%;
            flex-direction: column;
            min-height: 100px;
            overflow: hidden;
            /* border:0.1px solid red; */
        }
        .view-content {
            width: calc(100% - 30rpx);
            padding: 10rpx 10rpx 10rpx 20rpx;
            display: flex;
            margin-top: 10rpx;
            flex-direction: column;
        }
        .dv-panel-bkcolor {
            border: 1px solid #ccc;
            border-radius: 5px;
            background-color: #F5F5F5;
        }
        .dv-panel {
            padding: 10rpx 10rpx 0rpx 0px;
            border-radius: 12rpx;
            margin-bottom: 10rpx;
        }
        .dv-panel-input {
            vertical-align: middle;
            width: 92%;
            display: inline-block;
            text-align: left;
            .uni-forms-item {
                padding-bottom: 5rpx;
                margin-bottom: 0;
                .uni-forms-item__label {
                    height: 20px !important;
                    padding: 0 10rpx 0 0 !important;
                }
            }
        }
        .dv-panel-button {
            display: inline-block;
        }
        .dv-panel-button a i {
            font-size: 36rpx;
        }
        .dv-panel-button button {
            height: 50rpx;
            font-size: 26rpx;
            padding: 0 24rpx;
        }
        .bk-active {
            background-color: #D6FCB2;
        }
        .uni-padding-wrap {
            margin-top: 20rpx;
            background-color: #98DAEA;
            width: 104rpx;
            height: 80rpx;
            text-align: center;
            border-radius: 54rpx;
            padding: 24rpx 0 0 0;
            float: right;
            display: inline-block;
        }
        .uni-padding-wrap a {
            font-size: 40rpx;
        }
        .input-disabled {
            background-color: #f3f3f3 !important;
        }
        .dv_panel_condent {
            background-color: #D6FCB2;
            padding: 20rpx;
            border-radius: 12rpx;
        }
        .dv_panel_attr {
            margin-bottom: 10rpx;
        }
        .dv_panel_attr .dv_inline {
            display: inline-block;
            text-align: center;
        }
        .dv_panel_attr i {
            vertical-align: 25px;
            margin: 0 10px;
        }
        .dv_panel_attr .dv_inline p {
            background: #4D6AF4;
            color: #fff;
            padding: 10rpx 15rpx;
            line-height: 1.5;
            border-radius: 10rpx;
        }
        .v-scroll-view {
            flex: 1;
            overflow: hidden;
            width: 98%;
        }
        .scroll-y {
            width: 100%;
            height: 100%;
        }
        .scroll-view_H {
            white-space: nowrap;
            width: 100%;
        }
        .dv_panel_content {
            margin: 0 10px;
        }
        .dv_panel_content .dv_panel_attr {
            margin-bottom: 5px;
        }
        .dv_panel_content .dv_panel_attr i {
            vertical-align: super;
            margin: 0 10px;
        }
        .dv_panel_content .dv_panel_attr .circel_node {}
        /* 是菱形的 */
        .dv_panel_content .dv_panel_attr .dv_diamond_node p {
            width: 50px;
            height: 50px;
            background-color: #4D6AF4;
            transform: rotate(45deg);
            -ms-transform: rotate(45deg);
            -moz-transform: rotate(45deg);
            -webkit-transform: rotate(45deg);
            -o-transform: rotate(45deg);
            margin: 15px auto;
            padding: 9px;
            // line-height: 28px;
            text-align: center;
        }
        .dv_panel_content .dv_panel_attr .dv_diamond_node p span {
            color: #fff;
            transform: rotate(-45deg);
            display: inline-block;
            text-align: center;
            overflow: hidden;
            text-overflow: ellipsis;
            // white-space: nowrap;
        }
        /* 默认形 */
        .dv_panel_content .dv_panel_attr .dv_box_node,
        .dv_panel_content .dv_panel_attr .dv_diamond_node {
            vertical-align: middle;
            display: inline-block;
            text-align: center;
            width: 100px;
        }
        .dv_panel_content .dv_panel_attr .dv_box_node p {
            background: #4D6AF4;
            color: #fff;
            padding: 3px 7px;
            line-height: 1.5;
            border-radius: 5px;
        }
        .demo-uni-row {
            margin-bottom: 0px;
            display: block;
        }
        ::v-deep .uni-row {
            margin-bottom: 0px;
        }
        .view-tabpage ::v-deep .uni-row {
            margin-bottom: 5px;
        }
        .demo-uni-col {
            height: 36px;
            border-radius: 5px;
        }
        .demo-uni-row .uni-input {
            width: calc(100% - 120px);
        }
    }
</style>
pages/modal/3202_view.vue
New file
@@ -0,0 +1,1052 @@
<template>
    <view class="uni-page-modal-3202-view">
        <view class="v-content">
            <!-- 表头样式 -->
            <OIForm ref="refBaseForm" class="v-headStyle" :form="head_styledef.form" viewMode></OIForm>
            <view class="v-scroll-view">
                <view class="view-content" id="tabpanel">
                    <view class="dv-panel dv-panel-bkcolor" v-for="(style,ii) in detail1StyleDefList" :key="ii"
                        @click="onPanelClick(ii)" :id="'panel'+style.form.htmlobjId">
                        <div class="dv-panel-input">
                            <OIForm class="v-area dv-panel" :form="style.form" viewMode></OIForm>
                        </div>
                    </view>
                </view>
            </view>
            <view class="view-bottom">
                <view class="uni-padding-wrap" v-if="dropdownBtns.length>0">
                    <view class="uni-btn-v">
                        <a @tap="clickDropdownBtns">
                            <text class="mobox-normal-more" />
                        </a>
                    </view>
                </view>
                <button type="default" @click="onButtonClicked(btn)" class="btn_add"
                    :style="{width:90/buttons.length + '%'}" v-for="(btn,key) in buttons">{{btn.ShowName}}</button>
            </view>
        </view>
    </view>
</template>
<script>
    import {
        Base64
    } from '@/js/Base64.js';
    import classUtils from "@/js/utils.js"
    import {
        appGetInfo,
        dictGetInfo
    } from "@/api/mobox.js"
    import {
        getUIStyleInfo,
        runCustomEvent,
        dataObjQuery,
        dataObjDel
    } from "@/api/data.js"
    import dayjs from "dayjs";
    import OIForm from '@/components/oi-form/index.vue'
    import buttonClickMixin from '@/mixins/button-click.js';
    export default {
        mixins: [buttonClickMixin],
        components: {
            OIForm
        },
        data() {
            return {
                title: this.translateSys('add2'),
                param: {},
                styledef: {},
                head_styledef: {
                    form: {
                        items: []
                    }
                },
                detail1_styledef: {},
                detail1StyleDefList: [],
                active_id: '',
                activeItem: {},
            };
        },
        computed: {
            enter_view_event() {
                return {
                    id: this.param.Enter_View_Event?.id || "",
                    name: this.param.Enter_View_Event?.name || "",
                };
            },
            exit_view_event() {
                return {
                    id: this.param.Exit_View_Event?.id || "",
                    name: this.param.Exit_View_Event?.name || "",
                };
            },
            buttons() {
                const btns = this.param.ViewPage_Button || [];
                const list = [];
                if (btns.length > 3) {
                    for (let i = 2; i > -1; i--) {
                        list.push(btns[i]);
                    }
                    return list;
                } else {
                    return btns;
                }
            },
            dropdownBtns() {
                const btns = this.param.ViewPage_Button || [];
                const list = [];
                if (btns.length > 3) {
                    for (let i = 3; i < btns.length; i++) {
                        list.push(btns[i]);
                    }
                    return list;
                } else {
                    return [];
                }
            },
        },
        onBackPress(e) {
            this.navigateBackEvent()
        },
        async onLoad(options) {
            console.log(options);
            uni.setNavigationBarTitle({
                title: options.titlename
            }); //设置顶部标题
            this.title = options.titlename;
            this.param = JSON.parse(options.param);
            this.head_styledef = {
                form: {
                    items: []
                }
            };
            this.detail1_styledef = {};
            this.detail1StyleDefList = [];
            this.active_id = '';
            this.activeItem = {};
            await this.Head_UIStyleGetInfo(this.param.ClsID, this.param.MasterView_Panel.id);
            await this.Detail1_UIstyleGetInfo(this.param.ClsID, this.param.ViewItem_Panel.id);
            const dataObj = options.dataObj ? JSON.parse(options.dataObj) : {};
            if (dataObj) {
                let attrs = [];
                let master_view = dataObj?.master_view;
                Object.keys(master_view).forEach((a) => {
                    attrs.push({
                        attr: a,
                        value: master_view[a]
                    });
                });
                attrs.forEach((attr) => {
                    this.head_styledef.form.items.forEach((ele2) => {
                        if (ele2.name != "Layout") {
                            if (ele2.fieldId == attr.attr) {
                                ele2.value = attr.value;
                            }
                        } else if (ele2.name == "Layout") {
                            ele2.setting.colList.forEach((col) => {
                                if (col) {
                                    if (col.fieldId == attr.attr) {
                                        col.value = attr.value;
                                    }
                                }
                            });
                        }
                    });
                });
                this.viewAceionContent(dataObj.page.list);
            }
            if (this.enter_view_event.id)
                this.enterAfterEvent(this.enter_view_event);
        },
        methods: {
            //
            setData: function(obj) {
                let that = this;
                let keys = [];
                let val, data;
                Object.keys(obj).forEach(function(key) {
                    keys = key.split(".");
                    val = obj[key];
                    data = that.$data;
                    keys.forEach(function(key2, index) {
                        if (index + 1 == keys.length) {
                            that.$set(data, key2, val);
                        } else {
                            if (!data[key2]) {
                                that.$set(data, key2, {});
                            }
                        }
                        data = data[key2];
                    });
                });
            },
            async Head_UIStyleGetInfo(class_id, style_id) { //获取自定义表单样式
                try {
                    var $this = this;
                    var dataInfo = {
                        class_id: class_id,
                        ui_style_id: style_id,
                    };
                    // console.log(dataInfo);
                    const result = await getUIStyleInfo(dataInfo)
                    var styledef = "";
                    if (result.style_def) {
                        //mobox2的style_def是json字符串
                        styledef = result.style_def.replace(/\\/g, "");
                        //mobox3的style_def是base64字符串
                        if (!result.style_def.includes('"')) styledef = Base64.decode(result
                            .style_def);
                    }
                    $this.head_styledef = result.style_def ? JSON.parse(styledef) : {};
                    // this.form = this.head_styledef.form.model;
                    // console.log($this.head_styledef);
                    if ($this.head_styledef.form?.items) {
                        $this.head_styledef.form.items.forEach(async (ele, index) => {
                            if (ele.useDict == true) { //判断useDict是否使用字典
                                await this.DictGetInfo(ele.bind.dict, index, 'mast');
                            } else {
                                if (ele?.name === "Select") {
                                    const selections = ele?.selections || []
                                    //有默认值,显示默认值
                                    let itemName = ele.value || "";
                                    if (itemName) {
                                        $this.head_styledef.form
                                            .model[ele.fieldId] = itemName;
                                    }
                                    $this.head_styledef.form.items[index].selections = selections.map((
                                        a) => {
                                        return {
                                            value: a.value,
                                            text: a.label
                                        }
                                    })
                                }
                            }
                        });
                    }
                } catch (ex) {
                    // console.log(ex);
                    let tip = typeof ex.errMsg == "string" ? ex.errMsg : ex
                    uni.showModal({
                        title: this.translateSys("error") + "1.1",
                        content: tip,
                        showCancel: false,
                        confirmText: this.translateSys('close')
                    });
                }
            },
            async Detail1_UIstyleGetInfo(class_id, style_id) { //获取自定义表单样式
                try {
                    var $this = this;
                    var dataInfo = {
                        class_id: class_id,
                        ui_style_id: style_id,
                    };
                    // console.log(dataInfo);
                    const result = await getUIStyleInfo(dataInfo)
                    var styledef = "";
                    if (result.style_def) {
                        //mobox2的style_def是json字符串
                        styledef = result.style_def.replace(/\\/g, "");
                        //mobox3的style_def是base64字符串
                        if (!result.style_def.includes('"')) styledef = Base64.decode(result
                            .style_def);
                    }
                    $this.detail1_styledef = result.style_def ? JSON.parse(styledef) : {};
                    $this.detail1_styledef.SelBut_Checked = false;
                } catch (ex) {
                    // console.log(ex);
                    let tip = typeof ex.errMsg == "string" ? ex.errMsg : ex
                    uni.showModal({
                        title: this.translateSys("error") + "1.1",
                        content: tip,
                        showCancel: false,
                        confirmText: this.translateSys('close')
                    });
                }
            },
            async DictGetInfo(dict, index, type) { //Mobox3得到得到字典信息字典项列表
                this.data = [];
                var $this = this;
                var dataInfo = {
                    dict_id: dict.id,
                    dict_name: dict.name
                };
                try {
                    const result = await dictGetInfo(dataInfo)
                    if (type == 'mast') {
                        var list = [];
                        var itemName = '';
                        (result.dict_item_list || []).forEach((item) => {
                            if (item.is_default == '1')
                                itemName = item.name
                            list.push({
                                text: item.value ? item.value : item.name,
                                value: item.name,
                            });
                        });
                        //有默认值,显示默认值
                        if (itemName) {
                            $this.head_styledef.form.items[index].value = itemName;
                            var attr = $this.head_styledef.form.items[index].fieldId;
                            $this.head_styledef.form.model[attr] = itemName;
                        }
                        $this.head_styledef.form.items[index].dict = list;
                        var head_styledef = JSON.parse(JSON.stringify($this.head_styledef));
                        $this.head_styledef = [];
                        $this.head_styledef = head_styledef;
                    }
                } catch (ex) {
                    // console.log(ex);
                    uni.showModal({
                        title: this.translateSys("error") + "3",
                        content: ex.errMsg,
                        showCancel: false,
                        confirmText: this.translateSys('close')
                    });
                }
            },
            viewAceionContent(list) {
                if (!Array.isArray(list)) {
                    return;
                }
                let styleStr = JSON.stringify(this.detail1_styledef); //已码盘
                let detailStyle = JSON.parse(styleStr);
                list.forEach((cont) => {
                    let attrs = [];
                    Object.keys(cont).forEach((a) => {
                        attrs.push({
                            attr: a,
                            value: cont[a]
                        });
                    });
                    attrs.forEach((attr) => {
                        detailStyle.form.items.forEach((ele) => {
                            if (ele.name != "Layout") {
                                if (ele.fieldId == attr.attr) ele.value = attr.value;
                            } else if (ele.name == "Layout") {
                                ele.setting.colList.forEach((col) => {
                                    if (col) {
                                        if (col.fieldId == attr.attr) col.value = attr
                                            .value;
                                    }
                                });
                            }
                        });
                    });
                    this.detail1StyleDefList.push(detailStyle); //码盘中
                });
            },
            //点中表单
            onPanelClick(value) { //点击面板高亮显示
                // console.log(value);
                this.setData({
                    activeItem: this.detail1StyleDefList[value]
                })
            },
            //页面进入后事件
            async enterAfterEvent(event) {
                try {
                    let data_json = [];
                    let jsonlist = [];
                    let detailStyleList = this.detail1StyleDefList;
                    detailStyleList.forEach((style) => {
                        let detail_attr = {};
                        style.form.items.forEach((item) => {
                            if (item.name == "Layout") {
                                item.setting.colList.forEach((cols) => {
                                    if (cols != null) detail_attr[cols.fieldId] = cols.value;
                                });
                            } else detail_attr[item.fieldId] = item.value;
                        });
                        jsonlist.push(detail_attr);
                    });
                    data_json = Base64.encode(JSON.stringify(jsonlist));
                    let input_param = {};
                    this.head_styledef.form.items.forEach((item) => {
                        if (item.name == "Layout") {
                            item.setting.colList.forEach((cols) => {
                                if (cols != null) input_param[cols.fieldId] = cols.value;
                            });
                        } else input_param[item.fieldId] = item.value;
                    });
                    input_param = Base64.encode(JSON.stringify(input_param));
                    this.runCustomEvent({
                        ed_type: 0,
                        start_transaction: true,
                        class_id: this.param.ClsID,
                        event_id: event.id,
                        input_param,
                        data_json,
                    })
                } catch (ex) {
                    this.showError(ex);
                }
            },
            //事件处理
            async runCustomEvent(dataInfo) {
                try {
                    var $this = this;
                    runCustomEvent(dataInfo).then(result => {
                        console.log(result);
                        if (result.ret != 0) {
                            var tip = result.err_info ? typeof result
                                .err_info ==
                                'string' ?
                                result
                                .err_info : result.err_info.join(
                                    '<br/>') : '';
                            if (result.ret == 801) {
                                if (this.param.Only_Script_Error) {
                                    let pos = tip.indexOf(":");
                                    if (pos > -1) tip = tip.substring(
                                        pos + 1);
                                }
                                uni.showModal({
                                    title: this.translateSys(
                                        "tip"),
                                    content: tip,
                                    showCancel: false,
                                    confirmText: this
                                        .translateSys('close')
                                });
                            } else uni.showModal({
                                title: this.translateSys(
                                    "tip"),
                                content: tip + ',' + this
                                    .translateSys('tip') +
                                    ':' +
                                    result.ret,
                                showCancel: false,
                                confirmText: this.translateSys(
                                    'close')
                            });
                            return false;
                        } else {
                            var tip = result.info ? typeof result
                                .info == 'string' ? result
                                .info : result
                                .info.join('<br/>') : '';
                            if (tip) uni.showModal({
                                title: this.translateSys(
                                    "tip"),
                                content: tip,
                                showCancel: false,
                                confirmText: this.translateSys(
                                    'close')
                            });
                            if (result.result_type == 0 && result.action) {
                                result.action.forEach(item => {
                                    if (item.action_type == "goback_to_pre_page") { //返回上一页
                                        var value = item.value;
                                        uni.navigateBack({
                                            delta: 1, //返回层数,2则上上页
                                        });
                                    } else {
                                        uni.showModal({
                                            title: this
                                                .translateSys(
                                                    "tip"
                                                ),
                                            content: this
                                                .translateSys(
                                                    "quotation_mark_left"
                                                ) +
                                                item
                                                .action_type +
                                                this
                                                .translateSys(
                                                    "quotation_mark_right"
                                                ) +
                                                this
                                                .translate(
                                                    "tip_action_unprocessed"
                                                ),
                                            showCancel: false,
                                            confirmText: this
                                                .translateSys(
                                                    'close'
                                                )
                                        });
                                    }
                                });
                            } else {
                                if (result.info) {
                                    uni.showModal({
                                        title: this
                                            .translateSys(
                                                "tip"),
                                        content: result.info,
                                        showCancel: false,
                                        confirmText: this
                                            .translateSys(
                                                'close')
                                    });
                                }
                            }
                        }
                    }).catch(ex => {
                        console.log(ex);
                        uni.showModal({
                            title: this.translateSys("error") +
                                "9.1",
                            content: ex.errMsg,
                            showCancel: false,
                            confirmText: this.translateSys(
                                'close')
                        });
                    });
                } catch (ex) {
                    var tip = typeof ex == "string" ? ex : ex.message;
                    uni.showModal({
                        title: this.translateSys("error") + "9.2",
                        content: this.translate('execute_event_failed') +
                            this.translateSys(
                                "comma") +
                            this.translate('reason') + this.translateSys(
                                "colon") + tip,
                        showCancel: false,
                        confirmText: this.translateSys('close')
                    });
                }
            },
            //点击按钮列表
            clickDropdownBtns() {
                var that = this
                var itemlist = [];
                this.dropdownBtns.forEach((btn) => {
                    itemlist.push(btn.ShowName);
                });
                uni.showActionSheet({
                    // title: '按钮列表',
                    itemList: itemlist,
                    success: (e) => {
                        console.log(e.tapIndex);
                        var btn = that.dropdownBtns[e.tapIndex];
                        that.onButtonClicked(btn);
                    }
                })
            },
            onButtonClicked(btn) {
                let enviroment = {
                    button: "top",
                    button_name: btn.ShowName,
                    cls_id: btn.Cls_ID,
                    function: "3202",
                    master: {},
                };
                if (btn.FunCode == "TriggerEvent") {
                    this.onTriggerEvent(btn, enviroment);
                } else {
                    this.$Message.warning(this.$t("sys.unrealized"));
                }
            },
            async onTriggerEvent(btn, enviroment) {
                let data_json = [];
                let jsonlist = [];
                let detailStyleList = this.detail1StyleDefList;
                detailStyleList.forEach((style) => {
                    let detail_attr = {};
                    style.form.items.forEach((item) => {
                        if (item.name == "Layout") {
                            item.setting.colList.forEach((cols) => {
                                if (cols != null) detail_attr[cols.fieldId] = cols.value;
                            });
                        } else detail_attr[item.fieldId] = item.value;
                    });
                    jsonlist.push(detail_attr);
                });
                data_json = Base64.encode(JSON.stringify(jsonlist));
                let input_param = {};
                this.head_styledef.form.items.forEach((item) => {
                    if (item.name == "Layout") {
                        item.setting.colList.forEach((cols) => {
                            if (cols != null) input_param[cols.fieldId] = cols.value;
                        });
                    } else input_param[item.fieldId] = item.value;
                });
                input_param = Base64.encode(JSON.stringify(input_param));
                await this.runCustomEvent({
                    ed_type: 0,
                    start_transaction: true,
                    class_id: btn.Cls_ID,
                    event_id: btn.Event.ID,
                    input_param,
                    data_json,
                });
            },
            navigateBackEvent() {
                if (!this.exit_view_event.id)
                    return
                let data_json = [];
                let jsonlist = [];
                let detailStyleList = this.detail1StyleDefList;
                detailStyleList.forEach((style) => {
                    let detail_attr = {};
                    style.form.items.forEach((item) => {
                        if (item.name == "Layout") {
                            item.setting.colList.forEach((cols) => {
                                if (cols != null) detail_attr[cols.fieldId] = cols.value;
                            });
                        } else detail_attr[item.fieldId] = item.value;
                    });
                    jsonlist.push(detail_attr);
                });
                data_json = Base64.encode(JSON.stringify(jsonlist));
                let input_param = {};
                this.head_styledef.form.items.forEach((item) => {
                    if (item.name == "Layout") {
                        item.setting.colList.forEach((cols) => {
                            if (cols != null) input_param[cols.fieldId] = cols.value;
                        });
                    } else input_param[item.fieldId] = item.value;
                });
                input_param = Base64.encode(JSON.stringify(input_param));
                const eventChannel = this.getOpenerEventChannel();
                eventChannel.emit('ExitViewEvent', {
                    ed_type: 0,
                    start_transaction: true,
                    class_id: this.param.ClsID,
                    event_id: this.exit_view_event.id,
                    input_param,
                    data_json,
                });
            },
            cancel(e) { //取消
                this.navigateBackEvent()
                uni.navigateBack({
                    delta: 1, //返回层数,2则上上页
                });
            },
            /**
             * 只支持["column1='A' or column2='B'", "column3='C' and column4='D'", "column5='E'"]这种格式
             * {
             *     "model": 0 / 1,
             *     "condition":
             *     [
             *         [
             *             { },
             *             { },
             *             { }
             *         ],
             *         [
             *             { }
             *         ],
             *         [
             *             { }
             *         ]
             *     ]
             * }
             */
            toWhereBase64String(list) {
                if (typeof list == 'string') list = [list]
                var sql = []
                var seps = [' not in', ' in', '<>', '!=', '<=', '>=', '<', '=',
                    '>', ' like'
                ]
                list.forEach(ls => {
                    var where = ls.trim()
                    if (where.startsWith('(') && where.endsWith(')'))
                        where = where.replace(
                            /^\(/,
                            '').replace(
                            /\)$/, '')
                    if (where.toLowerCase().includes(' and ')) {
                        // 二级and放在第一级数组中
                        where.split(/ and /i).forEach(li => {
                            var l = li.trim()
                            if (l.startsWith('(') && l.endsWith(
                                    ')')) l = l.replace(
                                /^\(/,
                                '').replace(
                                /\)$/, '')
                            var sep = ''
                            for (var i = 0; i < seps.length; i++) {
                                if (l.toLowerCase().includes(seps[
                                        i])) {
                                    sep = seps[i]
                                    break
                                }
                            }
                            if (sep) {
                                var values = l.split(new RegExp(
                                    sep, 'i'))
                                var field = values[0]?.trim()
                                    .replace(/^\[/, '')
                                    .replace(
                                        /\]$/, '')
                                var value = ''
                                var op = sep.trim()
                                if ([' in', ' not in'].includes(
                                        sep) && values[1]
                                    ?.toLowerCase().includes(
                                        'select ') && values[1]
                                    ?.toLowerCase()
                                    .includes(
                                        ' from ')) {
                                    value = l.replace(field, '')
                                        .replace(
                                            /^\s*(in|not in)\s*/i,
                                            '').trim()
                                    if (value.startsWith('(') &&
                                        value.endsWith(')'))
                                        value = value
                                        .replace(/^\(/, '')
                                        .replace(/\)$/, '').trim()
                                } else {
                                    value = values[1]?.trim()
                                        .replace(/^\'/, '')
                                        .replace(
                                            /\'$/, '')
                                    if (['in', 'not in'].includes(
                                            op)) {
                                        value = value.replace(
                                            /^\(/, '').replace(
                                            /\)$/,
                                            '')
                                        value = value.split(',')
                                            .map(v => v.trim()
                                                .replace(
                                                    /^\'/, '')
                                                .replace(/\'$/, '')
                                            )
                                    }
                                }
                                sql.push([{
                                    field,
                                    value,
                                    op
                                }])
                            }
                        })
                    } else if (where.toLowerCase().includes(' or ')) {
                        // 二级or放在第二级同一组数组中
                        var s = []
                        where.split(/ or /i).forEach(li => {
                            var l = li.trim()
                            if (l.startsWith('(') && l.endsWith(
                                    ')')) l = l.replace(
                                /^\(/,
                                '').replace(
                                /\)$/, '')
                            var sep = ''
                            for (var i = 0; i < seps.length; i++) {
                                if (l.toLowerCase().includes(seps[
                                        i])) {
                                    sep = seps[i]
                                    break
                                }
                            }
                            if (sep) {
                                var values = l.split(new RegExp(
                                    sep, 'i'))
                                var field = values[0]?.trim()
                                    .replace(/^\[/, '')
                                    .replace(
                                        /\]$/, '')
                                var value = ''
                                var op = sep.trim()
                                if ([' in', ' not in'].includes(
                                        sep) && values[1]
                                    ?.toLowerCase().includes(
                                        'select ') && values[1]
                                    ?.toLowerCase()
                                    .includes(
                                        ' from ')) {
                                    value = l.replace(field, '')
                                        .replace(
                                            /^\s*(in|not in)\s*/i,
                                            '').trim()
                                    if (value.startsWith('(') &&
                                        value.endsWith(')'))
                                        value = value
                                        .replace(/^\(/, '')
                                        .replace(/\)$/, '').trim()
                                } else {
                                    value = values[1]?.trim()
                                        .replace(/^\'/, '')
                                        .replace(
                                            /\'$/, '')
                                    if (['in', 'not in'].includes(
                                            op)) {
                                        value = value.replace(
                                            /^\(/, '').replace(
                                            /\)$/,
                                            '')
                                        value = value.split(',')
                                            .map(v => v.trim()
                                                .replace(
                                                    /^\'/, '')
                                                .replace(/\'$/, '')
                                            )
                                    }
                                }
                                sql.push([{
                                    field,
                                    value,
                                    op
                                }])
                            }
                        })
                        sql.push(s)
                    } else {
                        var li = where
                        // 单一查询条件直接放在第一级数组中
                        var l = li.trim()
                        if (l.startsWith('(') && l.endsWith(')')) l = l
                            .replace(/^\(/, '')
                            .replace(
                                /\)$/, '')
                        var sep = ''
                        for (var i = 0; i < seps.length; i++) {
                            if (l.toLowerCase().includes(seps[i])) {
                                sep = seps[i]
                                break
                            }
                        }
                        if (sep) {
                            var values = l.split(new RegExp(sep, 'i'))
                            var field = values[0]?.trim().replace(/^\[/,
                                '').replace(/\]$/, '')
                            var value = ''
                            var op = sep.trim()
                            if ([' in', ' not in'].includes(sep) && values[
                                    1]?.toLowerCase()
                                .includes('select ') &&
                                values[1]?.toLowerCase().includes(' from ')
                            ) {
                                value = l.replace(field, '').replace(
                                        /^\s*(in|not in)\s*/i, '')
                                    .trim()
                                if (value.startsWith('(') && value
                                    .endsWith(')')) value = value
                                    .replace(/^\(/, '')
                                    .replace(/\)$/, '').trim()
                            } else {
                                value = values[1]?.trim().replace(/^\'/,
                                    '').replace(/\'$/, '')
                                if (['in', 'not in'].includes(op)) {
                                    value = value.replace(/^\(/, '')
                                        .replace(/\)$/, '')
                                    value = value.split(',').map(v => v
                                        .trim().replace(/^\'/,
                                            '')
                                        .replace(/\'$/,
                                            ''))
                                }
                            }
                            sql.push([{
                                field,
                                value,
                                op
                            }])
                        }
                    }
                })
                if (sql.length > 0)
                    return Base64.encode(JSON.stringify({
                        model: 1,
                        condition: sql
                    }))
                else
                    return ''
            },
            translate(t) {
                if (typeof this.$t == "function") return this.$t(`page.${t}`)
                else return t;
            },
            translateSys(t) {
                if (typeof this.$t == "function") return this.$t(`sys.${t}`)
                else return t;
            },
        },
    };
</script>
<style lang="scss">
    .uni-page-modal-3202-view {
        display: flex;
        flex-direction: column;
        height: calc(100vh - 30rpx);
        padding: 15rpx 0;
        .v-headStyle {
            width: 95%;
        }
        .v-content {
            flex: 1;
            display: flex;
            width: 100%;
            flex-direction: column;
            min-height: 100px;
            overflow: hidden;
            /* border:0.1px solid red; */
        }
        .view-content {
            width: calc(100% - 30rpx);
            padding: 10rpx 10rpx 10rpx 20rpx;
            display: flex;
            margin-top: 10rpx;
            flex-direction: column;
        }
        .dv-panel-bkcolor {
            border: 1px solid #ccc;
            border-radius: 5px;
        }
        .dv-panel {
            padding: 10rpx 10rpx 0rpx 0px;
            border-radius: 12rpx;
            margin-bottom: 10rpx;
        }
        .dv-panel-input {
            vertical-align: middle;
            width: 100%;
            display: inline-block;
            text-align: left;
        }
        .uni-forms-item {
            padding-bottom: 5rpx;
            margin-bottom: 0;
            .uni-forms-item__label {
                height: 20px !important;
                padding: 0 10rpx 0 0 !important;
            }
        }
        .bk-active {
            background-color: #D6FCB2;
        }
        .uni-padding-wrap {
            margin-top: 20rpx;
            background-color: #98DAEA;
            width: 104rpx;
            height: 80rpx;
            text-align: center;
            border-radius: 54rpx;
            padding: 24rpx 0 0 0;
            float: right;
            display: inline-block;
        }
        .uni-padding-wrap a {
            font-size: 40rpx;
        }
        .input-disabled {
            background-color: #f3f3f3 !important;
        }
        .v-scroll-view {
            flex: 1;
            overflow: hidden;
            width: 98%;
        }
        .view-bottom {
            display: block;
            width: calc(100% - 30rpx);
            padding: 10rpx 15rpx 20rpx 15rpx;
            align-items: center;
            .btn_add {
                width: 45%;
                background: #27A6E1;
                border: none;
                color: #fff;
                font-size: 38rpx;
                float: left;
                display: inline-block;
            }
            .btn_disabled {
                background-color: #ddd;
                color: #888;
            }
            .btn_cancel {
                width: 45%;
                margin: 0 10rpx;
                background: #fff;
                border: none;
                //color: #000;
                font-size: 38rpx;
                float: right;
                display: inline-block;
            }
            .btn_cancel2 {
                width: 90%;
                margin: 0 10rpx;
                background: #fff;
                //    border: none;
                color: #000;
                font-size: 38rpx;
                float: right;
                display: inline-block;
            }
            .uni-padding-wrap {
                margin: 2rpx 0 0 10rpx;
                background-color: #98DAEA;
                width: 104rpx;
                height: 80rpx;
                text-align: center;
                border-radius: 54rpx;
                padding: 24rpx 0 0 0;
                float: right;
                display: inline-block;
            }
            .uni-padding-wrap a {
                font-size: 40rpx;
            }
        }
    }
</style>