| | |
| | | "name" : "MoboxPDA", |
| | | "appid" : "__UNI__56D451E", |
| | | "description" : "", |
| | | "versionName" : "1.1.57", |
| | | "versionCode" : 1157, |
| | | "versionName" : "1.1.58", |
| | | "versionCode" : 1158, |
| | | "transformPx" : false, |
| | | /* 5+App特有相关 */ |
| | | "app-plus" : { |
| | |
| | | }, |
| | | { |
| | | "path" : "pages/modal/3018", |
| | | "style" : |
| | | { |
| | | "style": { |
| | | "navigationBarTitleText":"%sys.add2%", |
| | | "enablePullDownRefresh": false |
| | | } |
| | | }, |
| | | { |
| | | "path" : "pages/modal/form/index", |
| | | "style" : |
| | | { |
| | | "style": { |
| | | "navigationBarTitleText":"%sys.add2%", |
| | | "enablePullDownRefresh": false |
| | | } |
| | |
| | | "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%", |
| | |
| | | </template> |
| | | |
| | | <script> |
| | | import {Base64} from '@/js/Base64.js'; |
| | | import { |
| | | Base64 |
| | | } from '@/js/Base64.js'; |
| | | import utils from "@/js/utils.js" |
| | | import { |
| | | areaFunc |
| | |
| | | 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({ |
| | |
| | | height: 100vh; |
| | | background: #EAEAEA; |
| | | display: flex; |
| | | |
| | | .area-list { |
| | | width: 100%; |
| | | height: 100%; |
| | |
| | | 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; |
| | |
| | | width: 125rpx; |
| | | display: flex; |
| | | flex-direction: column; |
| | | |
| | | .logo { |
| | | height: 105rpx; |
| | | width: 105rpx; |
New file |
| | |
| | | <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> |
New file |
| | |
| | | <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> |