| | |
| | | |
| | | <template> |
| | | <view class="content"> |
| | | <view class="v-content"> |
| | | <view class="dv-panel dv-panel-bkcolor"> |
| | | <div class="dv-panel-input"> |
| | | <!-- HTML页面类型显示 --> |
| | | <div class="dv-viewHtml-Panel" v-if="ViewHtml_Panel" v-html="ViewHtml_Panel"> |
| | | <!-- <div> |
| | | <label class="item-label">任务编码:</label> |
| | | <span class="item-span">TA240318-00005</span> |
| | | </div> --> |
| | | </div> |
| | | <!-- 自定义表单类型显示 --> |
| | | <div v-if="!ViewHtml_Panel"> |
| | | <div v-for="(item,index) in detail2_styledef.form.items"> |
| | | <!-- 普通布局 --> |
| | | <view v-if="item.name!='Layout'"> |
| | | <text class="txt_title" :style="{'width':item.labelWidth+'px'}">{{item.label}}:</text> |
| | | <span class="form-item-span" |
| | | v-if="item.disabled">{{item.value2?'#'+item.value+'#'+item.value2:item.value}}</span> |
| | | <!-- 文本框/数字框 --> |
| | | <view class="dv_input" |
| | | v-if="(item.name=='Input' || item.name=='InputNumber') && !item.disabled"> |
| | | <text v-if="item.setting.prefix" class="uni-icon" :class="[item.setting.prefix]" |
| | | @change="onChange(item)"></text> |
| | | <input class="uni-input" :class="item.disabled?'input-disabled':''" |
| | | :type="item.name=='Input'?'text':item.name=='InputNumber'?'number':'text'" |
| | | v-model="item.value" :disabled="item.disabled" :placeholder="item.placeholder" |
| | | :style="{'width':item.setting.prefix && item.setting.suffix?'78%':item.setting.prefix || item.setting.suffix?'87%':'96%'}" |
| | | :focus="focusMateria" @focus="ontap(item)" @blur="onevent(item)" /> |
| | | <text v-if="item.setting.suffix" class="uni-icon" :class="[item.setting.suffix]" |
| | | @click="onChange(item)"></text> |
| | | </view> |
| | | <!-- 下拉框-单选 item.useDict?item.dict:item.selections--> |
| | | <uni-data-select id="dv_select" v-if="item.name=='Select' && !item.disabled" |
| | | :class="item.disabled?'input-disabled':''" v-model="item.value" |
| | | :localdata="item.dict" @change="onChange(item)" :disabled="item.disabled" |
| | | :clear="false"></uni-data-select> |
| | | <!-- 多行文本 --> |
| | | <view class="input-wrapper" v-if="item.name=='Textarea' && !item.disabled"> |
| | | <textarea class="uni-input" :value="item.value" |
| | | :class="item.disabled?'input-disabled':''" :placeholder="item.placeholder" |
| | | @blur="onModelValue(item)" style="height:60px;" :style="{'width':'96%'}" |
| | | :disabled="item.disabled"></textarea> |
| | | </view> |
| | | <!-- 复选框 --> |
| | | <checkbox-group class="check_rememberPwd" v-if="item.name=='Checkbox'" |
| | | :class="item.disabled?'input-disabled':''" @change="onModelValue(item)" |
| | | :data-ischeck="item.value" :disabled="item.disabled" |
| | | :style="{'margin-left':'10rpx'}"> |
| | | <label> |
| | | <checkbox :value="item.value" :checked="item.value" /> |
| | | <text>{{item.label}}</text> |
| | | </label> |
| | | </checkbox-group> |
| | | <!-- Switch开关 --> |
| | | <switch v-if="item.name=='Switch'" :class="item.disabled?'input-disabled':''" |
| | | :disabled="item.disabled" v-model="item.value" @change="onModelValue(item)" |
| | | :style="{'margin-left':'10rpx'}" /> |
| | | <!-- 日期时间 --> |
| | | <view class="input-wrapper" |
| | | v-if="(item.name=='TimePicker' || item.name=='DatePicker') && !item.disabled"> |
| | | <picker mode="date" class="date_iput" :class="item.disabled?'input-disabled':''" |
| | | :disabled="item.disabled" :value="item.value" @change="onModelValue(item)"> |
| | | <view class="picker">{{item.value}}</view> |
| | | </picker> |
| | | </view> |
| | | </view> |
| | | <!-- 栅格布局 --> |
| | | <uni-row class="demo-uni-row" v-if="item.name=='Layout'"> |
| | | <uni-col v-for="(cols,key) in item.setting.colList" |
| | | :span="item.setting.spanList?item.setting.spanList[key]:24 / item.setting.col"> |
| | | <view v-if="cols!=null"> |
| | | <text class="txt_title" |
| | | :style="{'width':cols.labelWidth+'px'}">{{cols.label}}:</text> |
| | | <span class="form-item-span" |
| | | v-if="cols.disabled">{{cols.value2?'#'+cols.value+'#'+cols.value2:cols.value}}</span> |
| | | <view class="dv_input" |
| | | v-if="(cols.name=='Input' || cols.name=='InputNumber') && !cols.disabled"> |
| | | <text v-if="cols.setting.prefix" class="uni-icon" |
| | | :class="[cols.setting.prefix]" @change="onChange(cols)"></text> |
| | | <input class="uni-input" :class="cols.disabled?'input-disabled':''" |
| | | :type="cols.name=='Input'?'text':cols.name=='InputNumber'?'number':'text'" |
| | | v-model="cols.value" :disabled="cols.disabled" |
| | | :placeholder="cols.placeholder" |
| | | :style="{'width':cols.setting.prefix && cols.setting.suffix?'78%':cols.setting.prefix || cols.setting.suffix?'87%':'96%'}" |
| | | :focus="focusMateria" @focus="ontap(cols)" @blur="onevent(cols)" /> |
| | | <text v-if="cols.setting.suffix" class="uni-icon" |
| | | :class="[cols.setting.suffix]" @click="onChange(cols)"></text> |
| | | </view> |
| | | <!-- 下拉框-单选 cols.useDict?cols.dict:cols.selections--> |
| | | <uni-data-select id="dv_select" v-if="cols.name=='Select' && !cols.disabled" |
| | | :class="cols.disabled?'input-disabled':''" v-model="cols.value" |
| | | :localdata="cols.dict" @change="onChange(cols)" :disabled="cols.disabled" |
| | | :clear="false"></uni-data-select> |
| | | <!-- 多行文本 --> |
| | | <view class="input-wrapper" v-if="cols.name=='Textarea' && !cols.disabled"> |
| | | <textarea class="uni-input" :value="cols.value" |
| | | :class="cols.disabled?'input-disabled':''" |
| | | :placeholder="cols.placeholder" @blur="onModelValue(cols)" |
| | | style="height:60px;" :style="{'width':'96%'}" |
| | | :disabled="cols.disabled"></textarea> |
| | | </view> |
| | | <!-- 复选框 --> |
| | | <checkbox-group class="check_rememberPwd" v-if="cols.name=='Checkbox'" |
| | | :class="cols.disabled?'input-disabled':''" :disabled="item.disabled" |
| | | @change="onModelValue(cols)" :data-ischeck="cols.value" |
| | | :style="{'margin-left':'10rpx'}"> |
| | | <label> |
| | | <checkbox :value="cols.value" :checked="cols.value" /> |
| | | <text>{{cols.label}}</text> |
| | | </label> |
| | | </checkbox-group> |
| | | <!-- Switch开关 --> |
| | | <switch v-if="cols.name=='Switch'" :class="cols.disabled?'input-disabled':''" |
| | | :disabled="item.disabled" v-model="cols.value" @change="onModelValue(cols)" |
| | | :style="{'margin-left':'10rpx'}" /> |
| | | <!-- 日期时间 --> |
| | | <view class="input-wrapper" |
| | | v-if="(cols.name=='TimePicker' || cols.name=='DatePicker') && !cols.disabled"> |
| | | <picker mode="date" class="date_iput" |
| | | :class="cols.disabled?'input-disabled':''" :disabled="item.disabled" |
| | | :value="cols.value" @change="onModelValue(cols)"> |
| | | <view class="picker">{{cols.value}}</view> |
| | | </picker> |
| | | </view> |
| | | |
| | | </view> |
| | | </uni-col> |
| | | </uni-row> |
| | | </div> |
| | | </div> |
| | | </div> |
| | | </view> |
| | | </view> |
| | | |
| | | <view class="view-floor" v-if="param.ViewPage.Page_Button"> |
| | | <!-- <button type="default" @click="cancel" class="btn_cancel" |
| | | :style="{'width':param.ViewPage.Page_Button.length>1?'39.5%':'48.5%'}">返回</button> --> |
| | | <button type="default" class="btn_refresh" v-for="(btn,index) in param.ViewPage.Page_Button" v-if="index<2" |
| | | @click="onBtnClick(btn)" |
| | | :style="{'width':param.ViewPage.Page_Button.length==1?'96%':param.ViewPage.Page_Button.length>2?'39.5%':'48%'}">{{btn.ShowName}}</button> |
| | | |
| | | <view class="uni-padding-wrap" v-if="param.ViewPage.Page_Button.length>2"> |
| | | <view class="uni-btn-v"> |
| | | <a @tap="actionSheetTap"> |
| | | <Icon class="mobox-normal-more" /> |
| | | </a> |
| | | </view> |
| | | </view> |
| | | </view> |
| | | </view> |
| | | </template> |
| | | |
| | | <script> |
| | | import Base64 from '../../components/js-base64/base64.js' |
| | | import classUtils from "@/js/utils.js" |
| | | export default { |
| | | modules: { |
| | | Base64, |
| | | }, |
| | | onBackPress(e) { |
| | | // console.log("监听返回按钮事件",e); |
| | | var eventChannel = this.$scope.eventChannel; |
| | | // const eventChannel = this.getOpenerEventChannel(); |
| | | eventChannel.emit('ExitViewEvent', ""); |
| | | // uni.navigateBack({ |
| | | // delta:1 ,//返回层数,2则上上页 |
| | | // }); |
| | | // return true; |
| | | }, |
| | | data() { |
| | | return { |
| | | title: '新增', |
| | | param: {}, |
| | | styleDef: { |
| | | form: { |
| | | items: [] |
| | | } |
| | | }, |
| | | detail2_styledef: { |
| | | form: { |
| | | items: [] |
| | | }, |
| | | }, |
| | | // detail2StyleDefList:[], |
| | | //获取数据类的HTML页面 |
| | | ViewHtml_Panel: "", |
| | | ViewPageHtml_Show: { |
| | | name: "", |
| | | event: { |
| | | id: "", |
| | | name: "" |
| | | } |
| | | }, |
| | | }; |
| | | }, |
| | | async onLoad(options) { |
| | | // console.log(options); |
| | | uni.setNavigationBarTitle({ |
| | | title: options.titlename |
| | | }); //设置顶部标题 |
| | | this.$data.title = options.titlename; |
| | | this.$data.param = JSON.parse(options.param); |
| | | console.log(this.$data.param); |
| | | this.$data.styleDef = JSON.parse(options.style); |
| | | // console.log(this.$data.styleDef); |
| | | if (this.param.ViewPage.View_UIDef.ui_type == "HTML页面") { |
| | | // HTML页面 |
| | | //获取数据类的HTML页面 |
| | | this.Html_UIstyleGetInfo(this.param.DataCls.id, this.param.ViewPage.View_UIDef.id, 'viewPage'); |
| | | } else { |
| | | this.Detail2_UIstyleGetInfo(this.param.DataCls.id, this.param.ViewPage.View_UIDef.id); |
| | | } |
| | | |
| | | |
| | | //进入页面后事件 |
| | | var eventid = this.param.ViewPage.Enter_View_Event?.id; |
| | | if (eventid) { |
| | | try { |
| | | var obj_attr = { |
| | | 'S_ID': this.styleDef.form.objId |
| | | }; |
| | | this.styleDef.form.attrs.forEach((attr) => { |
| | | obj_attr[attr.name] = attr.value; |
| | | }); |
| | | // console.log(obj_attr); |
| | | var input_param = Base64.encode(JSON.stringify(obj_attr)); |
| | | this.runCustomEvent({ |
| | | ed_type: 0, |
| | | start_transaction: true, |
| | | class_id: this.param.DataCls.id, |
| | | event_id: eventid, |
| | | data_obj_id:this.styleDef.form.objId, |
| | | obj_attr, |
| | | input_param, |
| | | }); |
| | | } catch (ex) { |
| | | var tip = typeof ex == "string" ? ex : ex.message; |
| | | uni.showModal({ |
| | | title: "错误", |
| | | content: tip, |
| | | showCancel: false, |
| | | confirmText: "取消" |
| | | }); |
| | | } |
| | | } |
| | | }, |
| | | methods: { |
| | | async Detail2_UIstyleGetInfo(class_id, style_id) { //获取自定义表单样式 |
| | | var $this = this; |
| | | var dataInfo = { |
| | | class_id: class_id, |
| | | ui_style_id: style_id, |
| | | }; |
| | | this.$store.dispatch('UIStyleGetInfo', dataInfo).then(ret => { |
| | | // console.log(ret); |
| | | if (ret.err_code == 0) { |
| | | var styledef = ""; |
| | | if (ret.result.style_def) { |
| | | //mobox2的style_def是json字符串 |
| | | styledef = ret.result.style_def.replace(/\\/g, ""); |
| | | //mobox3的style_def是base64字符串 |
| | | if (!ret.result.style_def.includes('"')) styledef = Base64.decode(ret.result |
| | | .style_def); |
| | | } |
| | | $this.$data.detail2_styledef = ret.result.style_def ? JSON.parse(styledef) : {}; |
| | | $this.$data.detail2_styledef.SelBut_Checked = false; |
| | | // console.log($this.$data.detail2_styledef); |
| | | $this.styleDef.form.attrs.forEach((attr) => { |
| | | // info[attr.name]=attr.value; |
| | | $this.detail2_styledef.form.items.forEach(async (ele, index) => { |
| | | if (ele.name != 'Layout') { |
| | | if (ele.fieldId == attr.name) { |
| | | ele.value = attr.value; |
| | | } |
| | | } else if (ele.name == 'Layout') { |
| | | ele.setting.colList.forEach(async (col, key) => { |
| | | if (col) { |
| | | if (col.fieldId == attr.name) { |
| | | col.value = attr.value; |
| | | } |
| | | } |
| | | }); |
| | | } |
| | | }); |
| | | }); |
| | | setTimeout(function() { |
| | | var detail2_styledef = JSON.parse(JSON.stringify($this.detail2_styledef)); |
| | | $this.detail2_styledef = []; |
| | | $this.detail2_styledef = detail2_styledef; |
| | | }, 100); |
| | | } else { |
| | | uni.showModal({ |
| | | title: "错误1", |
| | | content: ret.err_msg, |
| | | showCancel: false, |
| | | confirmText: "取消" |
| | | }); |
| | | } |
| | | }).catch(ex => { |
| | | // console.log(ex); |
| | | uni.showModal({ |
| | | title: "错误1.1", |
| | | content: ex.errMsg, |
| | | showCancel: false, |
| | | confirmText: "取消" |
| | | }); |
| | | }); |
| | | |
| | | }, |
| | | async Html_UIstyleGetInfo(class_id, style_id) { //获取自定义表单样式 |
| | | var $this = this; |
| | | var dataInfo = { |
| | | class_id: class_id, |
| | | ui_style_id: style_id, |
| | | }; |
| | | this.$store.dispatch('UIStyleGetInfo', dataInfo).then(ret => { |
| | | // console.log(ret); |
| | | if (ret.err_code == 0) { |
| | | var styledef = ""; |
| | | if (ret.result.style_def) { |
| | | //mobox2的style_def是json字符串 |
| | | styledef = ret.result.style_def.replace(/\\/g, ""); |
| | | //mobox3的style_def是base64字符串 |
| | | if (!ret.result.style_def.includes('"')) styledef = Base64.decode(ret.result |
| | | .style_def); |
| | | } |
| | | $this.ViewPageHtml_Show = ret.result.style_def ? JSON.parse(styledef) : {}; |
| | | // console.log($this.ViewPageHtml_Show); |
| | | var obj_attr = {}; |
| | | $this.styleDef.form.attrs.forEach((attr) => { |
| | | obj_attr[attr.name] = attr.value; |
| | | }); |
| | | obj_attr['id'] = $this.styleDef.form.objId; |
| | | |
| | | var eventid = $this.ViewPageHtml_Show.event.id; |
| | | if (!$this.ViewPageHtml_Show.event.id.includes('{')) |
| | | eventid = '{' + $this.ViewPageHtml_Show.event.id + '}'; |
| | | //HTML页面事件 |
| | | $this.runCustomEvent({ |
| | | ed_type: 0, |
| | | start_transaction: true, |
| | | class_id: $this.param.DataCls.id, |
| | | event_id: eventid, |
| | | data_obj_id:$this.styleDef.form.objId, |
| | | obj_attr, |
| | | }); |
| | | } else { |
| | | uni.showModal({ |
| | | title: "错误6", |
| | | content: ret.err_msg, |
| | | showCancel: false, |
| | | confirmText: "取消" |
| | | }); |
| | | } |
| | | }).catch(ex => { |
| | | // console.log(ex); |
| | | uni.showModal({ |
| | | title: "错误6.1", |
| | | content: ex.errMsg, |
| | | showCancel: false, |
| | | confirmText: "取消" |
| | | }); |
| | | }); |
| | | |
| | | }, |
| | | //查询数据类数据信息 |
| | | async dataObjQuery(clsid, where, index, key) { |
| | | try { |
| | | var $this = this; |
| | | var dataInfo = { |
| | | class_id: clsid, |
| | | attrs: [], |
| | | condition: this.toWhereBase64String("" + where + ""), |
| | | prj_rel_type: "", |
| | | order_by: this.orderby, |
| | | page_size: 99999, |
| | | page: 1, |
| | | query_id: '', |
| | | }; |
| | | this.$store.dispatch('dataObjQuery', dataInfo).then(ret => { |
| | | // console.log(ret); |
| | | if (ret.err_code == 0) { |
| | | if (ret.result) { |
| | | $this.detail1StyleDefList = []; |
| | | ret.result.obj_list.forEach((obj) => { |
| | | var info = { |
| | | S_ID: obj.id, |
| | | }; |
| | | obj.attr_list.forEach((attr) => { |
| | | info[attr.name] = attr.value; |
| | | }); |
| | | if (key != -1) |
| | | $this.detail2_styledef.form.items[index].setting.colList[key] |
| | | .value2 = info.S_NAME; |
| | | else |
| | | $this.detail2_styledef.form.items[index].value2 = info.S_NAME; |
| | | }); |
| | | // console.log($this.detail2_styledef); |
| | | } |
| | | } else { |
| | | uni.showModal({ |
| | | title: "错误5", |
| | | content: ret.err_msg, |
| | | showCancel: false, |
| | | confirmText: "取消" |
| | | }); |
| | | } |
| | | }).catch(ex => { |
| | | // console.log(ex); |
| | | uni.showModal({ |
| | | title: "错误5.1", |
| | | content: ex.errMsg, |
| | | showCancel: false, |
| | | confirmText: "取消" |
| | | }); |
| | | }); |
| | | } catch (ex) { |
| | | var tip = typeof ex == "string" ? ex : ex.message; |
| | | uni.showModal({ |
| | | title: "错误5.2", |
| | | content: tip, |
| | | showCancel: false, |
| | | confirmText: "取消" |
| | | }); |
| | | } |
| | | }, |
| | | |
| | | // 内容变化后事件 |
| | | async onChange(event) { |
| | | try { |
| | | if (event.id) { |
| | | var obj_attr = this.detail2_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.$data.detail2_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, |
| | | }; |
| | | this.$store.dispatch('runCustomEvent', dataInfo).then(ret => { |
| | | // console.log(ret); |
| | | if (ret.err_code == 0) { |
| | | var result = ret.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) uni.showModal({ |
| | | title: '提示', |
| | | content: tip, |
| | | showCancel: false, |
| | | confirmText: "取消" |
| | | }); |
| | | else uni.showModal({ |
| | | title: '提示', |
| | | content: tip + ',提示:' + result.ret, |
| | | showCancel: false, |
| | | confirmText: "取消" |
| | | }); |
| | | return false; |
| | | } else { |
| | | var tip = result.info ? typeof result.info == 'string' ? result.info : |
| | | result.info.join('<br/>') : ''; |
| | | if (tip) uni.showModal({ |
| | | title: '提示', |
| | | content: tip, |
| | | showCancel: false, |
| | | confirmText: "取消" |
| | | }); |
| | | |
| | | if (result.result_type == 0 && result.action) { |
| | | result.action.forEach(item => { |
| | | if (item.action_type == "set_dlg_attr") { |
| | | // value = {"attr":"xxx", "value":"xxx"} |
| | | var data = item.value; |
| | | $this.$data.detail2_styledef.form.items.forEach(async ( |
| | | ele, index) => { |
| | | data.forEach(async (ele2, index) => { |
| | | if (ele.fieldId == ele2 |
| | | .attr) { |
| | | ele.value = ele2 |
| | | .value; |
| | | } |
| | | }); |
| | | }); |
| | | } |
| | | }); |
| | | } else { |
| | | // this.detail2StyleDefList=[]; |
| | | if (result.info) { |
| | | uni.showModal({ |
| | | title: "提示", |
| | | content: result.info, |
| | | showCancel: false, |
| | | confirmText: "取消" |
| | | }); |
| | | } |
| | | } |
| | | } |
| | | |
| | | } else { |
| | | uni.showModal({ |
| | | title: "错误8", |
| | | content: ret.err_msg, |
| | | showCancel: false, |
| | | confirmText: "取消" |
| | | }); |
| | | } |
| | | }).catch(ex => { |
| | | // console.log(ex); |
| | | uni.showModal({ |
| | | title: "错误8.1", |
| | | content: ex.errMsg, |
| | | showCancel: false, |
| | | confirmText: "取消" |
| | | }); |
| | | }); |
| | | } |
| | | } catch (ex) { |
| | | var tip = typeof ex == "string" ? ex : ex.message; |
| | | uni.showModal({ |
| | | title: "错误8.2", |
| | | content: "执行“内容变化后”事件失败:" + tip, |
| | | showCancel: false, |
| | | confirmText: "取消" |
| | | }); |
| | | |
| | | } |
| | | }, |
| | | //点击按钮 |
| | | onBtnClick(btn) { |
| | | var that = this |
| | | if (btn.Prompt) { |
| | | uni.showModal({ |
| | | title: '提示', |
| | | content: btn.PromptContent || "是否确定?", |
| | | success: function(res) { |
| | | if (res.confirm) { |
| | | that.onButtonClicked(btn); |
| | | // } else if (res.cancel) { |
| | | // console.log('用户点击取消'); |
| | | } |
| | | } |
| | | }); |
| | | } else that.onButtonClicked(btn); |
| | | }, |
| | | //点击按钮列表 |
| | | actionSheetTap() { |
| | | var that = this |
| | | var itemlist = []; |
| | | this.param.ViewPage.Page_Button.forEach((btn, index) => { |
| | | if (index >= 2) |
| | | itemlist.push(btn.ShowName); |
| | | }); |
| | | uni.showActionSheet({ |
| | | // title: '按钮列表', |
| | | itemList: itemlist, |
| | | success: (e) => { |
| | | console.log(e.tapIndex); |
| | | var btn = that.param.ListPage.Page_Button[e.tapIndex]; |
| | | if (btn.Prompt) { |
| | | uni.showModal({ |
| | | title: '提示', |
| | | content: btn.PromptContent || "是否确定?", |
| | | success: function(res) { |
| | | if (res.confirm) { |
| | | that.onButtonClicked(btn); |
| | | // } else if (res.cancel) { |
| | | // console.log('用户点击取消'); |
| | | } |
| | | } |
| | | }); |
| | | } else that.onButtonClicked(btn); |
| | | } |
| | | }) |
| | | }, |
| | | //处理相关按钮 |
| | | async onButtonClicked(btn) { |
| | | var style = this.styleDef || ''; |
| | | try { |
| | | var enviroment = { |
| | | button: "top", |
| | | button_name: btn.ShowName, |
| | | cls_id: btn.Cls_ID, |
| | | function: "3200", |
| | | master: {}, |
| | | }; |
| | | if (btn.FunCode == "TriggerEvent") { |
| | | this.triggerEvent(btn, style, enviroment); |
| | | } else { |
| | | uni.showModal({ |
| | | title: "提示", |
| | | content: "未实现", |
| | | showCancel: false, |
| | | confirmText: "取消" |
| | | }); |
| | | } |
| | | } catch (ex) { |
| | | var tip = typeof ex == "string" ? ex : ex.message; |
| | | uni.showModal({ |
| | | title: "错误2", |
| | | content: tip, |
| | | showCancel: false, |
| | | confirmText: "取消" |
| | | }); |
| | | } |
| | | }, |
| | | //执行触发事件 |
| | | async triggerEvent(btn, style, enviroment) { |
| | | try { |
| | | var obj_attr = { |
| | | 'S_ID': this.styleDef.form.objId |
| | | }; |
| | | style.form.attrs.forEach((attr) => { |
| | | obj_attr[attr.name] = attr.value; |
| | | }); |
| | | // console.log(obj_attr); |
| | | // let input_param = Base64.encode(JSON.stringify(obj_attr)); |
| | | // return; |
| | | this.runCustomEvent({ |
| | | ed_type: 0, |
| | | start_transaction: true, |
| | | class_id: btn.Cls_ID, |
| | | event_id: btn.Event.ID, |
| | | data_obj_id:this.styleDef.form.objId, |
| | | obj_attr: obj_attr, |
| | | }); |
| | | } catch (ex) { |
| | | var tip = typeof ex == "string" ? ex : ex.message; |
| | | uni.showModal({ |
| | | title: "错误3", |
| | | content: tip, |
| | | showCancel: false, |
| | | confirmText: "取消" |
| | | }); |
| | | } |
| | | }, |
| | | //事件 |
| | | async runCustomEvent(dataInfo) { |
| | | try { |
| | | var $this = this; |
| | | this.$store.dispatch('runCustomEvent', dataInfo).then(ret => { |
| | | console.log(ret); |
| | | if (ret.err_code == 0) { |
| | | var result = ret.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) uni.showModal({ |
| | | title: '提示', |
| | | content: tip, |
| | | showCancel: false, |
| | | confirmText: "取消" |
| | | }); |
| | | else uni.showModal({ |
| | | title: '提示', |
| | | content: tip + ',提示:' + result.ret, |
| | | showCancel: false, |
| | | confirmText: "取消" |
| | | }); |
| | | return false; |
| | | } else { |
| | | var tip = result.info ? typeof result.info == 'string' ? result.info : result |
| | | .info.join('<br/>') : ''; |
| | | if (tip) uni.showModal({ |
| | | title: '提示', |
| | | content: tip, |
| | | showCancel: false, |
| | | confirmText: "取消" |
| | | }); |
| | | |
| | | if (result.result_type == 0 && result.action) { |
| | | result.action.forEach(item => { |
| | | if (item.action_type == "goback_to_pre_page") { //返回上一页 |
| | | var value = item.value; |
| | | // const eventChannel = this.$scope.eventChannel; |
| | | // // const eventChannel = this.getOpenerEventChannel(); |
| | | // eventChannel.emit('ExitViewEvent',""); |
| | | uni.navigateBack({ |
| | | delta: 1, //返回层数,2则上上页 |
| | | }); |
| | | } else if (item.action_type == "hidden_button") { //隐藏按钮 |
| | | var value = item.value; |
| | | value.forEach(btn => { |
| | | var index = $this.param.ViewPage.Page_Button |
| | | .findIndex(button => button.ShowName == |
| | | btn) |
| | | if (index > -1) |
| | | $this.param.ViewPage.Page_Button.splice( |
| | | index, 1) |
| | | }) |
| | | } else if (item.action_type == "set_panel_html") { //显示Html页面 |
| | | // var value = item.value; |
| | | $this.ViewHtml_Panel = item.value; |
| | | |
| | | } |
| | | |
| | | }); |
| | | } else { |
| | | var tip = result.info ? typeof result.info == 'string' ? result.info : |
| | | result.info.join('<br/>') : ''; |
| | | if (tip) uni.showModal({ |
| | | title: '提示', |
| | | content: tip, |
| | | showCancel: false, |
| | | confirmText: "取消" |
| | | }); |
| | | } |
| | | } |
| | | |
| | | } else { |
| | | uni.showModal({ |
| | | title: "错误4", |
| | | content: ret.err_msg, |
| | | showCancel: false, |
| | | confirmText: "取消" |
| | | }); |
| | | } |
| | | }).catch(ex => { |
| | | // console.log(ex); |
| | | uni.showModal({ |
| | | title: "错误4.1", |
| | | content: ex.errMsg, |
| | | showCancel: false, |
| | | confirmText: "取消" |
| | | }); |
| | | }); |
| | | } catch (ex) { |
| | | var tip = typeof ex == "string" ? ex : ex.message; |
| | | uni.showModal({ |
| | | title: "错误4.2", |
| | | content: "执行“内容变化后”事件失败:" + tip, |
| | | showCancel: false, |
| | | confirmText: "取消" |
| | | }); |
| | | |
| | | } |
| | | }, |
| | | |
| | | /** |
| | | * 只支持["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 '' |
| | | }, |
| | | |
| | | cancel(e) { //取消 |
| | | var eventChannel = this.$scope.eventChannel; |
| | | // const eventChannel = this.getOpenerEventChannel(); |
| | | eventChannel.emit('ExitViewEvent', ""); |
| | | uni.navigateBack({ |
| | | delta: 1, //返回层数,2则上上页 |
| | | }); |
| | | }, |
| | | |
| | | |
| | | }, |
| | | }; |
| | | </script> |
| | | |
| | | <style> |
| | | .v-headStyle .txt_title { |
| | | font-size: 34rpx; |
| | |
| | | width: calc(100% - 120px); |
| | | } |
| | | </style> |
| | | |
| | | <template> |
| | | <view class="content"> |
| | | <view class="v-content"> |
| | | <view class="dv-panel dv-panel-bkcolor"> |
| | | <div class="dv-panel-input"> |
| | | <!-- HTML页面类型显示 --> |
| | | <div class="dv-viewHtml-Panel" v-if="ViewHtml_Panel" v-html="ViewHtml_Panel"> |
| | | <!-- <div> |
| | | <label class="item-label">任务编码:</label> |
| | | <span class="item-span">TA240318-00005</span> |
| | | </div> --> |
| | | </div> |
| | | <!-- 自定义表单类型显示 --> |
| | | <div v-if="!ViewHtml_Panel"> |
| | | <div v-for="(item,index) in detail2_styledef.form.items"> |
| | | <!-- 普通布局 --> |
| | | <view v-if="item.name!='Layout'"> |
| | | <text class="txt_title" :style="{'width':item.labelWidth+'px'}">{{item.label}}:</text> |
| | | <span class="form-item-span" |
| | | v-if="item.disabled">{{item.value2?'#'+item.value+'#'+item.value2:item.value}}</span> |
| | | <!-- 文本框/数字框 --> |
| | | <view class="dv_input" |
| | | v-if="(item.name=='Input' || item.name=='InputNumber') && !item.disabled"> |
| | | <text v-if="item.setting.prefix" class="uni-icon" :class="[item.setting.prefix]" |
| | | @change="onChange(item)"></text> |
| | | <input class="uni-input" :class="item.disabled?'input-disabled':''" |
| | | :type="item.name=='Input'?'text':item.name=='InputNumber'?'number':'text'" |
| | | v-model="item.value" :disabled="item.disabled" :placeholder="item.placeholder" |
| | | :style="{'width':item.setting.prefix && item.setting.suffix?'78%':item.setting.prefix || item.setting.suffix?'87%':'96%'}" |
| | | :focus="focusMateria" @focus="ontap(item)" @blur="onevent(item)" /> |
| | | <text v-if="item.setting.suffix" class="uni-icon" :class="[item.setting.suffix]" |
| | | @click="onChange(item)"></text> |
| | | </view> |
| | | <!-- 下拉框-单选 item.useDict?item.dict:item.selections--> |
| | | <uni-data-select id="dv_select" v-if="item.name=='Select' && !item.disabled" |
| | | :class="item.disabled?'input-disabled':''" v-model="item.value" |
| | | :localdata="item.dict" @change="onChange(item)" :disabled="item.disabled" |
| | | :clear="false"></uni-data-select> |
| | | <!-- 多行文本 --> |
| | | <view class="input-wrapper" v-if="item.name=='Textarea' && !item.disabled"> |
| | | <textarea class="uni-input" :value="item.value" |
| | | :class="item.disabled?'input-disabled':''" :placeholder="item.placeholder" |
| | | @blur="onModelValue(item)" style="height:60px;" :style="{'width':'96%'}" |
| | | :disabled="item.disabled"></textarea> |
| | | </view> |
| | | <!-- 复选框 --> |
| | | <checkbox-group class="check_rememberPwd" v-if="item.name=='Checkbox'" |
| | | :class="item.disabled?'input-disabled':''" @change="onModelValue(item)" |
| | | :data-ischeck="item.value" :disabled="item.disabled" |
| | | :style="{'margin-left':'10rpx'}"> |
| | | <label> |
| | | <checkbox :value="item.value" :checked="item.value" /> |
| | | <text>{{item.label}}</text> |
| | | </label> |
| | | </checkbox-group> |
| | | <!-- Switch开关 --> |
| | | <switch v-if="item.name=='Switch'" :class="item.disabled?'input-disabled':''" |
| | | :disabled="item.disabled" v-model="item.value" @change="onModelValue(item)" |
| | | :style="{'margin-left':'10rpx'}" /> |
| | | <!-- 日期时间 --> |
| | | <view class="input-wrapper" |
| | | v-if="(item.name=='TimePicker' || item.name=='DatePicker') && !item.disabled"> |
| | | <picker mode="date" class="date_iput" :class="item.disabled?'input-disabled':''" |
| | | :disabled="item.disabled" :value="item.value" @change="onModelValue(item)"> |
| | | <view class="picker">{{item.value}}</view> |
| | | </picker> |
| | | </view> |
| | | </view> |
| | | <!-- 栅格布局 --> |
| | | <uni-row class="demo-uni-row" v-if="item.name=='Layout'"> |
| | | <uni-col v-for="(cols,key) in item.setting.colList" |
| | | :span="item.setting.spanList?item.setting.spanList[key]:24 / item.setting.col"> |
| | | <view v-if="cols!=null"> |
| | | <text class="txt_title" |
| | | :style="{'width':cols.labelWidth+'px'}">{{cols.label}}:</text> |
| | | <span class="form-item-span" |
| | | v-if="cols.disabled">{{cols.value2?'#'+cols.value+'#'+cols.value2:cols.value}}</span> |
| | | <view class="dv_input" |
| | | v-if="(cols.name=='Input' || cols.name=='InputNumber') && !cols.disabled"> |
| | | <text v-if="cols.setting.prefix" class="uni-icon" |
| | | :class="[cols.setting.prefix]" @change="onChange(cols)"></text> |
| | | <input class="uni-input" :class="cols.disabled?'input-disabled':''" |
| | | :type="cols.name=='Input'?'text':cols.name=='InputNumber'?'number':'text'" |
| | | v-model="cols.value" :disabled="cols.disabled" |
| | | :placeholder="cols.placeholder" |
| | | :style="{'width':cols.setting.prefix && cols.setting.suffix?'78%':cols.setting.prefix || cols.setting.suffix?'87%':'96%'}" |
| | | :focus="focusMateria" @focus="ontap(cols)" @blur="onevent(cols)" /> |
| | | <text v-if="cols.setting.suffix" class="uni-icon" |
| | | :class="[cols.setting.suffix]" @click="onChange(cols)"></text> |
| | | </view> |
| | | <!-- 下拉框-单选 cols.useDict?cols.dict:cols.selections--> |
| | | <uni-data-select id="dv_select" v-if="cols.name=='Select' && !cols.disabled" |
| | | :class="cols.disabled?'input-disabled':''" v-model="cols.value" |
| | | :localdata="cols.dict" @change="onChange(cols)" :disabled="cols.disabled" |
| | | :clear="false"></uni-data-select> |
| | | <!-- 多行文本 --> |
| | | <view class="input-wrapper" v-if="cols.name=='Textarea' && !cols.disabled"> |
| | | <textarea class="uni-input" :value="cols.value" |
| | | :class="cols.disabled?'input-disabled':''" |
| | | :placeholder="cols.placeholder" @blur="onModelValue(cols)" |
| | | style="height:60px;" :style="{'width':'96%'}" |
| | | :disabled="cols.disabled"></textarea> |
| | | </view> |
| | | <!-- 复选框 --> |
| | | <checkbox-group class="check_rememberPwd" v-if="cols.name=='Checkbox'" |
| | | :class="cols.disabled?'input-disabled':''" :disabled="item.disabled" |
| | | @change="onModelValue(cols)" :data-ischeck="cols.value" |
| | | :style="{'margin-left':'10rpx'}"> |
| | | <label> |
| | | <checkbox :value="cols.value" :checked="cols.value" /> |
| | | <text>{{cols.label}}</text> |
| | | </label> |
| | | </checkbox-group> |
| | | <!-- Switch开关 --> |
| | | <switch v-if="cols.name=='Switch'" :class="cols.disabled?'input-disabled':''" |
| | | :disabled="item.disabled" v-model="cols.value" @change="onModelValue(cols)" |
| | | :style="{'margin-left':'10rpx'}" /> |
| | | <!-- 日期时间 --> |
| | | <view class="input-wrapper" |
| | | v-if="(cols.name=='TimePicker' || cols.name=='DatePicker') && !cols.disabled"> |
| | | <picker mode="date" class="date_iput" |
| | | :class="cols.disabled?'input-disabled':''" :disabled="item.disabled" |
| | | :value="cols.value" @change="onModelValue(cols)"> |
| | | <view class="picker">{{cols.value}}</view> |
| | | </picker> |
| | | </view> |
| | | |
| | | </view> |
| | | </uni-col> |
| | | </uni-row> |
| | | </div> |
| | | </div> |
| | | </div> |
| | | </view> |
| | | </view> |
| | | |
| | | <view class="view-floor" v-if="param.ViewPage.Page_Button"> |
| | | <!-- <button type="default" @click="cancel" class="btn_cancel" |
| | | :style="{'width':param.ViewPage.Page_Button.length>1?'39.5%':'48.5%'}">返回</button> --> |
| | | <button type="default" class="btn_refresh" v-for="(btn,index) in param.ViewPage.Page_Button" v-if="index<2" |
| | | @click="onBtnClick(btn)" |
| | | :style="{'width':param.ViewPage.Page_Button.length==1?'96%':param.ViewPage.Page_Button.length>2?'39.5%':'48%'}">{{btn.ShowName}}</button> |
| | | |
| | | <view class="uni-padding-wrap" v-if="param.ViewPage.Page_Button.length>2"> |
| | | <view class="uni-btn-v"> |
| | | <a @tap="actionSheetTap"> |
| | | <Icon class="mobox-normal-more" /> |
| | | </a> |
| | | </view> |
| | | </view> |
| | | </view> |
| | | </view> |
| | | </template> |
| | | |
| | | <script> |
| | | import Base64 from '../../components/js-base64/base64.js' |
| | | export default { |
| | | modules: { |
| | | Base64, |
| | | }, |
| | | onBackPress(e) { |
| | | // console.log("监听返回按钮事件",e); |
| | | var eventChannel = this.$scope.eventChannel; |
| | | // const eventChannel = this.getOpenerEventChannel(); |
| | | eventChannel.emit('ExitViewEvent', ""); |
| | | // uni.navigateBack({ |
| | | // delta:1 ,//返回层数,2则上上页 |
| | | // }); |
| | | // return true; |
| | | }, |
| | | data() { |
| | | return { |
| | | title: '新增', |
| | | param: {}, |
| | | styleDef: { |
| | | form: { |
| | | items: [] |
| | | } |
| | | }, |
| | | detail2_styledef: { |
| | | form: { |
| | | items: [] |
| | | }, |
| | | }, |
| | | // detail2StyleDefList:[], |
| | | //获取数据类的HTML页面 |
| | | ViewHtml_Panel: "", |
| | | ViewPageHtml_Show: { |
| | | name: "", |
| | | event: { |
| | | id: "", |
| | | name: "" |
| | | } |
| | | }, |
| | | }; |
| | | }, |
| | | async onLoad(options) { |
| | | // console.log(options); |
| | | uni.setNavigationBarTitle({ |
| | | title: options.titlename |
| | | }); //设置顶部标题 |
| | | this.$data.title = options.titlename; |
| | | this.$data.param = JSON.parse(options.param); |
| | | console.log(this.$data.param); |
| | | this.$data.styleDef = JSON.parse(options.style); |
| | | // console.log(this.$data.styleDef); |
| | | if (this.param.ViewPage.View_UIDef.ui_type == "HTML页面") { |
| | | // HTML页面 |
| | | //获取数据类的HTML页面 |
| | | this.Html_UIstyleGetInfo(this.param.DataCls.id, this.param.ViewPage.View_UIDef.id, 'viewPage'); |
| | | } else { |
| | | this.Detail2_UIstyleGetInfo(this.param.DataCls.id, this.param.ViewPage.View_UIDef.id); |
| | | } |
| | | |
| | | |
| | | //进入页面后事件 |
| | | var eventid = this.param.ViewPage.Enter_View_Event?.id; |
| | | if (eventid) { |
| | | try { |
| | | var obj_attr = { |
| | | 'S_ID': this.styleDef.form.objId |
| | | }; |
| | | this.styleDef.form.attrs.forEach((attr) => { |
| | | obj_attr[attr.name] = attr.value; |
| | | }); |
| | | // console.log(obj_attr); |
| | | var input_param = Base64.encode(JSON.stringify(obj_attr)); |
| | | this.runCustomEvent({ |
| | | ed_type: 0, |
| | | start_transaction: true, |
| | | class_id: this.param.DataCls.id, |
| | | event_id: eventid, |
| | | obj_attr, |
| | | input_param, |
| | | }); |
| | | } catch (ex) { |
| | | var tip = typeof ex == "string" ? ex : ex.message; |
| | | uni.showModal({ |
| | | title: "错误", |
| | | content: tip, |
| | | showCancel: false, |
| | | confirmText: "取消" |
| | | }); |
| | | } |
| | | } |
| | | }, |
| | | methods: { |
| | | async Detail2_UIstyleGetInfo(class_id, style_id) { //获取自定义表单样式 |
| | | var $this = this; |
| | | var dataInfo = { |
| | | class_id: class_id, |
| | | ui_style_id: style_id, |
| | | }; |
| | | this.$store.dispatch('UIStyleGetInfo', dataInfo).then(ret => { |
| | | // console.log(ret); |
| | | if (ret.err_code == 0) { |
| | | var styledef = ""; |
| | | if (ret.result.style_def) { |
| | | //mobox2的style_def是json字符串 |
| | | styledef = ret.result.style_def.replace(/\\/g, ""); |
| | | //mobox3的style_def是base64字符串 |
| | | if (!ret.result.style_def.includes('"')) styledef = Base64.decode(ret.result |
| | | .style_def); |
| | | } |
| | | $this.$data.detail2_styledef = ret.result.style_def ? JSON.parse(styledef) : {}; |
| | | $this.$data.detail2_styledef.SelBut_Checked = false; |
| | | // console.log($this.$data.detail2_styledef); |
| | | $this.styleDef.form.attrs.forEach((attr) => { |
| | | // info[attr.name]=attr.value; |
| | | $this.detail2_styledef.form.items.forEach(async (ele, index) => { |
| | | if (ele.name != 'Layout') { |
| | | if (ele.fieldId == attr.name) { |
| | | ele.value = attr.value; |
| | | } |
| | | } else if (ele.name == 'Layout') { |
| | | ele.setting.colList.forEach(async (col, key) => { |
| | | if (col) { |
| | | if (col.fieldId == attr.name) { |
| | | col.value = attr.value; |
| | | } |
| | | } |
| | | }); |
| | | } |
| | | }); |
| | | }); |
| | | setTimeout(function() { |
| | | var detail2_styledef = JSON.parse(JSON.stringify($this.detail2_styledef)); |
| | | $this.detail2_styledef = []; |
| | | $this.detail2_styledef = detail2_styledef; |
| | | }, 100); |
| | | } else { |
| | | uni.showModal({ |
| | | title: "错误1", |
| | | content: ret.err_msg, |
| | | showCancel: false, |
| | | confirmText: "取消" |
| | | }); |
| | | } |
| | | }).catch(ex => { |
| | | // console.log(ex); |
| | | uni.showModal({ |
| | | title: "错误1.1", |
| | | content: ex.errMsg, |
| | | showCancel: false, |
| | | confirmText: "取消" |
| | | }); |
| | | }); |
| | | |
| | | }, |
| | | async Html_UIstyleGetInfo(class_id, style_id) { //获取自定义表单样式 |
| | | var $this = this; |
| | | var dataInfo = { |
| | | class_id: class_id, |
| | | ui_style_id: style_id, |
| | | }; |
| | | this.$store.dispatch('UIStyleGetInfo', dataInfo).then(ret => { |
| | | // console.log(ret); |
| | | if (ret.err_code == 0) { |
| | | var styledef = ""; |
| | | if (ret.result.style_def) { |
| | | //mobox2的style_def是json字符串 |
| | | styledef = ret.result.style_def.replace(/\\/g, ""); |
| | | //mobox3的style_def是base64字符串 |
| | | if (!ret.result.style_def.includes('"')) styledef = Base64.decode(ret.result |
| | | .style_def); |
| | | } |
| | | $this.ViewPageHtml_Show = ret.result.style_def ? JSON.parse(styledef) : {}; |
| | | // console.log($this.ViewPageHtml_Show); |
| | | var obj_attr = {}; |
| | | $this.styleDef.form.attrs.forEach((attr) => { |
| | | obj_attr[attr.name] = attr.value; |
| | | }); |
| | | obj_attr['id'] = $this.styleDef.form.objId; |
| | | |
| | | var eventid = $this.ViewPageHtml_Show.event.id; |
| | | if (!$this.ViewPageHtml_Show.event.id.includes('{')) |
| | | eventid = '{' + $this.ViewPageHtml_Show.event.id + '}'; |
| | | //HTML页面事件 |
| | | $this.runCustomEvent({ |
| | | ed_type: 0, |
| | | start_transaction: true, |
| | | class_id: $this.param.DataCls.id, |
| | | event_id: eventid, |
| | | obj_attr, |
| | | }); |
| | | } else { |
| | | uni.showModal({ |
| | | title: "错误6", |
| | | content: ret.err_msg, |
| | | showCancel: false, |
| | | confirmText: "取消" |
| | | }); |
| | | } |
| | | }).catch(ex => { |
| | | // console.log(ex); |
| | | uni.showModal({ |
| | | title: "错误6.1", |
| | | content: ex.errMsg, |
| | | showCancel: false, |
| | | confirmText: "取消" |
| | | }); |
| | | }); |
| | | |
| | | }, |
| | | //查询数据类数据信息 |
| | | async dataObjQuery(clsid, where, index, key) { |
| | | try { |
| | | var $this = this; |
| | | var dataInfo = { |
| | | class_id: clsid, |
| | | attrs: [], |
| | | condition: this.toWhereBase64String("" + where + ""), |
| | | prj_rel_type: "", |
| | | order_by: this.orderby, |
| | | page_size: 99999, |
| | | page: 1, |
| | | query_id: '', |
| | | }; |
| | | this.$store.dispatch('dataObjQuery', dataInfo).then(ret => { |
| | | // console.log(ret); |
| | | if (ret.err_code == 0) { |
| | | if (ret.result) { |
| | | $this.detail1StyleDefList = []; |
| | | ret.result.obj_list.forEach((obj) => { |
| | | var info = { |
| | | S_ID: obj.id, |
| | | }; |
| | | obj.attr_list.forEach((attr) => { |
| | | info[attr.name] = attr.value; |
| | | }); |
| | | if (key != -1) |
| | | $this.detail2_styledef.form.items[index].setting.colList[key] |
| | | .value2 = info.S_NAME; |
| | | else |
| | | $this.detail2_styledef.form.items[index].value2 = info.S_NAME; |
| | | }); |
| | | // console.log($this.detail2_styledef); |
| | | } |
| | | } else { |
| | | uni.showModal({ |
| | | title: "错误5", |
| | | content: ret.err_msg, |
| | | showCancel: false, |
| | | confirmText: "取消" |
| | | }); |
| | | } |
| | | }).catch(ex => { |
| | | // console.log(ex); |
| | | uni.showModal({ |
| | | title: "错误5.1", |
| | | content: ex.errMsg, |
| | | showCancel: false, |
| | | confirmText: "取消" |
| | | }); |
| | | }); |
| | | } catch (ex) { |
| | | var tip = typeof ex == "string" ? ex : ex.message; |
| | | uni.showModal({ |
| | | title: "错误5.2", |
| | | content: tip, |
| | | showCancel: false, |
| | | confirmText: "取消" |
| | | }); |
| | | } |
| | | }, |
| | | |
| | | // 内容变化后事件 |
| | | async onChange(event) { |
| | | try { |
| | | if (event.id) { |
| | | var obj_attr = this.detail2_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.$data.detail2_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, |
| | | }; |
| | | this.$store.dispatch('runCustomEvent', dataInfo).then(ret => { |
| | | // console.log(ret); |
| | | if (ret.err_code == 0) { |
| | | var result = ret.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) uni.showModal({ |
| | | title: '提示', |
| | | content: tip, |
| | | showCancel: false, |
| | | confirmText: "取消" |
| | | }); |
| | | else uni.showModal({ |
| | | title: '提示', |
| | | content: tip + ',提示:' + result.ret, |
| | | showCancel: false, |
| | | confirmText: "取消" |
| | | }); |
| | | return false; |
| | | } else { |
| | | var tip = result.info ? typeof result.info == 'string' ? result.info : |
| | | result.info.join('<br/>') : ''; |
| | | if (tip) uni.showModal({ |
| | | title: '提示', |
| | | content: tip, |
| | | showCancel: false, |
| | | confirmText: "取消" |
| | | }); |
| | | |
| | | if (result.result_type == 0 && result.action) { |
| | | result.action.forEach(item => { |
| | | if (item.action_type == "set_dlg_attr") { |
| | | // value = {"attr":"xxx", "value":"xxx"} |
| | | var data = item.value; |
| | | $this.$data.detail2_styledef.form.items.forEach(async ( |
| | | ele, index) => { |
| | | data.forEach(async (ele2, index) => { |
| | | if (ele.fieldId == ele2 |
| | | .attr) { |
| | | ele.value = ele2 |
| | | .value; |
| | | } |
| | | }); |
| | | }); |
| | | } |
| | | }); |
| | | } else { |
| | | // this.detail2StyleDefList=[]; |
| | | if (result.info) { |
| | | uni.showModal({ |
| | | title: "提示", |
| | | content: result.info, |
| | | showCancel: false, |
| | | confirmText: "取消" |
| | | }); |
| | | } |
| | | } |
| | | } |
| | | |
| | | } else { |
| | | uni.showModal({ |
| | | title: "错误8", |
| | | content: ret.err_msg, |
| | | showCancel: false, |
| | | confirmText: "取消" |
| | | }); |
| | | } |
| | | }).catch(ex => { |
| | | // console.log(ex); |
| | | uni.showModal({ |
| | | title: "错误8.1", |
| | | content: ex.errMsg, |
| | | showCancel: false, |
| | | confirmText: "取消" |
| | | }); |
| | | }); |
| | | } |
| | | } catch (ex) { |
| | | var tip = typeof ex == "string" ? ex : ex.message; |
| | | uni.showModal({ |
| | | title: "错误8.2", |
| | | content: "执行“内容变化后”事件失败:" + tip, |
| | | showCancel: false, |
| | | confirmText: "取消" |
| | | }); |
| | | |
| | | } |
| | | }, |
| | | //点击按钮 |
| | | onBtnClick(btn) { |
| | | var that = this |
| | | if (btn.Prompt) { |
| | | uni.showModal({ |
| | | title: '提示', |
| | | content: btn.PromptContent || "是否确定?", |
| | | success: function(res) { |
| | | if (res.confirm) { |
| | | that.onButtonClicked(btn); |
| | | // } else if (res.cancel) { |
| | | // console.log('用户点击取消'); |
| | | } |
| | | } |
| | | }); |
| | | } else that.onButtonClicked(btn); |
| | | }, |
| | | //点击按钮列表 |
| | | actionSheetTap() { |
| | | var that = this |
| | | var itemlist = []; |
| | | this.param.ViewPage.Page_Button.forEach((btn, index) => { |
| | | if (index >= 2) |
| | | itemlist.push(btn.ShowName); |
| | | }); |
| | | uni.showActionSheet({ |
| | | // title: '按钮列表', |
| | | itemList: itemlist, |
| | | success: (e) => { |
| | | console.log(e.tapIndex); |
| | | var btn = that.param.ListPage.Page_Button[e.tapIndex]; |
| | | if (btn.Prompt) { |
| | | uni.showModal({ |
| | | title: '提示', |
| | | content: btn.PromptContent || "是否确定?", |
| | | success: function(res) { |
| | | if (res.confirm) { |
| | | that.onButtonClicked(btn); |
| | | // } else if (res.cancel) { |
| | | // console.log('用户点击取消'); |
| | | } |
| | | } |
| | | }); |
| | | } else that.onButtonClicked(btn); |
| | | } |
| | | }) |
| | | }, |
| | | //处理相关按钮 |
| | | async onButtonClicked(btn) { |
| | | var style = this.styleDef || ''; |
| | | try { |
| | | var enviroment = { |
| | | button: "top", |
| | | button_name: btn.ShowName, |
| | | cls_id: btn.Cls_ID, |
| | | function: "3200", |
| | | master: {}, |
| | | }; |
| | | if (btn.FunCode == "TriggerEvent") { |
| | | this.triggerEvent(btn, style, enviroment); |
| | | } else { |
| | | uni.showModal({ |
| | | title: "提示", |
| | | content: "未实现", |
| | | showCancel: false, |
| | | confirmText: "取消" |
| | | }); |
| | | } |
| | | } catch (ex) { |
| | | var tip = typeof ex == "string" ? ex : ex.message; |
| | | uni.showModal({ |
| | | title: "错误2", |
| | | content: tip, |
| | | showCancel: false, |
| | | confirmText: "取消" |
| | | }); |
| | | } |
| | | }, |
| | | //执行触发事件 |
| | | async triggerEvent(btn, style, enviroment) { |
| | | try { |
| | | var obj_attr = { |
| | | 'S_ID': this.styleDef.form.objId |
| | | }; |
| | | style.form.attrs.forEach((attr) => { |
| | | obj_attr[attr.name] = attr.value; |
| | | }); |
| | | // console.log(obj_attr); |
| | | // let input_param = Base64.encode(JSON.stringify(obj_attr)); |
| | | // return; |
| | | this.runCustomEvent({ |
| | | ed_type: 0, |
| | | start_transaction: true, |
| | | class_id: btn.Cls_ID, |
| | | event_id: btn.Event.ID, |
| | | obj_attr: obj_attr, |
| | | }); |
| | | } catch (ex) { |
| | | var tip = typeof ex == "string" ? ex : ex.message; |
| | | uni.showModal({ |
| | | title: "错误3", |
| | | content: tip, |
| | | showCancel: false, |
| | | confirmText: "取消" |
| | | }); |
| | | } |
| | | }, |
| | | //事件 |
| | | async runCustomEvent(dataInfo) { |
| | | try { |
| | | var $this = this; |
| | | this.$store.dispatch('runCustomEvent', dataInfo).then(ret => { |
| | | console.log(ret); |
| | | if (ret.err_code == 0) { |
| | | var result = ret.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) uni.showModal({ |
| | | title: '提示', |
| | | content: tip, |
| | | showCancel: false, |
| | | confirmText: "取消" |
| | | }); |
| | | else uni.showModal({ |
| | | title: '提示', |
| | | content: tip + ',提示:' + result.ret, |
| | | showCancel: false, |
| | | confirmText: "取消" |
| | | }); |
| | | return false; |
| | | } else { |
| | | var tip = result.info ? typeof result.info == 'string' ? result.info : result |
| | | .info.join('<br/>') : ''; |
| | | if (tip) uni.showModal({ |
| | | title: '提示', |
| | | content: tip, |
| | | showCancel: false, |
| | | confirmText: "取消" |
| | | }); |
| | | |
| | | if (result.result_type == 0 && result.action) { |
| | | result.action.forEach(item => { |
| | | if (item.action_type == "goback_to_pre_page") { //返回上一页 |
| | | var value = item.value; |
| | | // const eventChannel = this.$scope.eventChannel; |
| | | // // const eventChannel = this.getOpenerEventChannel(); |
| | | // eventChannel.emit('ExitViewEvent',""); |
| | | uni.navigateBack({ |
| | | delta: 1, //返回层数,2则上上页 |
| | | }); |
| | | } else if (item.action_type == "hidden_button") { //隐藏按钮 |
| | | var value = item.value; |
| | | value.forEach(btn => { |
| | | var index = $this.param.ViewPage.Page_Button |
| | | .findIndex(button => button.ShowName == |
| | | btn) |
| | | if (index > -1) |
| | | $this.param.ViewPage.Page_Button.splice( |
| | | index, 1) |
| | | }) |
| | | } else if (item.action_type == "set_panel_html") { //显示Html页面 |
| | | // var value = item.value; |
| | | $this.ViewHtml_Panel = item.value; |
| | | |
| | | } |
| | | |
| | | }); |
| | | } else { |
| | | var tip = result.info ? typeof result.info == 'string' ? result.info : |
| | | result.info.join('<br/>') : ''; |
| | | if (tip) uni.showModal({ |
| | | title: '提示', |
| | | content: tip, |
| | | showCancel: false, |
| | | confirmText: "取消" |
| | | }); |
| | | } |
| | | } |
| | | |
| | | } else { |
| | | uni.showModal({ |
| | | title: "错误4", |
| | | content: ret.err_msg, |
| | | showCancel: false, |
| | | confirmText: "取消" |
| | | }); |
| | | } |
| | | }).catch(ex => { |
| | | // console.log(ex); |
| | | uni.showModal({ |
| | | title: "错误4.1", |
| | | content: ex.errMsg, |
| | | showCancel: false, |
| | | confirmText: "取消" |
| | | }); |
| | | }); |
| | | } catch (ex) { |
| | | var tip = typeof ex == "string" ? ex : ex.message; |
| | | uni.showModal({ |
| | | title: "错误4.2", |
| | | content: "执行“内容变化后”事件失败:" + tip, |
| | | showCancel: false, |
| | | confirmText: "取消" |
| | | }); |
| | | |
| | | } |
| | | }, |
| | | |
| | | /** |
| | | * 只支持["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().toLowerCase() |
| | | if (where.startsWith('(') && where.endsWith(')')) where = where.replace(/^\(/, '').replace( |
| | | /\)$/, '') |
| | | if (where.includes(' and ')) { |
| | | // 二级and放在第一级数组中 |
| | | where.split(' and ').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.includes(seps[i])) { |
| | | sep = seps[i] |
| | | break |
| | | } |
| | | } |
| | | if (sep) { |
| | | var values = l.split(sep) |
| | | var field = values[0]?.trim().replace(/^\[/, '').replace(/\]$/, '') |
| | | var value = '' |
| | | var op = sep.trim() |
| | | |
| | | if ([' in', ' not in'].includes(sep) && values[1].includes('select ') && |
| | | values[1].includes(' from ')) { |
| | | value = l.replace(field, '').replace(/^\s*(in|not in)\s*/, '').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.includes(' or ')) { |
| | | // 二级or放在第二级同一组数组中 |
| | | var s = [] |
| | | where.split(' or ').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.includes(seps[i])) { |
| | | sep = seps[i] |
| | | break |
| | | } |
| | | } |
| | | if (sep) { |
| | | var values = l.split(sep) |
| | | var field = values[0]?.trim().replace(/^\[/, '').replace(/\]$/, '') |
| | | var value = '' |
| | | var op = sep.trim() |
| | | |
| | | if ([' in', ' not in'].includes(sep) && values[1].includes('select ') && |
| | | values[1].includes(' from ')) { |
| | | value = l.replace(field, '').replace(/^\s*(in|not in)\s*/, '').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.includes(seps[i])) { |
| | | sep = seps[i] |
| | | break |
| | | } |
| | | } |
| | | if (sep) { |
| | | var values = l.split(sep) |
| | | var field = values[0]?.trim().replace(/^\[/, '').replace(/\]$/, '') |
| | | var value = '' |
| | | var op = sep.trim() |
| | | |
| | | if ([' in', ' not in'].includes(sep) && values[1].includes('select ') && values[1] |
| | | .includes(' from ')) { |
| | | value = l.replace(field, '').replace(/^\s*(in|not in)\s*/, '').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 '' |
| | | }, |
| | | |
| | | cancel(e) { //取消 |
| | | var eventChannel = this.$scope.eventChannel; |
| | | // const eventChannel = this.getOpenerEventChannel(); |
| | | eventChannel.emit('ExitViewEvent', ""); |
| | | uni.navigateBack({ |
| | | delta: 1, //返回层数,2则上上页 |
| | | }); |
| | | }, |
| | | |
| | | |
| | | }, |
| | | }; |
| | | </script> |