<template>
|
<view class="uni-page-modal-3201">
|
<view class="dv_head">
|
<uni-section :title="title">
|
<view class="example"
|
:style="{'background-color':param.welcome_page.bkground_color,'height':(param.welcome_page.height+30)+'px'}">
|
<uni-transition ref="ani" custom-class="transition" :duration="duration" :mode-class="modeClass"
|
:styles="styles" :show="show">
|
<image :src="param.welcome_page.img"
|
:style="{'width':param.welcome_page.width+'px','height':param.welcome_page.height+'px'}">
|
</image>
|
</uni-transition>
|
</view>
|
</uni-section>
|
</view>
|
|
<view class="dv_content">
|
<view class="dv_panel" v-for="(item,index) in param.catalog"
|
:style="{'background-color':item.bkground_color}" @tap="onViewClick(item)">
|
<view class="panel_image_uploadlist">
|
<image :src="item.img"></image>
|
</view>
|
<view class="panel_title">
|
<p>{{item.title}}</p>
|
<span>{{item.taskQty}}</span>
|
</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,
|
|
} from "@/api/data.js"
|
import buttonClickMixin from '@/mixins/button-click.js';
|
|
export default {
|
mixins: [buttonClickMixin],
|
data() {
|
return {
|
title: '3201首页',
|
param: {},
|
show: true,
|
duration: 0,
|
modeClass: ['fade', 'slide-left'],
|
styles: {
|
justifyContent: 'center',
|
alignItems: 'center',
|
width: '100px',
|
height: '100px',
|
borderRadius: '5px',
|
textAlign: 'center',
|
backgroundColor: '#fff',
|
},
|
wheres: '',
|
orderby: '',
|
};
|
},
|
onReady() {
|
// console.log(1111);
|
// this.$refs.ani.init({
|
// duration: 1000, //过渡动画持续时间,单位ms
|
// timingFunction: 'linear',
|
// transformOrigin: '50% 50%',
|
// delay: 500 //动画延迟时间,单位 ms
|
// });
|
// this.$refs.ani.step({
|
// // translateX: '50px'
|
// },{
|
// duration: 1000, //过渡动画持续时间,单位ms
|
// timingFunction: 'linear',
|
// transformOrigin: '50% 50%',
|
// delay: 500 //动画延迟时间,单位 ms
|
// });
|
// // 开始执行动画
|
// this.$refs.ani.run(()=>{
|
// console.log('动画支持完毕')
|
// });
|
},
|
async onLoad(options) {
|
// console.log(options);
|
this.duration = 2000;
|
uni.setNavigationBarTitle({
|
title: options.titlename
|
}); //设置顶部标题
|
this.title = options.titlename;
|
this.param = JSON.parse(options.param);
|
console.log(this.param);
|
//加载初始界面
|
if (this.param.welcome_page) {
|
this.styles.width = this.param.welcome_page.width + 'px';
|
this.styles.height = this.param.welcome_page.height + 'px';
|
this.styles.backgroundColor = this.param.welcome_page.bkground_color;
|
|
this.param.welcome_page.img = this.param.welcome_page.img.replace(/ /g, '+');
|
this.param.welcome_page.width = parseInt(this.param.welcome_page.width);
|
this.param.welcome_page.height = parseInt(this.param.welcome_page.height);
|
this.param.catalog.forEach(async (ele, index) => {
|
ele.img = ele.img.replace(/ /g, '+');
|
ele.taskQty = 0;
|
await this.appGetInfo(ele.function_def_id, index);
|
});
|
}
|
|
},
|
methods: {
|
setData(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 appGetInfo(appid, index) {
|
try {
|
|
var $this = this;
|
var json = {
|
app_id: [appid]
|
};
|
const result = await appGetInfo(json)
|
if ((result || []).length > 0) {
|
var app = result[0];
|
var paramStr = app.param;
|
var appName = app.name;
|
var defCode = app.def_code;
|
var param = "";
|
if (paramStr) {
|
//mobox2的param是json字符串
|
param = paramStr.replace(/\\/g, "");
|
//mobox3的param是base64字符串
|
if (!paramStr.includes('"')) param = Base64.decode(paramStr);
|
}
|
if (!param) {
|
uni.showModal({
|
title: this.translateSys("tip"),
|
content: this.translateSys("quotation_mark_left") + defCode + this
|
.translateSys("quotation_mark_right") + this.translate(
|
"tip_no_app_param"),
|
showCancel: false,
|
confirmText: this.translateSys('close')
|
});
|
return;
|
}
|
this.param.catalog[index].param = param;
|
this.param.catalog[index].appName = appName;
|
param = JSON.parse(param);
|
|
$this.orderby = param.Order ? param.Order : 'T_CREATE Desc';
|
if (param.Query_Event) {
|
await $this.onSearChange(param.DataCls.id, param.Query_Event.id, index);
|
} else {
|
$this.wheres = param.Condition;
|
await $this.loadDataGetList(param.DataCls.id, index);
|
}
|
} else {
|
uni.showModal({
|
title: this.translateSys("tip"),
|
content: this.translate("function_not_exist"),
|
showCancel: false,
|
confirmText: this.translateSys('close')
|
});
|
}
|
} catch (ex) {
|
console.log(ex);
|
let exStr = JSON.stringify(ex)
|
if (exStr == "{}")
|
exStr = ex
|
let tip = typeof ex.errMsg == "string" ? ex.errMsg : exStr
|
uni.showModal({
|
title: this.translateSys("error"),
|
content: tip,
|
showCancel: false,
|
confirmText: this.translateSys('close')
|
});
|
return undefined
|
}
|
|
},
|
// 执行查询事件
|
async onSearChange(clsid, eventid, index) {
|
try {
|
if (eventid) {
|
var $this = this;
|
var dataInfo = {
|
ed_type: 0,
|
start_transaction: true,
|
class_id: clsid,
|
event_id: eventid,
|
};
|
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) 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
|
.orderby;
|
$this.loadDataGetList(clsid, index);
|
}
|
|
});
|
} else {
|
// this.detail2StyleDefList=[];
|
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") + "1.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") + "1.2",
|
content: this.translate("execute_query_event_failed") + this.translateSys("comma") +
|
tip,
|
showCancel: false,
|
confirmText: this.translateSys('close')
|
});
|
|
}
|
},
|
//查询数据类数据信息
|
async loadDataGetList(clsid, index) {
|
try {
|
//条件查询
|
var condition = this.wheres;
|
// console.log(condition);
|
// console.log(this.orderby);
|
var $this = this;
|
var dataInfo = {
|
class_id: clsid,
|
attrs: [],
|
condition: this.toWhereBase64String("" + condition + ""),
|
prj_rel_type: "",
|
order_by: this.orderby,
|
page_size: 99999,
|
page: 1,
|
query_id: '',
|
};
|
dataObjQuery(dataInfo).then(result => {
|
// console.log(result);
|
if (result) {
|
$this.param.catalog[index].taskQty = result.obj_list.length;
|
// console.log($this.param.catalog[index]);
|
var catalog = JSON.parse(JSON.stringify($this.param.catalog));
|
$this.param.catalog = [];
|
$this.param.catalog = catalog;
|
}
|
|
}).catch(ex => {
|
// console.log(ex);
|
uni.showModal({
|
title: this.translateSys("error") + "2.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") + "2.2",
|
content: tip,
|
showCancel: false,
|
confirmText: this.translateSys('close')
|
});
|
}
|
},
|
|
//点击条目打开3200
|
onViewClick(data) {
|
if (!data.function_def_id) {
|
uni.showModal({
|
title: this.translateSys("tip"),
|
content: this.translate("not_associated_function_point"),
|
showCancel: false,
|
confirmText: this.translateSys('close')
|
});
|
return;
|
}
|
var $this = this;
|
uni.navigateTo({
|
url: '../modal/3200?param=' + data.param + "&titlename=" + data.appName,
|
events: {
|
// 为指定事件添加一个监听器,获取被打开页面传送到当前页面的数据
|
view_3201: function(data) {
|
console.log(data);
|
//刷新当前页面
|
// location.reload();
|
// uni.redirectTo({
|
// url:'../modal/3201?param='+JSON.stringify($this.param)+"&titlename="+$this.title
|
// });
|
$this.param.catalog.forEach(async (ele, index) => {
|
ele.taskQty = 0;
|
await $this.appGetInfo(ele.function_def_id, index);
|
});
|
}
|
},
|
});
|
},
|
|
|
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-3201 {
|
|
|
.example {
|
display: flex;
|
justify-content: center;
|
align-items: center;
|
height: 150px;
|
// background-color: #efefef;
|
}
|
|
.transition-button {
|
width: 100%;
|
flex: 1;
|
margin-bottom: 10px;
|
}
|
|
.example ::v-deep .transition {
|
display: flex;
|
justify-content: center;
|
align-items: center;
|
width: 100px;
|
height: 100px;
|
border-radius: 5px;
|
text-align: center;
|
// background-color: #4cd964;
|
// box-shadow: 0 0 5px 1px rgba(0, 0, 0, 0.2);
|
}
|
|
.text {
|
font-size: 14px;
|
color: #fff;
|
}
|
|
.content {
|
min-height: 100vh;
|
background-color: #efefef;
|
padding: 1rpx 0rpx;
|
}
|
|
.dv_head {
|
background-color: #efefef;
|
}
|
|
.head_title {
|
text-align: center;
|
font-size: 19px;
|
font-weight: bold;
|
}
|
|
.uni-section .uni-section-header {
|
display: none !important;
|
}
|
|
.dv_content {
|
margin: 30rpx;
|
padding: 10rpx;
|
border-radius: 12rpx;
|
}
|
|
.dv_panel {
|
background-color: #fff;
|
padding: 20rpx;
|
margin-top: 20rpx;
|
border-radius: 12rpx;
|
/* box-shadow: 2rpx 2rpx 2rpx rgba(0, 0, 0, 0.3); */
|
}
|
|
.dv_panel:first-child {
|
margin: 0;
|
}
|
|
.panel_image_uploadlist {
|
display: inline-block;
|
/* padding: 30rpx 0px 10rpx 0px; */
|
vertical-align: middle;
|
width: 200rpx;
|
height: 200rpx;
|
text-align: center;
|
line-height: 100%;
|
border: 2rpx solid transparent;
|
border-radius: 8rpx;
|
overflow: hidden;
|
background: #fff;
|
position: relative;
|
/* box-shadow: 0 2rpx 2rpx rgba(0, 0, 0, 0.2);
|
margin-right: 8rpx; */
|
}
|
|
.panel_image_uploadlist image {
|
width: 100%;
|
height: 100%;
|
}
|
|
.panel_title {
|
display: inline-block;
|
padding-left: 30rpx;
|
vertical-align: middle;
|
}
|
|
.panel_title p {
|
font-size: 19px;
|
font-weight: bold;
|
}
|
|
.panel_title span {
|
font-size: 14px;
|
}
|
}
|
</style>
|