Commit 7be0fed3 authored by 何虹's avatar 何虹 💬

重构ui库,本次重构不兼容以前版本

parent 06cfbc6f
......@@ -20,12 +20,18 @@
"babel-preset-es2015": "^6.24.1",
"core-js": "^3.6.4",
"echarts": "^4.7.0",
"element-ui": "^2.13.1",
"hswebapp2frame": "^1.1.7",
"element-ui": "^2.14.1",
"file-saver": "^2.0.5",
"jsoneditor": "^8.6.5",
"less-loader": "^7.1.0",
"lodash": "^4.17.15",
"mathjs": "^8.1.0",
"moment": "^2.24.0",
"vue": "^2.6.11"
"script-loader": "^0.7.2",
"sortablejs": "^1.12.0",
"vue": "^2.6.11",
"vue-video-player": "^5.0.2",
"xlsx": "^0.16.9"
},
"devDependencies": {
"@vue/cli-plugin-babel": "~4.3.0",
......@@ -40,6 +46,7 @@
"eslint-plugin-promise": "^4.2.1",
"eslint-plugin-standard": "^4.0.0",
"eslint-plugin-vue": "^6.2.2",
"less": "^3.12.2",
"vue-template-compiler": "^2.6.11"
}
}
<template>
<div id="app">
<img
alt="Vue logo"
src='./assets/logo.png'
>
<HelloWorld msg="Welcome to Your Vue.js App" />
</div>
</template>
......
<template>
<div style="width:500px">
<hsFile
v-model="value"
:allSourceData='allSourceData'
:uploadFileFun='uploadFileFun_'
>
</hsFile>
<div>{{value}}</div>
</div>
</template>
<script>
import apiUc from "./apiUc";
export default {
mixins: [apiUc],
data() {
return {
value: "",
formData: {
test_p: ""
},
allSourceData: {
config: {
appCode: "PBOrg",
multiple: true,
label: "附件",
accept: ".xls,.doc,.txt,.pdf,.jpg",
uploaded: v => {
console.log(v, "sadas");
console.log(this.value);
}
},
sourceData: []
}
};
},
mounted() {},
methods: {
uploadFileFun_(formData) {
return this.uploadFileFun("PBOrg", formData);
},
printResult() {
console.log(this.formData);
}
}
};
</script>
<style scoped>
.codeTxt {
text-align: left;
}
</style>
\ No newline at end of file
<template>
<div>
<hs-table
maxHeight='500px'
<hs-input
v-model="formData.username"
:elInfo="elInfo"
:allSourceData='allSourceData'
></hs-table>
></hs-input>
</div>
</template>
<script>
import apiUc from "./apiUc";
import request from "../packages/funTools/requestConfigComponent";
export default {
mixins: [apiUc],
data() {
return {
formData: {
username: 123
},
elInfo: {
position: "tt",
el: "hsTable",
page: "A",
sAppCode: "tyCode"
position: 'inputabc',
el: 'hsInput'
},
allSourceData: {
config: {
highlightCurrentRow: false,
hover: { hoverBackground: "", leaveBackground: "" },
hover: { hoverBackground: '', leaveBackground: '' },
showIndex: false, // 是否显示 序号
hsConfig: {
default_type: 1 // mes风格
......@@ -35,69 +32,69 @@ export default {
toolItems: [
// 工具栏
{
label: "测试2",
icon: "",
type: "text",
label: '测试2',
icon: '',
type: 'text',
isHide: false, // 是否隐藏
disabled: false, // 是否禁用
click: () => {
alert("测试2");
alert('测试2')
}
}
],
handleColumns: [
// 操作栏
{
label: "测试1",
icon: "",
label: '测试1',
icon: '',
isHide: false, // 是否隐藏
type: "text",
type: 'text',
disabled: false, // 是否禁用
click: () => {
alert("测试");
alert('测试')
}
},
{
label: "测试2",
icon: "",
label: '测试2',
icon: '',
isHide: false, // 是否隐藏
type: "text",
type: 'text',
disabled: false, // 是否禁用
click: () => {
this.allSourceData.sourceData.push({});
this.allSourceData.sourceData.push({})
}
}
],
columnsConfig: [
// 列信息
{
prop: "order_size", //对应后端的字段
label: "型号", // 列名
prop: 'order_size', //对应后端的字段
label: '型号', // 列名
showOverflowTooltip: true, // 超出时 显示省略
showType: "hsSelectPlus", // 列类型
showType: 'hsSelectPlus', // 列类型
allSourceData: {
// 参照配置
config: {
url: "",
url: '',
isInnerRequest: true, // 是否在内部请求
proxyTag: "commonUtilAPI", // 代理前缀
proxyTag: 'commonUtilAPI', // 代理前缀
ref: {
const_id: "0", // 常量值
table_name: "im_store_group", // 表名
columns: "id,name", //列名
remote_condition: "", // 是否远程搜索
displayfield: "", // 显示默认值
const_id: '0', // 常量值
table_name: 'im_store_group', // 表名
columns: 'id,name', //列名
remote_condition: '', // 是否远程搜索
displayfield: '', // 显示默认值
writebackfield: [] //回写字段
},
dyncQueryParms: {}, // 查询参数
multiple: false, // 是否多选
disabled: false,
size: "mini",
size: 'mini',
clearable: true,
title: "",
placeholder: "请选择",
value: "id", // 对应的后端字段
label: "name", // 对应的后端字段
title: '',
placeholder: '请选择',
value: 'id', // 对应的后端字段
label: 'name', // 对应的后端字段
is_computed: false // 是否是计算属性
},
sourceData: []
......@@ -105,26 +102,25 @@ export default {
requestMethod: this.requestMethod // 参照请求方法
},
{
prop: "style_code",
label: "款号",
prop: 'style_code',
label: '款号',
showOverflowTooltip: true,
showType: "input" // 普通输入框
showType: 'input' // 普通输入框
},
{
prop: "customer_name",
label: "客户",
prop: 'customer_name',
label: '客户',
showOverflowTooltip: true,
showType: "text" // 文本
showType: 'text' // 文本
}
]
},
sourceData: [] //表格数据
}
};
}
},
mounted() {
this.init();
this.getTableConfig();
this.init()
},
methods: {
async getTableConfig() {
......@@ -134,10 +130,10 @@ export default {
sAppCode: this.elInfo.sAppCode,
sPage: this.elInfo.page,
return_type: 1
};
const res = await request.getPageInfo(data);
}
const res = await request.getPageInfo(data)
if (res.length) {
this.allSourceData.config = JSON.parse(res[0].json_config);
this.allSourceData.config = JSON.parse(res[0].json_config)
}
},
init() {
......@@ -145,17 +141,17 @@ export default {
{
customer_name: 1,
style_code: 2,
order_size: "0",
_styleRowSetting_: { color: "blue", background: "red" }
order_size: '0',
_styleRowSetting_: { color: 'blue', background: 'red' }
},
{
customer_name: 1,
style_code: 2,
order_size: "0",
_styleRowSetting_: { color: "blue", background: "blue" }
order_size: '0',
_styleRowSetting_: { color: 'blue', background: 'blue' }
}
];
]
}
}
};
}
</script>
\ No newline at end of file
import axios from 'axios'
import _ from 'lodash'
export default {
data () {
return {
config: {
'url': '',
'ref': {
const_id: '0',
table_name: '',
columns: '',
remote_condition: '',
displayfield: '',
writebackfield: []
},
dyncQueryParms: {},
multiple: false,
disabled: false,
size: 'mini',
clearable: true,
title: '',
placeholder: '',
value: '',
label: '',
is_computed: false
}
}
},
methods: {
async requestMethod (config, value) {
const { ref, dyncQueryParms } = config || {}
const { remote_condition } = ref || {}
let real_url = this.initRealUrl(config)
if (!real_url) return []
let remote_condition_ = remote_condition.trim()
let parms = ''
const dyncQueryParms_ = _.cloneDeep(dyncQueryParms || {})
if (value) {
dyncQueryParms_[remote_condition_] = value.trim()
}
for (const key in dyncQueryParms_) {
if (key === remote_condition) {
parms += `&${key}=${encodeURIComponent('%' + dyncQueryParms_[key] + '%')}`
} else {
parms += `&${key}=${encodeURIComponent(dyncQueryParms_[key])}`
}
}
if (real_url.includes('?')) {
real_url += parms
} else {
real_url += '?' + parms
}
const type = typeof value
if (type === 'undefined' && remote_condition_) {// 远程搜索的时候
return []
} else {
const res = await axios.get(real_url)
const options = Array.isArray(res.data)
? this.tansLate(res.data, config)
: this.translate_json(res.data)
return options
}
},
tansLate (data, config) {
const arr = data
const list = []
const { value, label } = config
arr.forEach(element => {
const parm = {}
for (const pro in element) {
if (pro === value && value === label) {
parm.value = element[pro]
parm.label = element[pro]
} else if (pro === value) {
parm.value = element[pro]
} else if (pro === label) {
parm.label = element[label]
}
parm[pro] = element[pro]
}
list.push(parm)
})
return list
},
initRealUrl (config) {
const { url, ref, proxyTag } = config
const { const_id, table_name, columns, remote_condition } = ref
const url_dynamic = `${proxyTag}/ref/table`
const url_static = `${proxyTag}/ref/items`
if (remote_condition) {
if (table_name) {
return `${url_dynamic}/${table_name}/${columns}/`
} else {
return `${url}`
}
} else {
if (const_id && Number(const_id) !== 0) {
return `${url_static}/${const_id}/`
} else if (table_name) {
return `${url_dynamic}/${table_name}/${columns}/`
} else {
return url
}
}
},
uploadFileFun(appCode,formData) {
return axios.post(`fileresourceAPI/file/${appCode}/`, formData)
}
},
}
<template>
<div>
<hsTable
maxHeight='500px'
:allSourceData='allSourceData'
></hsTable>
</div>
</template>
<script>
import apiUc from "./apiUc";
export default {
mixins: [apiUc],
data() {
return {
allSourceData: {
config: {},
sourceData: []
}
};
},
mounted() {
this.init();
},
methods: {
init() {
this.allSourceData.config = {
showIndex: false, // 是否显示 序号
hsConfig: {
default_type: 1 // mes风格
},
showHandle: true, // 是否显示操作栏
selection: true, // 是否显示复选框
handleWidth: 180, // 操作栏宽度
isAdaptive: true, // 宽度自适应
toolItems: [
// 工具栏
{
label: "测试2",
icon: "",
type: "text",
isHide: false, // 是否隐藏
disabled: false, // 是否禁用
click: () => {
alert("测试2");
}
}
],
handleColumns: [
// 操作栏
{
label: "测试1",
icon: "",
isHide: false, // 是否隐藏
type: "text",
disabled: false, // 是否禁用
click: () => {
alert("测试");
}
},
{
label: "测试2",
icon: "",
isHide: false, // 是否隐藏
type: "text",
disabled: false, // 是否禁用
click: () => {
this.allSourceData.sourceData.push({});
}
}
],
columnsConfig: [
// 列信息
{
prop: "order_size", //对应后端的字段
label: "型号", // 列名
showOverflowTooltip: true, // 超出时 显示省略
showType: "hsSelectPlus", // 列类型
allSourceData: {
// 参照配置
config: {
url: "",
isInnerRequest: true, // 是否在内部请求
proxyTag: "commonUtilAPI", // 代理前缀
ref: {
const_id: "0", // 常量值
table_name: "im_store_group", // 表名
columns: "id,name", //列名
remote_condition: "", // 是否远程搜索
displayfield: "", // 显示默认值
writebackfield: [] //回写字段
},
dyncQueryParms: {}, // 查询参数
multiple: false, // 是否多选
disabled: false,
size: "mini",
clearable: true,
title: "",
placeholder: "请选择",
value: "id", // 对应的后端字段
label: "name", // 对应的后端字段
is_computed: false // 是否是计算属性
},
sourceData: []
},
requestMethod: this.requestMethod // 参照请求方法
},
{
prop: "style_code",
label: "款号",
showOverflowTooltip: true,
showType: "input" // 普通输入框
},
{
prop: "customer_name",
label: "客户",
showOverflowTooltip: true,
showType: "text" // 文本
}
]
};
this.allSourceData.sourceData = [
{ customer_name: 1, style_code: 2, order_size: "0" }
];
}
}
};
</script>
\ No newline at end of file
......@@ -70,6 +70,11 @@
<el-input clearable v-model="scope.row.width" size='mini' placeholder="173"></el-input>
</template>
</el-table-column>
<el-table-column prop="width" label="控件高" width='120'>
<template slot-scope="scope">
<el-input clearable v-model="scope.row.height" size='mini'></el-input>
</template>
</el-table-column>
<el-table-column prop="rowspan" label="跨行" v-if='controlType!=="queryArea"' width='80'>
<template slot-scope="scope">
<el-input clearable v-model="scope.row.rowspan" size='mini'></el-input>
......@@ -92,7 +97,7 @@
</template>
</el-table-column>
<el-table-column prop='isHide' label='隐藏控件' width='100'>
<template slot-scope="scope">
<template slot-scope="scope" v-if='showColumn(scope.row.isHide)'>
<el-switch v-model="scope.row.isHide">
</el-switch>
</template>
......@@ -110,8 +115,8 @@
</template>
</el-table-column>
<el-table-column prop='isDisabled' label='只读' width='70'>
<template slot-scope="scope">
<el-switch v-model="scope.row.isDisabled">
<template slot-scope="scope" v-if='showColumn(scope.row.isDisabled)'>
<el-switch v-model="scope.row.isDisabled">
</el-switch>
</template>
</el-table-column>
......@@ -181,6 +186,11 @@ export default {
label: '1-1配置输入框',
isRequireControlName: true
},
{
value: 'hsInputNumber',
label: '1-2数字输入',
isRequireControlName: true
},
{
value: 'textarea',
label: '2多行文本框'
......@@ -203,17 +213,89 @@ export default {
label: '6日期'
},
{
value: 'elSwitch',
label: '7开关'
value: 'elDatePickerMonth',
label: '7月份'
},
{
value: 'elDatePickerMonthRange',
label: '8月份范围'
},
{
value: 'hsSwitch',
label: '9开关',
isRequireControlName: true
},
{
value: 'hsFile',
label: '8附件',
label: '10附件',
isRequireControlName: true
},
{
value: 'hsComputed',
label: '9计算文本',
label: '11计算文本',
isRequireControlName: true
},
{
value: 'hsImg',
label: '12图片',
isRequireControlName: true
},
{
value: 'hsLookup',
label: '13lookup',
isRequireControlName: true
},
{
value: 'hsCheckboxGroup',
label: '14复选组',
isRequireControlName: true
},
{
value: 'hsCheckbox',
label: '15单选',
isRequireControlName: true
},
{
value: 'hsDatePicker',
label: '16可配置日期选择器',
isRequireControlName: true
},
{
value: 'hsPopoverTextarea',
label: '17多行文本弹出',
isRequireControlName: true
},
{
value: 'hsRadio',
label: '18可配置单选',
isRequireControlName: true
},
{
value: 'hsTabs',
label: '19标签页',
isRequireControlName: true
},
{
value: 'hsDateTimePicker',
label: '20时间范围选择器',
isRequireControlName: true
},
{
value: 'hsTagsSelect',
label: '21tags-select',
isRequireControlName: true
},
{
value: 'hsSelectList',
label: '22select-list',
isRequireControlName: true
}, {
value: 'hsStatusGroup',
label: '23hs-status-group',
isRequireControlName: true
}, {
value: 'hsRate',
label: '24hs-rate',
isRequireControlName: true
}
],
......@@ -245,6 +327,13 @@ export default {
},
methods: {
showColumn(prop) {
if (typeof prop === 'string') {
return false
} else {
return true
}
},
openDialog() {
// this.initConfig(this.asyncFormColumns)
},
......@@ -335,6 +424,7 @@ export default {
this.asyncFormColumns.splice(index + 1, 0, _.cloneDeep(this.emptyRow))
},
deletAsyncProp(index) {
// 删除控件
this.asyncFormColumns.splice(index, 1)
},
upGoAsync(index) {
......@@ -348,7 +438,7 @@ export default {
for (const index in this.asyncFormColumns) {
const item = this.asyncFormColumns[index]
const index_number = parseInt(index)
if (!item.width) {
if (item.width === undefined) {
item.width = 170
}
if (!item.labelWidth) {
......
<template>
<div
:id='elId'
class="common"
>
<slot></slot>
<hs-jsoneditor
v-model='jsoneditorVisible'
:elInfo='elInfo'
v-bind="$attrs"
v-on="$listeners"
></hs-jsoneditor>
<!-- <jsoneditor
v-model='jsoneditorVisible'
:elInfo='elInfo'
v-bind="$attrs"
v-on="$listeners"
>
</jsoneditor> -->
</div>
</template>
<script>
import commonboxUc from './commonboxUc.js'
export default {
mixins: [commonboxUc],
props: {
elInfo: {}
},
name: 'common-component'
}
</script>
<style scoped>
.common {
width: 100%;
height: 100%;
}
</style>
\ No newline at end of file
import uuidv1 from 'uuid/v1'
export default {
data() {
return {
elId: '',
outBoxDom: null,
jsoneditorVisible: false
}
},
created() {
this.initElid()
},
mounted() {
this.initElid()
setTimeout(() => {
this.showEditJsonDialog()
}, 2000)
},
destroyed() {
if (this.outBoxDom) {
this.outBoxDom.removeEventListener('mousedown', this.boxEventMouse)
this.outBoxDom = null
}
this.chart = null
},
beforeDestroy() {
clearInterval(this.timer)// 清除定时器
this.timer = null
if (this.chart) {
this.chart.clear()
this.chart.dispose()
this.chart = null
}
},
methods: {
initElid() {
if (!this.elId) {
this.elId = uuidv1() // 获取随机id
}
},
boxEventMouse(event) {
const that = this
event.stopPropagation()
if (event.shiftKey && event.altKey && !event.ctrlKey) {
that.jsoneditorVisible = true
}
},
// 弹出可编辑的弹框
showEditJsonDialog() {
this.outBoxDom = document.getElementById(this.elId)
this.outBoxDom && this.outBoxDom.addEventListener('mousedown', this.boxEventMouse)
}
}
}
......@@ -85,6 +85,7 @@ export default {
async dataImport(data, config, main) {
if (!config) return
const type = this.entityManger.type // 实体类型
const restful_appcode = this.entityManger.config.restful_appcode
if (type === 'mainDtl') { // 详情的导入
this.dtlImport(data, config, main)
} else { // 列表上的导入
......@@ -106,6 +107,7 @@ export default {
type: 'import'
}
const parms_ = {
appCode: restful_appcode,
table_name: url_table_name,
import_name: import_name,
queryParms: queryParms
......@@ -121,6 +123,7 @@ export default {
if (!config) return
const mainEntity = this.entityManger.mainEntity
const config_ = mainEntity.config
const restful_appcode = mainEntity.restful_appcode
const primaryKey = config_.primaryKey
const mainData = mainEntity.data
if (mainData) {
......@@ -147,6 +150,7 @@ export default {
}
queryParms.bill_id = mainData[primaryKey]
const parms_ = {
appCode: restful_appcode,
table_name: url_table_name,
import_name: import_name,
queryParms: queryParms
......
<template>
<el-dialog
:visible.sync="dialogVisible"
width="80%"
title='字段设置'
:append-to-body='true'
class="innerDialogBox"
:close-on-click-modal='false'>
<div class="toopBox1">
<el-button-group >
<el-button @click="addPropViSayncTop()" size='mini' type="primary" icon="el-icon-plus"></el-button>
<el-button @click='deleteAll' size='mini' type="primary" icon="el-icon-delete"></el-button>
<el-button @click='upStupe' size='mini' type="primary" icon="el-icon-arrow-left">上移</el-button>
<el-button @click='downStupe' size='mini' type="primary">下移<i class="el-icon-arrow-right el-icon--right"></i></el-button>
</el-button-group>
</div>
<el-table
border
height='520px'
:data='tableData'
ref='multipleTableColumn'
>
<el-table-column type="selection" fixed="left"></el-table-column>
<el-table-column type="index" fixed="left"></el-table-column>
<el-table-column prop="label" label="标题" fixed="left">
<template slot-scope="scope">
<el-input clearable v-model="scope.row.label" size='mini'></el-input>
</template>
</el-table-column>
<!-- <el-table-column prop="type" label="类型">
<template slot-scope="scope">
<el-select v-model="scope.row.type" size='mini' clearable>
<el-option v-for="(option,index) in typeOptions"
:key="index"
:value='option.value'
:label='option.label'
>
</el-option>
</el-select>
</template>
</el-table-column> -->
<el-table-column label="操作" width='300' fixed="right">
<template slot-scope="scope">
<el-button size='mini' @click='addAsyncColumn(scope.$index)'>新增</el-button>
<el-button size='mini' @click="deletAsyncProp(scope.$index)">删除</el-button>
<el-button size='mini' @click="upGoAsync(scope.$index)">上移</el-button>
<el-button size='mini' @click="downGoAsync(scope.$index)">下移</el-button>
</template>
</el-table-column>
</el-table>
<div slot="footer" class="dialog-footer">
<el-button size='medium' type="primary" @click="tableDataubmit">确 定</el-button>
<el-button size='mini' type="info" @click="dialogVisible = false">取 消</el-button>
</div>
<div v-if="privewComVi" class="asyncBox">
<hsDyncForm
:type='controlType'
:formColumns='formColumns_'
:formParms='formParms'
:config='asyncFormItemComponentTableConfig'
></hsDyncForm>
</div>
</el-dialog>
</template>
<script>
import _ from 'lodash'
import uuidv1 from 'uuid/v1'
export default {
name: 'hsTabsFormSet',
props: {
allSourceData: {
},
value: Boolean,
controlType: {},
elInfo: {}
},
data() {
return {
dialogVisible: false,
typeOptions: [
{
value: 'hsDyncFormComponent',
label: '1编辑表单',
isRequireControlName: true
}
],
formColumns_: [],
formParms: {},
privewComVi: false,
asyncFormItemComponentTableConfig: {
isHideBorder: true
},
emptyRow: {
'type': 'hsDyncFormComponent',
'label': '标签1'
},
tableDataCopy: []
}
},
computed: {
tableData: function() {
const list = this.allSourceData.config.tabsList || []
return list
}
},
watch: {
value(val) {
this.dialogVisible = val
},
dialogVisible(val) {
this.$emit('input', val)
}
},
mounted() {
},
methods: {
initConfig(data = []) {
for (const index in data) {
const item = this.tableData[index]
if (!item.uuidv1) {
item.uuidv1 = uuidv1()
}
}
this.tableDataCopy = _.cloneDeep(data)
},
addPropViSayncTop() {
const list = [_.cloneDeep(this.emptyRow)]
this.tableData.push(..._.cloneDeep(list))
this.$nextTick(() => {
const multipleTableColumn = this.$refs.multipleTableColumn
multipleTableColumn.bodyWrapper.scrollTop = multipleTableColumn.bodyWrapper.scrollHeight
})
},
cleanAll() {
this.tableData.splice(0, this.tableData.length)
},
addEmptyOne() {
this.tableData.push(_.cloneDeep(this.emptyRow))
},
privewCom() {
this.privewComVi = true
const tableData = _.cloneDeep(this.tableData)
this.formColumns_ = tableData
},
addRow() {
this.tableData.push({})
},
deleteAll() {
const selectedProp = this.$refs.multipleTableColumn.selection.map(item => {
return item.prop
})
const list = this.tableData.filter(item => !selectedProp.includes(item.prop))
this.tableData.splice(0, this.tableData.length)
this.tableData.push(...list)
},
upStupe() {
const selected = this.$refs.multipleTableColumn.selection
const selectedIndexList = selected.map((item, index) => {
return item.prop
})
const indexList = []
selectedIndexList.forEach(prop => {
const index_ = this.tableData.findIndex(item => item.prop === prop)
indexList.push(index_)
})
indexList.sort((a, b) => {
return a - b
})
indexList.forEach((k, index) => {
if (index !== 0 && indexList.includes(0)) {
this.upSite(this.tableData, k - 1)
} else {
this.upSite(this.tableData, k)
}
})
},
downStupe() {
const selected = this.$refs.multipleTableColumn.selection
const selectedIndexList = selected.map((item, index) => {
return item.prop
})
const indexList = []
selectedIndexList.forEach(prop => {
const index_ = this.tableData.findIndex(item => item.prop === prop)
indexList.push(index_)
})
indexList.sort((a, b) => {
return b - a
})
indexList.forEach((k, index) => {
if (index !== 0 && indexList.includes(this.tableData.length - 1)) {
this.downSite(this.tableData, k + 1)
} else {
this.downSite(this.tableData, k)
}
})
},
addAsyncColumn(index) {
this.tableData.splice(index + 1, 0, _.cloneDeep(this.emptyRow))
},
deletAsyncProp(index) {
// 删除控件
this.tableData.splice(index, 1)
},
upGoAsync(index) {
this.upSite(this.tableData, index)
},
downGoAsync(index) {
this.downSite(this.tableData, index)
},
tableDataubmit() {
for (const item of this.tableData) {
if (!item.control_name) {
item.control_name = uuidv1()
}
}
this.$emit('submit', this.allSourceData)
},
addOldProp() {
const olist = this.tableDataCopy.filter(item => item.type.startsWith('hs'))
const newlist = this.tableData.filter(item => item.uuidv1 && item.type.startsWith('hs'))
newlist.forEach(item => {
const otarget = olist.find(oitem => item.uuidv1 === oitem.uuidv1)
if (otarget && otarget.prop !== item.prop) {
item.old_control_name = otarget.prop
} else if (otarget && otarget.prop === item.prop) {
delete item.old_control_name
}
})
},
downSite(fieldData, index) {
if (index !== fieldData.length - 1) {
fieldData[index] = fieldData.splice(index + 1, 1, fieldData[index])[0]
} else {
fieldData.unshift(fieldData.splice(index, 1)[0])
}
},
upSite(fieldData, index) {
if (index !== 0) {
fieldData[index] = fieldData.splice(index - 1, 1, fieldData[index])[0]
} else {
fieldData.push(fieldData.shift())
}
}
}
}
</script>
<style scoped src='./dialog_table_inner.css'>
</style>
<style scoped>
.toopBox{
display: flex;
justify-content: flex-end;
}
.asyncBox{
width: 100%;
overflow: scroll;
}
</style>
This diff is collapsed.
This diff is collapsed.
<template>
<div>
<el-table :data="gridData" max-height="350">
<el-table-column property="app_code" label="appCode" width="150"></el-table-column>
<el-table-column property="page_name" label="pageName" width="200"></el-table-column>
<el-table-column property="control_name" label="controlName"></el-table-column>
<el-table-column property="query_sql" label="querySql" :show-overflow-tooltip='true'></el-table-column>
<el-table-column property="version" label="version"></el-table-column>
<el-table-column label="操作">
<template slot-scope="scope">
<el-button
size="mini"
type="danger"
@click="revertVersion(scope.$index, scope.row)">回滚</el-button>
<el-button
type="success"
size="mini"
@click="showView(scope.$index, scope.row)">查看效果</el-button>
</template>
</el-table-column>
</el-table>
</div>
<div>
<el-table
:data="gridData"
max-height="350"
>
<el-table-column
property="app_code"
label="appCode"
width="150"
></el-table-column>
<el-table-column
property="page_name"
label="pageName"
width="200"
></el-table-column>
<el-table-column
property="control_name"
label="controlName"
></el-table-column>
<el-table-column
property="query_sql"
label="querySql"
:show-overflow-tooltip='true'
></el-table-column>
<el-table-column
property="version"
label="version"
></el-table-column>
<el-table-column label="操作">
<template slot-scope="scope">
<el-button
size="mini"
type="danger"
@click="revertVersion(scope.$index, scope.row)"
>回滚</el-button>
<el-button
type="success"
size="mini"
@click="showView(scope.$index, scope.row)"
>查看效果</el-button>
</template>
</el-table-column>
</el-table>
</div>
</template>
<script>
export default {
......@@ -56,9 +79,9 @@ export default {
methods: {
revertVersion(index, item) {
const parm = {
sAppCode: item.app_code,
sPage: item.page_name,
sControl: item.control_name,
appCode: item.app_code,
pageName: item.page_name,
controlName: item.control_name,
version: item.version
}
this.$confirm('是否确定回滚到此版本!', '提示', {
......@@ -69,7 +92,7 @@ export default {
.then(() => {
this.$emit('revertVersion', parm)
})
.catch((e) => {
.catch(e => {
console.log(e)
this.$message({
type: 'info',
......@@ -77,14 +100,16 @@ export default {
})
})
},
dialogOpen() {
const parm = {
sPage: this.elInfo.page,
sControl: this.elInfo.position
async dialogOpen() {
const params = {
appCode: '',
pageName: this.elInfo.page,
controlName: this.elInfo.position,
dbName: '',
dbCode: ''
}
this.$API.getPageLog(parm).then(res => {
this.gridData = res
})
const res = await this.$httpClient.WebChartConfigModule.webChartConfigQueryLog(params)
this.gridData = res.data || []
},
showView(index, item) {
const data = {
......
// 主从列表配置
const config = {
'restful_appcode': '',
'isInitMenuParam': false, // 是否初始化menuParam
'initMenuParamOnce': true, // 是否只初始化一次menuParam
'entity': {
'index': {
'isInitNewDefault': false, // 初始化新增默认值
'initNewDefaultOnce': true, // 是否只调用一次
'width': '220px', // index 区域的宽度
'group': 'Tree', // 分组
'isHideButtonTools': false, // 是否隐藏按钮组
'defaultProps': { // 树节点配置
'label': ''// 树每一个节点 显示的中文字段
},
'isTree': true, // 是否是树
'table_name': '', // 表名
'primaryKey': 'id', // 主键id
'dyncQueryParms': {}, // 动态查询参数
'indexTitle': '', // 树标题
'check': {
} // 修改或者新增时 数据校验
},
'main': {
'refreshIndex': false, // 单行修改后 是否刷新左侧
'isInitNewDefault': false, // 初始化新增默认值
'queryDefault': {}, // 默认查询参数
'isHideQueryZone': false, // 是否隐藏搜索区域
'group': '', // 分组
'table_name': '', // 表名
'primaryKey': 'id', // 主键
'detailPath': '', // 详情地址
'detailName': '', // 详情的标签名字
'detailDyncQueryParms': {}, // 跳转到详情时的问号参数
'dyncQueryParms': {// 动态查询参数
},
'dtlList': [// 多个从表以弹出框的形式显示 (位于表格的操作列中!)
{
'label': '字表1', // 按钮名称
'isHide': false, // 是否隐藏
'url': '/DyncUI/HdrDtl/PBOrg/im_arrive_dtl' // 详情页模版
},
{
'label': '字表2',
'isHide': false,
'url': '/DyncUI/HdrDtl/PBOrg/im_arrive_dtl1'
}
],
'importInfo': [// 导入、excel、数据导入
{
'label': '单表数据导入', // 按钮名称
'url': '/DyncUI/Import/{appCode}/{pageCode}', // 单表导入模版
'import_name': '', // 导入名
'parms': {}, // 作为导入页面的问号参数
'click': '$dataImportItem',
'saveParms': {}, // 保存时作为问好参数传给后端
'isHide': false// 是否隐藏
},
{
'label': '主从数据导入',
'url': '/DyncUI/ImportHdrDtl/{appCode}/{pageCode}', // 主从导入模版
'import_name': '',
'parms': {},
'click': '$dataImportItem',
'saveParms': {},
'isHide': false// 是否隐藏
},
{
'label': 'Excel导入', // excel 导入
'click': '$excelImportItem',
'saveParms': {},
'isHide': false// 是否隐藏
}
]
}
},
'new_default': {
'main': {
'columns': {
}
}
}
}
// 主从详情配置
const config = {
'restful_appcode': '', // appCode
'isInitMenuParam': false, // 是否初始化menuParam
'initMenuParamOnce': true, // 是否只初始化一次menuParam
'entity': {// 实体节点
'main': { // 主表实体节点
'isInitNewDefault': false, // 初始化新增默认值
'initNewDefaultOnce': true, // 是否只调用一次
'bill_type': '', // 单据类型
'enableBillFlow': true, // 是否有审核流
'saveExcludeFields': '', // 保存时排除字段
'table_name': '', // 表名
'primaryKey': 'id', // 主键
'dyncQueryParms': {}, // 动态查询参数
'check': {} // 保存时 数据校验
},
'dtl': {
'isInitNewDefault': false, // 初始化新增默认值
'initNewDefaultOnce': true, // 是否只调用一次
'check': {}, // 保存时 数据校验
'showQueryComponent': false, // 是否隐藏查询区域
'addNewCount': 0, // 字段新增行数
'table_name': '', // 表名
'primaryKey': 'id', // 主键
'dyncQueryParms': {}, // 动态查询参数
'importInfo': [ // 导入信息
{
'isMemoryImport': false, // 是否是内存导入
'excludeFields': '', // 排除字段集逗号串连; 这个字段只针对内存导入有用(isMemoryImport:true)
'label': '导入', // 标题名称
'url': '/DyncUI/Import/{appCode}/{pageCode}', // 导入页面的地址
'import_name': '', // 导入名称
'parms': {}, // 作为导入页面的问号参数
'saveParms': {}, // 保存时作为问好参数传给后端
'isHide': false// 是否隐藏
},
{
'label': '单表数据导入', // 按钮名称
'url': '/DyncUI/Import/{appCode}/{pageCode}', // 单表导入模版
'import_name': '', // 导入名
'parms': {}, // 作为导入页面的问号参数
'click': '$dataImportItem',
'saveParms': {}, // 保存时作为问好参数传给后端
'isHide': false// 是否隐藏
},
{
'label': '主从数据导入',
'url': '/DyncUI/ImportHdrDtl/{appCode}/{pageCode}', // 主从导入模版
'import_name': '',
'parms': {},
'click': '$dataImportItem',
'saveParms': {},
'isHide': false// 是否隐藏
},
{
'label': 'Excel导入', // excel 导入
'click': '$excelImportItem',
'saveParms': {},
'isHide': false// 是否隐藏
}
]
}
},
'new_default': {// 新增默认值
'main': {
'columns': {}
},
'dtl': {
'columns': {}
}
}
}
// 主从导入配置
config = {
'restful_appcode': '', // appcode
'entity': {// 实体集
'main': {
'isHideQueryZone': false, // 是否隐藏查询区域
'group': '', // 分组
'table_name': '', // 表名
'primaryKey': 'id', // 主键
'dyncQueryParms': {// 查询参数
}
},
'dtl': {
'group': '', // 分组
'table_name': '', // 表名
'primaryKey': 'id', // 主键
'dyncQueryParms': { // 查询参数
}
}
}
}
// 单表导入配置
const config = {
'restful_appcode': '',
'isInitMenuParam': false, // 是否初始化menuParam
'initMenuParamOnce': true, // 是否只初始化一次menuParam
'entity': {
'main': {
'queryDefault': {}, // 默认查询参数
'isHideQueryZone': false, // 是否隐藏查询区域
'group': '', // 分组
'table_name': '', // 表名
'primaryKey': 'id', // 主键id
'dyncQueryParms': { // 动态查询参数
}
}
}
}
// 单表配置
const config = {
'restful_appcode': '', // appcode
'isInitMenuParam': false, // 是否初始化menuParam
'initMenuParamOnce': true, // 是否只初始化一次menuParam
'entity': { // 实体节点
'index': {
'isInitNewDefault': false, // 初始化新增默认值
'initNewDefaultOnce': true, // 是否只调用一次
'width': '220px', // index区域的宽度
'group': 'Tree', // 分组
'isHideButtonTools': false, // 是否隐藏按钮组
'defaultProps': {
'label': '' // 树每一个节点 显示的中文字段
},
'isTree': true, // 是否是树
'table_name': '', // 表名
'primaryKey': 'id', // 主键
'dyncQueryParms': {}, // 动态查询参数
'indexTitle': '', // 标题
'check': {} // 修改或者新增时 数据校验
},
'main': {
'refreshIndex': false, // 单行修改后 是否刷新左侧
'isInitNewDefault': false, // 初始化新增默认值
'initNewDefaultOnce': true, // 是否只调用一次
'check': {}, // 修改时数据校验
'enableBillFlow': true, // 是否开启审核流程
'queryDefault': {}, // 查询默认值
'isHideQueryZone': false, // 是否隐藏搜索区域
'group': '', // 分组
'table_name': '', // 表名
'primaryKey': 'id', // 主键
'dyncQueryParms': { // 动态查询参数
},
'importInfo': [// 导入、excel、数据导入
{
label: '单表数据导入', // 按钮名称
url: '/DyncUI/Import/{appCode}/{pageCode}', // 单表导入模版
import_name: '', // 导入名
parms: {}, // 作为导入页面的问号参数
click: '$dataImportItem',
saveParms: {}// 保存时作为问好参数传给后端
},
{
label: '主从数据导入',
url: '/DyncUI/ImportHdrDtl/{appCode}/{pageCode}', // 主从导入模版
import_name: '',
parms: {},
click: '$dataImportItem',
saveParms: {}
},
{
'label': 'Excel导入', // excel 导入
'click': '$excelImportItem',
saveParms: {}
}
]
}
},
'new_default': {// 新增默认值
'main': {
'columns': {
}
},
'index': {
'columns': {
}
}
}
}
......@@ -31,6 +31,11 @@
<el-input size='mini' v-model="scope.row.prop" clearable> </el-input>
</template>
</el-table-column>
<el-table-column prop='topTitle' label='一级标题' width="150" fixed="left">
<template slot-scope="scope">
<el-input size='mini' v-model="scope.row.topTitle" clearable> </el-input>
</template>
</el-table-column>
<el-table-column prop='width' label='宽度' width="120">
<template slot-scope="scope">
<el-input size='mini' v-model="scope.row.width" clearable placeholder="80"> </el-input>
......@@ -65,7 +70,7 @@
<el-input type="textarea" :rows="1" size='mini' v-model="scope.row.otherConfig" clearable> </el-input>
</template>
</el-table-column>
<el-table-column prop='width' label='列样式' width="120">
<el-table-column prop='clomunStyle' label='列样式' width="120">
<template slot-scope="scope">
<el-button size='mini' @click="showStyleColunm(scope.row,scope.$index)">设置样式</el-button>
</template>
......@@ -76,7 +81,7 @@
</el-switch>
</template>
</el-table-column>
<el-table-column prop="type" label="展示类型" width="140" v-if="isEditColumns">
<el-table-column prop="showType" label="展示类型" width="140" v-if="isEditColumns">
<template slot-scope="scope">
<el-select v-model="scope.row.showType" size='mini' clearable>
<el-option v-for="(option,index) in typeOptions"
......@@ -100,6 +105,12 @@
</el-switch>
</template>
</el-table-column>
<el-table-column prop='fixed' label='是否固定' width='70'>
<template slot-scope="scope">
<el-switch v-model="scope.row.fixed">
</el-switch>
</template>
</el-table-column>
<el-table-column label='操作' width=300 fixed="right">
<template slot-scope="scope">
<el-button size='mini' @click="addPropViSaync(scope.row,scope.$index)">新增列</el-button>
......@@ -126,7 +137,7 @@
<script>
import _ from 'lodash'
import uuidv1 from 'uuid/v1'
import tbaleColumStyleSet from './tbaleColumStyleSet'
import tbaleColumStyleSet from './tbaleColumStyleSet'
export default {
components: { tbaleColumStyleSet },
props: {
......@@ -201,6 +212,11 @@ export default {
label: '1-1配置输入框',
isRequireControlName: true
},
{
value: 'hsInputNumber',
label: '1-2数字输入',
isRequireControlName: true
},
{
value: 'hsSelectPlus',
label: '2下拉框',
......@@ -215,7 +231,8 @@ export default {
label: '4勾选'
},
{
value: 'elSwitch',
value: 'hsSwitch',
isRequireControlName: true,
label: '5开关'
},
{
......@@ -230,7 +247,42 @@ export default {
value: 'hsComputed',
label: '8计算文本',
isRequireControlName: true
},
{
value: 'hsPopoverTextarea',
label: '9多行文本弹出',
isRequireControlName: true
},
{
value: 'hsLookup',
label: '10hsLookup',
isRequireControlName: true
},
{
value: 'hsTagsSelect',
label: '11tags-select',
isRequireControlName: true
},
{
value: 'hsTagsTable',
label: '12tags-table',
isRequireControlName: true
},
{
value: 'hsTagsFrom',
label: '13tags-from',
isRequireControlName: true
},
{
value: 'hsSelectList',
label: '14select-list',
isRequireControlName: true
}
// {
// value: 'hsDragList',
// label: '14Drag-list',
// isRequireControlName: true
// }
],
tableDataColumsCopy: []
}
......@@ -456,6 +508,8 @@ export default {
if (this.isEditColumns) {
for (const index in columnsConfig) {
const item = columnsConfig[index]
delete item.allSourceData
delete item.elInfo
const itemOptionType = this.typeOptions.find(xs => xs.value === item.showType)
if (!itemOptionType) {
item.showType = 'text'
......@@ -467,10 +521,10 @@ export default {
}
if (itemOptionType && itemOptionType.isRequireControlName && !item.control_name) {
item.control_name = uuidv1()
item.elInfo = {
position: item.control_name,
el: item.showType
}
// item.elInfo = {
// position: item.control_name,
// el: item.showType
// }
}
}
}
......
This diff is collapsed.
/* eslint-disable */
/* Blob.js
* A Blob implementation.
* 2014-05-27
*
* By Eli Grey, http://eligrey.com
* By Devin Samarin, https://github.com/eboyjr
* License: X11/MIT
* See LICENSE.md
*/
/*global self, unescape */
/*jslint bitwise: true, regexp: true, confusion: true, es5: true, vars: true, white: true,
plusplus: true */
/*! @source http://purl.eligrey.com/github/Blob.js/blob/master/Blob.js */
(function (view) {
"use strict";
view.URL = view.URL || view.webkitURL;
if (view.Blob && view.URL) {
try {
new Blob;
return;
} catch (e) {}
}
// Internally we use a BlobBuilder implementation to base Blob off of
// in order to support older browsers that only have BlobBuilder
var BlobBuilder = view.BlobBuilder || view.WebKitBlobBuilder || view.MozBlobBuilder || (function(view) {
var
get_class = function(object) {
return Object.prototype.toString.call(object).match(/^\[object\s(.*)\]$/)[1];
}
, FakeBlobBuilder = function BlobBuilder() {
this.data = [];
}
, FakeBlob = function Blob(data, type, encoding) {
this.data = data;
this.size = data.length;
this.type = type;
this.encoding = encoding;
}
, FBB_proto = FakeBlobBuilder.prototype
, FB_proto = FakeBlob.prototype
, FileReaderSync = view.FileReaderSync
, FileException = function(type) {
this.code = this[this.name = type];
}
, file_ex_codes = (
"NOT_FOUND_ERR SECURITY_ERR ABORT_ERR NOT_READABLE_ERR ENCODING_ERR "
+ "NO_MODIFICATION_ALLOWED_ERR INVALID_STATE_ERR SYNTAX_ERR"
).split(" ")
, file_ex_code = file_ex_codes.length
, real_URL = view.URL || view.webkitURL || view
, real_create_object_URL = real_URL.createObjectURL
, real_revoke_object_URL = real_URL.revokeObjectURL
, URL = real_URL
, btoa = view.btoa
, atob = view.atob
, ArrayBuffer = view.ArrayBuffer
, Uint8Array = view.Uint8Array
;
FakeBlob.fake = FB_proto.fake = true;
while (file_ex_code--) {
FileException.prototype[file_ex_codes[file_ex_code]] = file_ex_code + 1;
}
if (!real_URL.createObjectURL) {
URL = view.URL = {};
}
URL.createObjectURL = function(blob) {
var
type = blob.type
, data_URI_header
;
if (type === null) {
type = "application/octet-stream";
}
if (blob instanceof FakeBlob) {
data_URI_header = "data:" + type;
if (blob.encoding === "base64") {
return data_URI_header + ";base64," + blob.data;
} else if (blob.encoding === "URI") {
return data_URI_header + "," + decodeURIComponent(blob.data);
} if (btoa) {
return data_URI_header + ";base64," + btoa(blob.data);
} else {
return data_URI_header + "," + encodeURIComponent(blob.data);
}
} else if (real_create_object_URL) {
return real_create_object_URL.call(real_URL, blob);
}
};
URL.revokeObjectURL = function(object_URL) {
if (object_URL.substring(0, 5) !== "data:" && real_revoke_object_URL) {
real_revoke_object_URL.call(real_URL, object_URL);
}
};
FBB_proto.append = function(data/*, endings*/) {
var bb = this.data;
// decode data to a binary string
if (Uint8Array && (data instanceof ArrayBuffer || data instanceof Uint8Array)) {
var
str = ""
, buf = new Uint8Array(data)
, i = 0
, buf_len = buf.length
;
for (; i < buf_len; i++) {
str += String.fromCharCode(buf[i]);
}
bb.push(str);
} else if (get_class(data) === "Blob" || get_class(data) === "File") {
if (FileReaderSync) {
var fr = new FileReaderSync;
bb.push(fr.readAsBinaryString(data));
} else {
// async FileReader won't work as BlobBuilder is sync
throw new FileException("NOT_READABLE_ERR");
}
} else if (data instanceof FakeBlob) {
if (data.encoding === "base64" && atob) {
bb.push(atob(data.data));
} else if (data.encoding === "URI") {
bb.push(decodeURIComponent(data.data));
} else if (data.encoding === "raw") {
bb.push(data.data);
}
} else {
if (typeof data !== "string") {
data += ""; // convert unsupported types to strings
}
// decode UTF-16 to binary string
bb.push(unescape(encodeURIComponent(data)));
}
};
FBB_proto.getBlob = function(type) {
if (!arguments.length) {
type = null;
}
return new FakeBlob(this.data.join(""), type, "raw");
};
FBB_proto.toString = function() {
return "[object BlobBuilder]";
};
FB_proto.slice = function(start, end, type) {
var args = arguments.length;
if (args < 3) {
type = null;
}
return new FakeBlob(
this.data.slice(start, args > 1 ? end : this.data.length)
, type
, this.encoding
);
};
FB_proto.toString = function() {
return "[object Blob]";
};
FB_proto.close = function() {
this.size = this.data.length = 0;
};
return FakeBlobBuilder;
}(view));
view.Blob = function Blob(blobParts, options) {
var type = options ? (options.type || "") : "";
var builder = new BlobBuilder();
if (blobParts) {
for (var i = 0, len = blobParts.length; i < len; i++) {
builder.append(blobParts[i]);
}
}
return builder.getBlob(type);
};
}(typeof self !== "undefined" && self || typeof window !== "undefined" && window || this.content || this));
This diff is collapsed.
const data = {
exportToExcel(columnList = [], dataList = [], fileName = 'data') {
const tHeader = []
const filterVal = []
for (const item of columnList) {
const jtem = item.split('=')
tHeader.push(jtem[0])
filterVal.push(jtem[1])
}
require.ensure([], () => {
const { export_json_to_excel } = require('./Export2Excel.js')
const data = this.formatJson(filterVal, dataList)
export_json_to_excel(tHeader, data, fileName)
})
},
formatJson(filterVal, jsonData) {
return jsonData.map(v => filterVal.map(j => v[j]))
},
exportJsonToExcelMuilt(dataList = [], fileName = 'data') {
require.ensure([], () => {
const { export_json_to_excel_muilt } = require('./Export2Excel.js')
export_json_to_excel_muilt(dataList, fileName)
})
}
}
export default data
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
export default{
methods: {
getSelectKeyList(parmsList, position, prop = 'id') {
const data = this.layoutChagneDate[position]
if (!data || !data.length) {
this.$message.error('请勾选')
return
}
const list = []
this.layoutChagneDate[position].forEach(element => {
if (element[prop]) list.push(element[prop])
})
parmsList.length = 0
parmsList.push(...list)
return parmsList
}
}
}
This diff is collapsed.
this.active_manager.methodsObj.A.call(this.active_manager.pageThis);this.getSelectKeyList(this.param.keyList,'table1','订单号'); if(!this.param.keyList.length)return; this.execSqlFun(`exec HsMonitorCenter_Test.HsMonitorCenter_Test.HsMonitorCenter_Test.HsMonitorCenter_Test.HsMonitorCenter_Test.HsMonitorCenter_Test.HsMonitorCenter_Test.HsMonitorCenter_Test.HsMonitorCenter_Test.HsMonitorCenter_Test.HsMonitorCenter_Test.HsMonitorCenter_Test.HsMonitorCenter_Test.dbo.sppbXXXX @sIdList=${this.param.keyList}`).then(res=>{this.$message('操作成功');this.query()});
// 分理函数和sql
const spdoc = doc.split(';')
const spdoc0 = spdoc[0]
const execl = spdoc[1]
// 括号之间的所有内容 .* 或者 [\s\S]*
var regex1 = /\((.*)\)/
const r = spdoc0.match(regex1)[1]
const parms = r.split(',')
// 括号之前的内容 也就是函数名
var regex2 = /(.*)\(/
const fun = spdoc0.match(regex2)[1]
const sql = execl.match(regex1)[1]
this.actionConfig.result = parms[0]
this.actionConfig.getFun = fun
this.actionConfig.funParms = parms[2]
this.actionConfig.position = parms[1]
this.actionConfig.success = success || {}
if (spdoc[1].includes('exec')) {
this.actionConfig.execsql = sql
} else {
this.actionConfig.execFun = sql
}
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
url:`FILE_RESOURCE_PROXY/file/appCode/NewFileName/`
\ No newline at end of file
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment