初始代码

This commit is contained in:
wangmingwei
2026-04-21 16:55:00 +08:00
parent be9f1657b9
commit 35101db700
1335 changed files with 211213 additions and 0 deletions

View File

@@ -0,0 +1,594 @@
<template>
<view :class="{'item-card':config.yunzhupaasKey==='card'}"
v-if="!config.noShow && (!config.visibility || (Array.isArray(config.visibility) && config.visibility.includes('app')))">
<template v-if="config.layout==='colFormItem'">
<YunzhupaasText v-if="config.yunzhupaasKey=='text'" :content="item.content" :textStyle="item.textStyle" />
<YunzhupaasDivider v-else-if="config.yunzhupaasKey==='divider'" :content="item.content" />
<YunzhupaasGroupTitle v-else-if="config.yunzhupaasKey=='groupTitle'" :content="item.content"
:content-position="item.contentPosition" :helpMessage="item.helpMessage" @groupIcon="clickIcon(item)" />
<u-form-item v-else-if="config.yunzhupaasKey==='popupSelect' || config.yunzhupaasKey==='relationForm'"
:label="realLabel" :prop="item.__vModel__" class="popup-select" :label-width="labelWidth"
:left-icon="leftIcon" :left-icon-style="{'color':'#a8aaaf'}" @clickIcon="clickIcon(item)">
<view class="detail-text-box" v-if="config.yunzhupaasKey==='popupSelect'">
<view class="yunzhupaas-detail-text">
{{formData[item.__vModel__]}}
</view>
<DisplayList v-if="Object.keys(extraObj).length" :extraObj="extraObj"
:extraOptions="item.extraOptions">
</DisplayList>
</view>
<view class="detail-text-box" @click.native="toDetail(item)" v-if="config.yunzhupaasKey==='relationForm'">
<view class="yunzhupaas-detail-text" style="color:rgb(41, 121, 255)">
{{formData[item.__vModel__]}}
</view>
<DisplayList v-if="Object.keys(extraObj).length" :extraObj="extraObj"
:extraOptions="item.extraOptions">
</DisplayList>
</view>
</u-form-item>
<u-form-item v-else :label="realLabel" :prop="item.__vModel__" :label-width="labelWidth"
:left-icon="leftIcon" :left-icon-style="{'color':'#a8aaaf'}" @clickIcon="clickIcon(item)">
<!-- #ifndef APP-HARMONY -->
<YunzhupaasUploadFile v-if="config.yunzhupaasKey=='uploadFile'" v-model="config.defaultValue" detailed />
<!-- #endif -->
<view class="preview-image-box" v-if="config.yunzhupaasKey==='uploadImg'">
<image v-for="(cItem,ci) in item.__config__.defaultValue" :key="ci" class="u-preview-image"
:src="define.baseURL+cItem.url" mode="aspectFill"
@tap.stop="doPreviewImage(define.baseURL+cItem.url, item.__config__.defaultValue)"></image>
</view>
<YunzhupaasColorPicker v-else-if="config.yunzhupaasKey==='colorPicker'" v-model="config.defaultValue"
:colorFormat="item.colorFormat" disabled />
<YunzhupaasRate v-else-if="config.yunzhupaasKey==='rate'" v-model="config.defaultValue" :max="item.count"
:allowHalf="item.allowHalf" disabled />
<YunzhupaasEditor v-else-if="config.yunzhupaasKey==='editor'" v-model="config.defaultValue" detailed />
<YunzhupaasBarcode v-else-if="config.yunzhupaasKey=='barcode'" :staticText="item.staticText" :width="item.width"
:height="item.height" :format="item.format" :dataType="item.dataType" :lineColor="item.lineColor"
:background="item.background" :relationField="item.relationField+'_id'" :formData="formData" />
<YunzhupaasQrcode v-else-if="config.yunzhupaasKey=='qrcode'" :staticText="item.staticText" :width="item.width"
:dataType="item.dataType" :colorDark="item.colorDark" :colorLight="item.colorLight"
:relationField="item.relationField+'_id'" :formData="formData" />
<YunzhupaasInputNumber v-else-if="config.yunzhupaasKey=='inputNumber'" v-model="config.defaultValue"
:step='item.step' :max='item.max||999999999999999' :min='item.min||-999999999999999'
:disabled="item.disabled" :placeholder="item.placeholder" :isAmountChinese="item.isAmountChinese"
:thousands="item.thousands" :addonAfter="item.addonAfter" :addonBefore="item.addonBefore"
:controls="item.controls" :precision="item.precision" detailed />
<YunzhupaasCalculate v-else-if="config.yunzhupaasKey==='calculate'&&item.isStorage==0" :expression='item.expression'
:vModel='item.__vModel__' :config='config' :formData='formData' v-model="config.defaultValue"
:precision="item.precision" :isAmountChinese="item.isAmountChinese" :thousands="item.thousands"
:roundType="item.roundType" />
<!--start labelwidth=0-->
<YunzhupaasLink v-else-if="config.yunzhupaasKey=='link'" :content="item.content" :href="item.href"
:target='item.target' :textStyle="item.textStyle" />
<YunzhupaasAlert v-else-if="config.yunzhupaasKey=='alert'" :type="item.type" :title="item.title"
:tagIcon='item.tagIcon' :showIcon="item.showIcon" :closable="item.closable"
:description="item.description" :closeText="item.closeText" />
<YunzhupaasButton v-else-if="config.yunzhupaasKey=='button'" :buttonText="item.buttonText" :align="item.align"
:type="item.type" :disabled="item.disabled" />
<YunzhupaasSlider v-else-if="config.yunzhupaasKey=='slider'" v-model="config.defaultValue" :step="item.step"
:min="item.min||0" :max="item.max||100" disabled />
<YunzhupaasSign v-else-if="config.yunzhupaasKey=='sign'" v-model="config.defaultValue" detailed />
<YunzhupaasSignature v-else-if="config.yunzhupaasKey=='signature'" v-model="config.defaultValue" detailed />
<YunzhupaasLocation v-else-if="config.yunzhupaasKey=='location'" v-model="config.defaultValue"
:enableLocationScope="item.enableLocationScope" detailed />
<!--end labelwidth=0-->
<template v-else>
<view class="yunzhupaas-detail-text" v-if="config.yunzhupaasKey==='calculate'">
<view>{{ toThousands(config.defaultValue, item) }}</view>
<view v-if="item.isAmountChinese" style="color: #999;">
{{yunzhupaas.getAmountChinese(getValue(item))}}
</view>
</view>
<YunzhupaasInput v-else-if="config.yunzhupaasKey=='input'" v-model="config.defaultValue" detailed
:useMask="item.useMask" :maskConfig="item.maskConfig" :addonBefore="item.addonBefore"
:addonAfter="item.addonAfter" />
<view class="yunzhupaas-detail-text" v-else>{{ getValue(item) }}</view>
</template>
</u-form-item>
</template>
<template v-else>
<view class="yunzhupaas-card" v-if="config.yunzhupaasKey==='card'||config.yunzhupaasKey==='row'">
<view class="yunzhupaas-card-cap u-line-1 u-flex" v-if="item.header" @click="clickIcon(item)">
{{item.header}}
<u-icon :name="config.tipLabel? 'question-circle-fill':''" class="u-m-l-10" color="#a0acb7" />
</view>
<Item v-for="(child, index) in config.children" :key="config.renderKey+index" :itemData="child"
:formConf="formConf" :formData="formData" @toDetail="toDetail" @clickIcon='clickIcon' />
</view>
<template v-if="config.yunzhupaasKey==='table'">
<view class="yunzhupaas-table">
<view class="yunzhupaas-table-title u-line-1" @click="clickIcon(item)">
{{config.label}}
<u-icon v-if="config.tipLabel" :name="'question-circle-fill'" class="u-m-l-10"
color="#a0acb7" />
</view>
<view v-for="(column,columnIndex) in config.defaultValue" :key="columnIndex">
<view class="yunzhupaas-table-item-title">
<view class="yunzhupaas-table-item-title-num">({{columnIndex+1}})</view>
</view>
<view class="form-item-box" v-for="(childItem,cIndex) in config.children" :key="cIndex">
<u-form-item :label="childItem.__config__.showLabel?childItem.__config__.label:''"
:label-width="childItem.__config__.labelWidth ? childItem.__config__.labelWidth * 1.5 : undefined"
@clickIcon="clickIcon(childItem)"
:left-icon='childItem.__config__.tipLabel &&childItem.__config__.showLabel&& childItem.__config__.label? "question-circle-fill":""'
:left-icon-style="{'color':'#a0acb7'}"
v-if="!childItem.__config__.noShow&&(!childItem.__config__.visibility|| (Array.isArray(childItem.__config__.visibility) && childItem.__config__.visibility.includes('app')))">
<template
v-if="['relationFormAttr','popupAttr'].includes(childItem.__config__.yunzhupaasKey)">
<view class="yunzhupaas-detail-text" v-if="!childItem.__vModel__">
{{ column[childItem.relationField.split('_yunzhupaasTable_')[0]+'_'+childItem.showField] }}
</view>
<view class="yunzhupaas-detail-text" v-else>
{{column[childItem.__vModel__]}}
</view>
</template>
<view v-else-if="childItem.__config__.yunzhupaasKey==='relationForm'" class="yunzhupaas-detail-text"
style="color:rgb(41, 121, 255)"
@click.native="toTableDetail(childItem,column[childItem.__vModel__+'_id'])">
{{column[childItem.__vModel__]}}
</view>
<YunzhupaasSign v-else-if="childItem.__config__.yunzhupaasKey=='sign'"
v-model="column[childItem.__vModel__]" detailed />
<YunzhupaasSignature v-else-if="childItem.__config__.yunzhupaasKey=='signature'"
v-model="column[childItem.__vModel__]" detailed />
<YunzhupaasLocation v-else-if="childItem.__config__.yunzhupaasKey=='location'"
v-model="column[childItem.__vModel__]"
:enableLocationScope="item.enableLocationScope" detailed />
<!-- #ifndef APP-HARMONY -->
<YunzhupaasUploadFile v-else-if="childItem.__config__.yunzhupaasKey==='uploadFile'"
v-model="column[childItem.__vModel__]" detailed />
<!-- #endif -->
<YunzhupaasUploadImg v-else-if="childItem.__config__.yunzhupaasKey==='uploadImg'"
v-model="column[childItem.__vModel__]" detailed />
<YunzhupaasInputNumber v-else-if="childItem.__config__.yunzhupaasKey=='inputNumber'"
v-model="column[childItem.__vModel__]" :step='childItem.step' :max='childItem.max'
:min='childItem.min' :disabled="childItem.disabled"
:placeholder="childItem.placeholder" :isAmountChinese="childItem.isAmountChinese"
:thousands="childItem.thousands" :addonAfter="childItem.addonAfter"
:addonBefore="childItem.addonBefore" :controls="childItem.controls"
:precision="childItem.precision" detailed />
<YunzhupaasCalculate
v-else-if="childItem.__config__.yunzhupaasKey==='calculate'&&childItem.isStorage==0"
:expression='childItem.expression' :vModel='childItem.__vModel__'
:config='childItem.__config__' :formData='formData' :roundType="childItem.roundType"
v-model="column[childItem.__vModel__]" :precision="childItem.precision"
:isAmountChinese="childItem.isAmountChinese" :thousands="childItem.thousands" />
<YunzhupaasRate v-else-if="childItem.__config__.yunzhupaasKey==='rate'" :max="childItem.count"
v-model="column[childItem.__vModel__]" :allowHalf="childItem.allowHalf" disabled />
<YunzhupaasSlider v-else-if="childItem.__config__.yunzhupaasKey=='slider'"
v-model="column[childItem.__vModel__]" :step="childItem.step"
:min="childItem.min||0" :max="childItem.max||100" disabled />
<template v-else>
<view class="yunzhupaas-detail-text" v-if="childItem.__config__.yunzhupaasKey==='calculate'">
<view>{{toThousands(column[childItem.__vModel__],childItem)}}</view>
<view v-if="childItem.isAmountChinese" style="color: #999;">
{{yunzhupaas.getAmountChinese(column[childItem.__vModel__])}}
</view>
</view>
<YunzhupaasInput v-else-if="childItem.__config__.yunzhupaasKey=='input'"
v-model="column[childItem.__vModel__]" detailed :useMask="childItem.useMask"
:maskConfig="childItem.maskConfig" :addonBefore="childItem.addonBefore"
:addonAfter="childItem.addonAfter" />
<view class="yunzhupaas-detail-text" v-else>{{column[childItem.__vModel__]}}</view>
</template>
</u-form-item>
</view>
</view>
<view class="yunzhupaas-table-item" v-if="item.showSummary && summaryField.length">
<view class="yunzhupaas-table-item-title u-flex u-row-between">
<text class="yunzhupaas-table-item-title-num">{{item.__config__.label}}合计</text>
</view>
<view class=" u-p-l-20 u-p-r-20 form-item-box">
<u-form-item v-for="(item,index) in summaryField" :label="item.__config__.label"
:key="item.__vModel__">
<u-input input-align='right' v-model="item.value" disabled />
</u-form-item>
</view>
</view>
</view>
</template>
<view v-else-if="config.yunzhupaasKey==='steps'" style="background-color: #fff;padding:15px 0">
<view class="step-container">
<u-steps :list="config.children" name="title" :mode="item.simple ? 'dot' :'number'"
@change="onStepChange($event,item)" :current="stepCurrent">
</u-steps>
</view>
<view v-for="(itemSub,i) in config.children" :key='i'>
<view v-if="i === stepCurrent">
<Item v-for="(childItem, childIndex) in itemSub.__config__.children" :key="childIndex"
:itemData="childItem" :formConf="formConf" :formData="formData" @toDetail="toDetail"
@clickIcon='clickIcon' />
</view>
</view>
</view>
<view class="yunzhupaas-tab" v-if="config.yunzhupaasKey==='tab'">
<u-tabs is-scroll :list="config.children" name="title" v-model="tabCurrent" @change="onTabChange" />
<view v-for="(pane,i) in config.children" :key='i'>
<view v-show="i == tabCurrent">
<Item v-for="(childItem, childIndex) in pane.__config__.children" :key="childIndex"
:itemData="childItem" :formConf="formConf" :formData="formData" @toDetail="toDetail"
@clickIcon='clickIcon' />
</view>
</view>
</view>
<template v-if="config.yunzhupaasKey==='collapse'">
<u-collapse :head-style="{'padding-left':'20rpx'}" :accordion="item.accordion" ref="collapseRef">
<u-collapse-item :title="pane.title" v-for="(pane, i) in config.children" :key="i"
:open="config.active.indexOf(pane.name)>-1">
<Item v-for="(child, j) in pane.__config__.children" :key="child.__config__.renderKey"
:itemData="child" :formConf="formConf" :formData="formData" @toDetail="toDetail"
@clickIcon='clickIcon' />
</u-collapse-item>
</u-collapse>
</template>
</template>
</view>
</template>
<script>
import {
getRelationFormDetail,
getDataInterfaceDataInfoByIds
} from '@/api/common.js'
// #ifdef MP
import Item from './Item.vue' //兼容小程序
// #endif
import DisplayList from '@/components/displayList'
const specialList = ['link', 'editor', 'button', 'alert']
export default {
name: 'Item',
components: {
// #ifdef MP
Item,
// #endif
DisplayList
},
props: {
itemData: {
type: Object,
required: true
},
formConf: {
type: Object,
required: true
},
formData: {
type: Object,
},
},
computed: {
item() {
const item = uni.$u.deepClone(this.itemData)
this.initI18n(item)
return item
},
config() {
return this.item.__config__
},
labelWidth() {
if (specialList.indexOf(this.config.yunzhupaasKey) > -1) return 0
return this.config.labelWidth ? this.config.labelWidth * 1.5 : undefined
},
label() {
return this.config.showLabel && specialList.indexOf(this.config.yunzhupaasKey) < 0 ? this.config.label : ''
},
realLabel() {
return this.label ? (this.label + (this.formConf.labelSuffix || '')) : ''
},
leftIcon() {
return this.config.tipLabel && this.label && this.config.showLabel ? "question-circle-fill" : ""
}
},
data() {
return {
tabCurrent: 0,
tableData: [],
summaryField: [],
stepCurrent: 0,
extraObj: {}
}
},
created() {
this.handleSummary()
this.handleTab()
},
mounted() {
if (this.config.yunzhupaasKey === 'collapse') {
this.$refs.collapseRef && this.$refs.collapseRef.init()
}
uni.$on('initCollapse', () => {
this.$refs.collapseRef && this.$refs.collapseRef.init()
})
this.getDataChange()
this.getDataInterfaceDataInfoByIds()
},
methods: {
onStepChange(index, item) {
if (this.stepCurrent === index) return
item.__config__.active = index
this.stepCurrent = index
this.$nextTick(() => {
uni.$emit('updateCode')
uni.$emit('initCollapse')
})
},
initI18n(item) {
const config = item.__config__
if (item.placeholderI18nCode) {
//#ifdef MP-WEIXIN
item.placeholder = this.$t(item.placeholderI18nCode);
//#endif
//#ifndef MP-WEIXIN
item.placeholder = this.$t(item.placeholderI18nCode, item.placeholder);
//#endif
}
if (item.__config__.label && item.__config__.labelI18nCode) {
//#ifdef MP-WEIXIN
item.__config__.label = this.$t(item.__config__.labelI18nCode);
//#endif
//#ifndef MP-WEIXIN
item.__config__.label = this.$t(item.__config__.labelI18nCode, item.__config__.label);
//#endif
}
if (item.__config__.tipLabel && item.__config__.tipLabelI18nCode) {
//#ifdef MP-WEIXIN
item.__config__.tipLabel = this.$t(item.__config__.tipLabelI18nCode);
//#endif
//#ifndef MP-WEIXIN
item.__config__.tipLabel = this.$t(item.__config__.tipLabelI18nCode, item.__config__.tipLabel);
//#endif
}
if (['groupTitle', 'divider', 'link', 'text'].includes(config.yunzhupaasKey)) {
if (item.contentI18nCode) {
//#ifdef MP-WEIXIN
item.content = this.$t(item.contentI18nCode);
//#endif
//#ifndef MP-WEIXIN
item.content = this.$t(item.contentI18nCode, item.content);
//#endif
}
if (item.helpMessageI18nCode) {
//#ifdef MP-WEIXIN
item.helpMessage = this.$t(item.helpMessageI18nCode);
//#endif
//#ifndef MP-WEIXIN
item.helpMessage = this.$t(item.helpMessageI18nCode, item.helpMessage);
//#endif
}
}
if (config.yunzhupaasKey === 'button') {
if (item.buttonTextI18nCode) {
//#ifdef MP-WEIXIN
item.buttonText = this.$t(item.buttonTextI18nCode);
//#endif
//#ifndef MP-WEIXIN
item.buttonText = this.$t(item.buttonTextI18nCode.item.buttonText);
//#endif
}
}
if (config.yunzhupaasKey === 'alert') {
if (item.titleI18nCode) {
//#ifdef MP-WEIXIN
item.title = this.$t(item.titleI18nCode);
//#endif
//#ifndef MP-WEIXIN
item.title = this.$t(item.titleI18nCode, item.title);
//#endif
}
if (item.descriptionI18nCode) {
//#ifdef MP-WEIXIN
item.description = this.$t(item.descriptionI18nCode);
//#endif
//#ifndef MP-WEIXIN
item.description = this.$t(item.descriptionI18nCode, item.description);
//#endif
}
if (item.closeTextI18nCode) {
//#ifdef MP-WEIXIN
item.closeText = this.$t(item.closeTextI18nCode);
//#endif
//#ifndef MP-WEIXIN
item.closeText = this.$t(item.closeTextI18nCode, item.closeText);
//#endif
}
}
if (config.yunzhupaasKey === 'card') {
if (item.headerI18nCode) {
//#ifdef MP-WEIXIN
item.header = this.$t(item.headerI18nCode);
//#endif
//#ifndef MP-WEIXIN
item.header = this.$t(item.headerI18nCode, item.header);
//#endif
}
}
if (['tab', 'collapse', 'steps'].includes(config.yunzhupaasKey)) {
if (config.children && config.children.length) {
for (let i = 0; i < config.children.length; i++) {
if (config.children[i].titleI18nCode) {
//#ifdef MP-WEIXIN
config.children[i].title =
this.$t(config.children[i].titleI18nCode);
//#endif
//#ifndef MP-WEIXIN
config.children[i].title =
this.$t(config.children[i].titleI18nCode, config.children[i].title);
//#endif
}
}
}
if (item.headerI18nCode) {
//#ifdef MP-WEIXIN
item.header = this.$t(item.headerI18nCode);
//#endif
//#ifndef MP-WEIXIN
item.header = this.$t(item.headerI18nCode, item.header);
//#endif
}
}
if (config.yunzhupaasKey === 'table') {
if (config.children && config.children.length) {
for (let i = 0; i < config.children.length; i++) {
this.initI18n(config.children[i])
}
}
}
},
handleTab() {
if (this.config.yunzhupaasKey === 'steps') return this.stepCurrent = this.config.active
if (this.config.yunzhupaasKey !== 'tab') return
for (var i = 0; i < this.config.children.length; i++) {
if (this.config.active == this.config.children[i].name) {
this.tabCurrent = i
break
}
}
},
getDataChange() {
if (this.config.yunzhupaasKey === 'relationForm' && this.config.defaultValue) {
let query = {
id: this.formData[this.item.__vModel__ + '_id'],
};
if (this.item.propsValue) query = {
...query,
propsValue: this.item.propsValue
};
getRelationFormDetail(this.item.modelId, query).then(res => {
if ((!res.data || !res.data.data) || res.data.data === "undefined") return
let data = JSON.parse(res.data?.data)
this.extraObj = data
})
}
},
getDataInterfaceDataInfoByIds() {
if (this.config.yunzhupaasKey === 'popupSelect' && this.config.defaultValue) {
let query = {
ids: [this.config.defaultValue],
interfaceId: this.item.interfaceId,
propsValue: this.item.propsValue,
relationField: this.item.relationField,
paramList: this.getParamList()
}
getDataInterfaceDataInfoByIds(this.item.interfaceId, query).then(res => {
const data = res.data && res.data.length ? res.data[0] : {};
this.extraObj = data
})
}
},
getParamList() {
let templateJson = this.item.templateJson
if (!this.formData) return templateJson
for (let i = 0; i < templateJson.length; i++) {
if (templateJson[i].relationField && templateJson[i].sourceType == 1) {
if (templateJson[i].relationField.includes('-')) {
let tableVModel = templateJson[i].relationField.split('-')[0]
let childVModel = templateJson[i].relationField.split('-')[1]
templateJson[i].defaultValue = this.formData[tableVModel] && this.formData[tableVModel][this
.rowIndex
] && this.formData[tableVModel][this.rowIndex][childVModel] || ''
} else {
templateJson[i].defaultValue = this.formData[templateJson[i].relationField] || ''
}
}
}
return templateJson
},
handleSummary() {
if (this.item.__config__.yunzhupaasKey !== 'table') return
const val = this.item.__config__.defaultValue
let summaryField = this.item.summaryField || []
this.summaryField = []
this.tableData = this.item.__config__.children || []
for (let i = 0; i < summaryField.length; i++) {
for (let o = 0; o < this.tableData.length; o++) {
const item = this.tableData[o]
if (this.tableData[o].__vModel__ === summaryField[i] && !item.__config__.noShow) {
this.summaryField.push({
value: '',
...item
})
}
}
}
this.$nextTick(() => this.getTableSummaries(val, this.item))
},
toThousands(val, column) {
if (val) {
let valList = val.toString().split('.')
let num = Number(valList[0])
let newVal = column.thousands ? num.toLocaleString() : num
return valList[1] ? newVal + '.' + valList[1] : newVal
} else {
return val
}
},
getTableSummaries(newVal, config) {
for (let i = 0; i < this.summaryField.length; i++) {
let val = 0
for (let j = 0; j < newVal.length; j++) {
if (newVal[j][this.summaryField[i].__vModel__]) {
let data = isNaN(newVal[j][this.summaryField[i].__vModel__]) ? 0 :
Number(newVal[j][this.summaryField[i].__vModel__])
val += data
}
}
let realVal = val && !Number.isInteger(val) ? Number(val).toFixed(2) : val;
if (this.summaryField[i].thousands) realVal = Number(realVal).toLocaleString('zh')
this.summaryField[i].value = realVal
}
},
clickIcon(e) {
this.$emit('clickIcon', e)
},
onTabChange(index) {
if (this.tabCurrent === index) return
this.tabCurrent = index;
this.$emit('tab-change', this.item, index)
this.$nextTick(() => {
uni.$emit('initCollapse')
uni.$emit('updateCode')
})
},
doPreviewImage(current, imageList) {
const images = imageList.map(item => this.define.baseURL + item.url);
uni.previewImage({
urls: images,
current: current,
success: () => {},
fail: () => {
uni.showToast({
title: '预览图片失败',
icon: 'none'
});
}
});
},
toDetail(item) {
const data = {
...item,
...(item.__config__.yunzhupaasKey === 'relationForm' ? {
sourceRelationForm: true,
propsValue: item.propsValue
} : {})
};
this.$emit('toDetail', data)
},
toTableDetail(item, value) {
item.__config__.defaultValue = value
this.$emit('toDetail', item)
},
getValue(item) {
if (Array.isArray(item.__config__.defaultValue)) {
if (['timeRange', 'dateRange'].includes(item.__config__.yunzhupaasKey)) {
return item.__config__.defaultValue.join('')
}
return item.__config__.defaultValue.join()
}
return item.__config__.defaultValue
},
}
}
</script>
<style lang="scss">
.detail-text-box {
width: 100%;
}
</style>

View File

@@ -0,0 +1,68 @@
<template>
<u-form class="yunzhupaas-wrap-form" :model="formData" ref="dataForm"
:label-position="formConf.labelPosition==='top'?'top':'left'"
:label-align="formConf.labelPosition==='right'?'right':'left'"
:label-width="formConf.labelWidth?formConf.labelWidth*1.5:150" :class='formConf.className'>
<template v-for="(item, index) in formConf.fields" :key="item.__config__.renderKey">
<Item :itemData="item" :formConf="formConf" :class="item.__config__.className" :formData="formData"
:ref="item.__vModel__?item.__vModel__: undefined" @toDetail="toDetail" @clickIcon='clickIcon' />
</template>
<u-modal v-model="show" :content="content" width='70%' border-radius="16" :content-style="contentStyle"
:titleStyle="titleStyle" :confirm-style="confirmStyle" :title="title" :confirm-text="$t('common.okText')">
</u-modal>
</u-form>
</template>
<script>
import Item from './Item'
export default {
components: {
Item
},
props: {
formConf: {
type: Object,
required: true
},
formData: {
type: Object,
},
loading: {
type: Boolean,
default: false
}
},
data() {
return {
show: false,
content: '',
contentStyle: {
fontSize: '28rpx',
padding: '20rpx',
lineHeight: '44rpx',
textAlign: 'left'
},
titleStyle: {
padding: '20rpx'
},
confirmStyle: {
height: '80rpx',
lineHeight: '80rpx',
},
title: this.$t('common.tipTitle'),
}
},
methods: {
clickIcon(e) {
if (!e.__config__.tipLabel && !e.helpMessage) return
this.content = e.helpMessage || e.__config__.tipLabel
this.title = e.__config__.label
if (e.__config__.yunzhupaasKey === 'card') this.title = e.header
if (e.__config__.yunzhupaasKey === 'groupTitle') this.title = e.content
this.show = true
},
toDetail(item) {
this.$emit('toDetail', item)
}
}
}
</script>

View File

@@ -0,0 +1,195 @@
<template>
<view class="yunzhupaas-wrap yunzhupaas-wrap-form">
<YunzhupaasParser v-if="!loading" ref="dynamicForm" :formConf="formConf" :key="key" @submit="sumbitForm" />
<view class="buttom-actions" v-if="origin !='scan'">
<u-button class="buttom-btn" @click.stop="resetForm">{{$t('common.resetText')}}</u-button>
<u-button class="buttom-btn" type="primary" @click.stop="submit" :loading="btnLoading">
{{getOkText}}
</u-button>
</view>
</view>
</template>
<script>
import {
createModel,
getModelInfo
} from '@/api/apply/visualDev'
export default {
props: ['config', 'modelId', 'isPreview', 'origin', 'id'],
data() {
return {
dataForm: {
data: ''
},
formConf: {},
key: +new Date(),
btnLoading: false,
loading: true,
isAdd: false,
userInfo: {}
}
},
computed: {
getOkText() {
const text = this.formConf.confirmButtonTextI18nCode ?
this.$t(this.formConf.confirmButtonTextI18nCode, this.formConf.confirmButtonText) :
this.formConf.confirmButtonText;
return text || this.$t('common.okText');
},
},
created() {
this.init()
},
methods: {
init() {
this.userInfo = uni.getStorageSync('userInfo') || {}
this.formConf = JSON.parse(this.config.formData)
this.loading = true
this.initData()
},
initData() {
this.$nextTick(() => {
if (this.origin === 'scan') {
let extra = {
modelId: this.modelId,
id: this.id,
type: 2
}
uni.setStorageSync('dynamicModelExtra', extra)
getModelInfo(this.modelId, this.id).then(res => {
this.dataForm = res.data
if (!this.dataForm.data) return
this.formData = JSON.parse(this.dataForm.data)
this.fillFormData(this.formConf, this.formData)
this.$nextTick(() => {
this.loading = false
})
})
} else {
this.formData = {}
this.loading = false
this.isAdd = true
this.fillFormData(this.formConf, this.formData)
}
this.key = +new Date()
})
},
fillFormData(form, data) {
const loop = list => {
for (let i = 0; i < list.length; i++) {
let item = list[i]
let vModel = item.__vModel__
let config = item.__config__
if (vModel) {
let val = data.hasOwnProperty(vModel) ? data[vModel] : config.defaultValue
if (!config.isSubTable) config.defaultValue = val
if (this.isAdd || config.isSubTable) { //新增时候,默认当前
if (config.defaultCurrent) {
if (config.yunzhupaasKey === 'datePicker') {
if (!data.hasOwnProperty(vModel)) {
let format = this.yunzhupaas.handelFormat(item.format)
let dateStr = this.yunzhupaas.toDate(new Date().getTime(), format)
let time = format === 'yyyy' ? '-01-01 00:00:00' : format === 'yyyy-MM' ?
'-01 00:00:00' : format === 'yyyy-MM-dd' ?
' 00:00:00' : ''
val = new Date(dateStr + time).getTime()
config.defaultValue = val
}
}
if (config.yunzhupaasKey === 'timePicker') {
if (!data.hasOwnProperty(vModel)) {
config.defaultValue = this.yunzhupaas.toDate(new Date(), item.format)
}
}
const organizeIdList = this.userInfo.organizeIdList
if (config.yunzhupaasKey === 'organizeSelect' && Array.isArray(organizeIdList) &&
organizeIdList.length) {
config.defaultValue = item.multiple ? [organizeIdList] : organizeIdList
}
const departmentId = this.userInfo.departmentId
if (config.yunzhupaasKey === 'depSelect' && departmentId) {
config.defaultValue = item.multiple ? [departmentId] : departmentId;
}
const positionIds = this.userInfo.positionIds
if (config.yunzhupaasKey === 'posSelect' && Array.isArray(positionIds) && positionIds
.length) {
config.defaultValue = item.multiple ? positionIds.map(o => o.id) : positionIds[
0].id
}
const roleIds = this.userInfo.roleIds
if (config.yunzhupaasKey === 'roleSelect' && Array.isArray(roleIds) && roleIds.length) {
config.defaultValue = item.multiple ? roleIds : roleIds[0];
}
const groupIds = this.userInfo.groupIds
if (config.yunzhupaasKey === 'groupSelect' && Array.isArray(groupIds) && groupIds
.length) {
config.defaultValue = item.multiple ? groupIds : groupIds[0];
}
const userId = this.userInfo.userId
if (config.yunzhupaasKey === 'userSelect' && userId) {
config.defaultValue = item.multiple ? [userId] : userId;
}
if (config.yunzhupaasKey === 'usersSelect' && userId) {
config.defaultValue = item.multiple ? [userId + '--user'] : userId + '--user';
}
if (config.yunzhupaasKey === 'sign' && this.userInfo.signImg) {
config.defaultValue = this.userInfo.signImg
}
}
}
if (this.origin === 'scan') this.$set(item, 'disabled', true)
let noShow = !config.noShow ? false : config.noShow
let isVisibility = false
if (!config.visibility || (Array.isArray(config.visibility) && config.visibility.includes(
'app'))) isVisibility = true
this.$set(config, 'isVisibility', isVisibility)
this.$set(config, 'noShow', noShow)
} else {
let noShow = false,
isVisibility = false
if (!config.visibility || (Array.isArray(config.visibility) && config.visibility.includes(
'app'))) isVisibility = true
this.$set(config, 'isVisibility', isVisibility)
this.$set(config, 'noShow', noShow)
}
if (config && config.children && Array.isArray(config.children)) loop(config.children)
}
}
loop(form.fields)
},
sumbitForm(data, callback) {
if (!data) return
this.btnLoading = true
this.dataForm.data = JSON.stringify(data)
if (callback && typeof callback === "function") callback()
createModel(this.modelId, this.dataForm).then(res => {
uni.showToast({
title: res.msg,
complete: () => {
setTimeout(() => {
this.btnLoading = false
uni.navigateBack()
}, 1500)
}
})
}).catch(() => {
this.btnLoading = false
})
},
submit() {
if (this.isPreview) return this.$u.toast('功能预览不支持数据保存')
this.$refs.dynamicForm && this.$refs.dynamicForm.submitForm()
},
resetForm() {
this.loading = true
this.$nextTick(() => {
this.loading = false
this.$refs.dynamicForm && this.$refs.dynamicForm.resetForm()
this.init()
this.key = +new Date()
})
}
}
}
</script>

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,199 @@
<template>
<view class="list u-p-b-20 u-p-l-20 u-p-r-20" ref="tableRef">
<view class="list-box">
<u-swipe-action :show="item.show" :index="index" v-for="(item, index) in list" :key="index"
@click="actionClick" @open="open" :options="options" :btnWidth="160" class="u-m-t-20">
<view class="item" @tap.stop="goDetail(item)">
<u-checkbox v-if="showCheckbox" @change="checkboxChange($event,item,index)" v-model="item.checked"
class="checkbox" @tap.stop shape="circle"></u-checkbox>
<view class="item-cell" v-for="(column,i) in columnList" :key="i">
<template v-if="column.yunzhupaasKey != 'table'">
<text class="item-cell-label">{{column.label}}:</text>
<text class="item-cell-content" v-if="['calculate','inputNumber'].includes(column.yunzhupaasKey)">
{{toThousands(item[column.prop],column)}}
</text>
<text class="item-cell-content text-primary" v-else-if="column.yunzhupaasKey == 'relationForm'"
@click.stop="relationFormClick(item,column)">
{{item[column.prop]}}
</text>
<view class="item-cell-content" v-else-if="column.yunzhupaasKey == 'sign'">
<YunzhupaasSign v-model="item[column.prop]" align="left" detailed />
</view>
<view class="item-cell-content" v-else-if="column.yunzhupaasKey == 'signature'">
<YunzhupaasSignature v-model="item[column.prop]" align="left" detailed />
</view>
<view class="item-cell-content" v-else-if="column.yunzhupaasKey == 'uploadImg'" @click.stop>
<YunzhupaasUploadImg v-model="item[column.prop]" detailed simple
v-if="item[column.prop]&&item[column.prop].length" />
</view>
<!-- #ifndef APP-HARMONY -->
<view class="item-cell-content" v-else-if="column.yunzhupaasKey == 'uploadFile'" @click.stop>
<YunzhupaasUploadFile v-model="item[column.prop]" detailed
v-if="item[column.prop]&&item[column.prop].length" align="left" />
</view>
<!-- #endif -->
<view class="item-cell-content" v-else-if="column.yunzhupaasKey == 'rate'">
<YunzhupaasRate v-model="item[column.prop]" :max="column.count" :allowHalf="column.allowHalf"
disabled />
</view>
<view class="item-cell-content item-cell-slider" v-else-if="column.yunzhupaasKey == 'slider'">
<YunzhupaasSlider v-model="item[column.prop]" :min="column.min" :max="column.max"
:step="column.step" disabled />
</view>
<view class="item-cell-content" v-else-if="column.yunzhupaasKey == 'input'">
<YunzhupaasInput v-model="item[column.prop]" detailed showOverflow :useMask="column.useMask"
:maskConfig="column.maskConfig" align='left' />
</view>
<text class="item-cell-content" v-else>{{item[column.prop]}}</text>
</template>
<tableCell v-else @click.stop class="tableCell" ref="tableCell" :label="column.label"
:childList="item[column.prop]" :children="column.children" :pageLen="3"
@cRelationForm="relationFormClick">
</tableCell>
</view>
<view class="item-cell" v-if="config.enableFlow==1">
<text class="item-cell-label">审批状态:</text>
<text :style="{color:useDefine.getFlowStatusColor(item.flowState)}">
{{useDefine.getFlowStatusContent(item.flowState)}}
</text>
</view>
</view>
</u-swipe-action>
</view>
</view>
</template>
<script>
import {
useDefineSetting
} from '@/utils/useDefineSetting';
import tableCell from '../tableCell.vue'
export default {
emits: ['selectCheckbox', 'handleClick', 'handleMoreClick', 'goDetail', 'relationFormClick', 'update:modelValue'],
components: {
tableCell
},
props: ['config', 'list', 'columnList', 'actionOptions', 'showSelect', 'checkedAll', 'modelValue', 'isMoreBtn',
'customBtnsList'
],
data() {
return {
selectData: [],
useDefine: useDefineSetting()
}
},
watch: {
checkedAll: {
handler(val) {
this.handleCheckAll()
},
immediate: true
}
},
computed: {
options() {
if (!this.customBtnsList?.length) return this.actionOptions;
return [{
text: this.$t('common.moreText'),
value: 'more',
style: {
backgroundColor: '#007aff'
}
},
...this.actionOptions,
];
},
showCheckbox() {
return this.showSelect
}
},
methods: {
open(index) {
this.list[index].show = true;
this.list.map((val, idx) => {
if (index != idx) this.list[idx].show = false;
})
},
/* 关联表单操作 */
relationFormClick(item, column) {
this.$emit('relationFormClick', item, column)
},
/* 跳转详情 */
goDetail(item) {
this.$emit('goDetail', item)
},
actionClick(itemIndex, btnIndex) {
if (this.options[btnIndex].value === 'remove') return this.$emit('handleClick', itemIndex)
if (this.options[btnIndex].value === 'more') return this.$emit('handleMoreClick', itemIndex)
},
/* 列表选择框 */
checkboxChange(e, item) {
const isSelected = e.value;
const itemIndex = this.list.indexOf(item);
if (itemIndex === -1) return;
const selectedItemsSet = new Set(this.selectData.map(selectedItem => {
return selectedItem.id;
}));
if (isSelected) {
selectedItemsSet.add(item.id);
} else {
selectedItemsSet.delete(item.id);
}
this.selectData = [...selectedItemsSet.values()].map(id => {
return this.list.find(listItem => listItem.id === id);
});
this.$emit('selectCheckbox', this.selectData);
},
/* 全部选中 */
handleCheckAll() {
this.selectData = []
if (this.checkedAll) this.selectData = this.list.filter(o => o.checked)
this.$emit('selectCheckbox', this.selectData)
},
/* 千分位操作 */
toThousands(val, column) {
if (val) {
let valList = val.toString().split('.')
let num = Number(valList[0])
let newVal = column.thousands ? num.toLocaleString() : num
return valList[1] ? newVal + '.' + valList[1] : newVal
} else {
return val
}
}
}
}
</script>
<style lang="scss">
.item {
padding: 0 !important;
.checkbox {
position: absolute;
top: 6rpx;
left: 8rpx;
z-index: 9999;
}
}
.right-option-box {
display: flex;
width: max-content;
.right-option {
width: 144rpx;
height: 100%;
font-size: 16px;
color: #fff;
background-color: #dd524d;
display: flex;
align-items: center;
justify-content: center;
}
.more-option {
background-color: #1890ff;
}
}
</style>

View File

@@ -0,0 +1,166 @@
<template>
<u-form :model="formData" ref="dataForm" :errorType="['toast']" label-position="left" label-width="150">
<u-form-item :label="item.label" :prop="item.id" v-for="(item, i) in formConfCopy" :key="i">
<YunzhupaasInput v-if="useInputList.includes(item.__config__.yunzhupaasKey)" input-align='right'
v-model="formData[item.id]" :placeholder="textPrefix+item.label" clearable />
<template v-if="['inputNumber','calculate'].includes(item.__config__.yunzhupaasKey)">
<YunzhupaasInputNumber v-model="formData[item.id]" :precision="item.precision"
:placeholder="textPrefix+item.__config__.label" v-if="item.__config__.isFromParam" />
<YunzhupaasNumberRange v-model="formData[item.id]"
:precision="!item.precision && item.__config__.yunzhupaasKey=='calculate'?0:item.precision" v-else />
</template>
<template v-if="['rate', 'slider'].includes(item.__config__.yunzhupaasKey)">
<YunzhupaasNumberRange v-model="formData[item.id]" :precision="item.allowHalf ? 1 : 0" />
</template>
<YunzhupaasSelect v-if="useSelectList.includes(item.__config__.yunzhupaasKey)" v-model="formData[item.id]"
:placeholder="selectPrefix+item.label" :options="item.options" :props="item.props"
:multiple="item.searchMultiple" :key="key" filterable />
<YunzhupaasCascader v-if="item.__config__.yunzhupaasKey==='cascader'" v-model="formData[item.id]"
:placeholder="selectPrefix+item.label" :options="item.options" :props="item.props" filterable
:showAllLevels="item.showAllLevels" :multiple="item.searchMultiple" />
<YunzhupaasAutoComplete v-if="item.__config__.yunzhupaasKey==='autoComplete'" v-model="formData[item.id]"
:interfaceName="item.interfaceName" :placeholder="selectPrefix+item.label"
:interfaceId="item.interfaceId" :total="item.total" :templateJson="item.templateJson"
:formData='formData' :relationField="item.relationField" :propsValue="item.propsValue"
:clearable='item.clearable' />
<YunzhupaasGroupSelect v-if="item.__config__.yunzhupaasKey==='groupSelect'" v-model="formData[item.id]"
:vModel='item.id' :multiple="item.searchMultiple" :disabled="item.disabled"
:placeholder="selectPrefix+item.label" :ableIds="item.ableIds" :selectType="item.selectType" />
<YunzhupaasRoleSelect v-if="item.__config__.yunzhupaasKey==='roleSelect'" v-model="formData[item.id]"
:multiple="item.searchMultiple" :disabled="item.disabled" :placeholder="selectPrefix+item.label"
:ableIds="item.ableIds" :selectType="item.selectType" />
<YunzhupaasOrganizeSelect v-if="['organizeSelect','currOrganize'].includes(item.__config__.yunzhupaasKey)"
v-model="formData[item.id]" :placeholder="selectPrefix+item.label" :multiple="item.searchMultiple"
:ableIds="item.ableIds" :selectType="item.selectType" />
<YunzhupaasDepSelect v-if="['depSelect','currDept'].includes(item.__config__.yunzhupaasKey)" v-model="formData[item.id]"
:placeholder="selectPrefix+item.label" :ableIds="item.ableIds" :selectType="item.selectType"
:multiple="item.searchMultiple" />
<YunzhupaasPosSelect v-if="['posSelect','currPosition'].includes(item.__config__.yunzhupaasKey)"
v-model="formData[item.id]" :placeholder="selectPrefix+item.label" :ableIds="item.ableIds"
:selectType="item.selectType" :multiple="item.searchMultiple" />
<YunzhupaasUserSelect v-if="['userSelect','createUser', 'modifyUser'].includes(item.__config__.yunzhupaasKey)"
v-model="formData[item.id]" :placeholder="selectPrefix+item.label" :ableDepIds="item.ableDepIds"
:ableIds="item.ableIds" :selectType="item.selectType!='custom'?'all':'custom'"
:multiple="item.searchMultiple" />
<YunzhupaasUsersSelect v-if="item.__config__.yunzhupaasKey==='usersSelect'" v-model="formData[item.id]"
:multiple="item.searchMultiple" :placeholder="selectPrefix+item.label" :selectType="item.selectType"
:ableIds="item.ableIds" :clearable="item.clearable" />
<YunzhupaasTreeSelect v-if="item.__config__.yunzhupaasKey==='treeSelect'" v-model="formData[item.id]"
:options="item.options" :props="item.props" :placeholder="selectPrefix+item.label" filterable
:multiple="item.searchMultiple" />
<YunzhupaasAreaSelect v-if="item.__config__.yunzhupaasKey==='areaSelect'" v-model="formData[item.id]"
:placeholder="selectPrefix+item.label" :level="item.level" :multiple="item.searchMultiple" />
<template v-if="useDateList.includes(item.__config__.yunzhupaasKey)||item.__config__.yunzhupaasKey==='datePicker'">
<YunzhupaasDatePicker v-model="formData[item.id]" :format='item.format' v-if="item.__config__.isFromParam" />
<YunzhupaasDateRange v-model="formData[item.id]" :format='item.format' v-else />
</template>
<YunzhupaasTimeRange v-if="item.__config__.yunzhupaasKey==='timePicker'" v-model="formData[item.id]"
:format='item.format' />
</u-form-item>
</u-form>
</template>
<script>
import {
getDictionaryDataSelector,
getDataInterfaceRes
} from '@/api/common'
const dyOptionsList = ['radio', 'checkbox', 'select', 'cascader', 'treeSelect'];
const useSelectList = ['radio', 'checkbox', 'select'];
const useInputList = ['input', 'textarea', 'text', 'link', 'billRule', 'location'];
const useDateList = ['createTime', 'modifyTime'];
const useArrList = ['cascader', 'address', 'numInput', 'calculate', ...useDateList]
export default {
props: ['formConf', 'webType', 'searchFormData'],
data() {
const data = {
useInputList,
useDateList,
useSelectList,
formConfCopy: this.$u.deepClone(this.formConf),
formData: this.$u.deepClone(this.searchFormData),
key: +new Date(),
textPrefix: this.$t('common.inputTextPrefix') + ' ',
selectPrefix: this.$t('common.chooseTextPrefix') + ' ',
}
this.initRelationForm(data.formConfCopy)
this.initFormData(data.formConfCopy, data.formData)
return data
},
watch: {
searchFormData(val) {
this.formData = val
}
},
methods: {
initFormData(componentList, formData) {
componentList.forEach(cur => {
const config = cur.__config__
if (dyOptionsList.indexOf(config.yunzhupaasKey) > -1) {
if (config.dataType === 'dictionary' && config.dictionaryType) {
getDictionaryDataSelector(config.dictionaryType).then(res => {
cur.options = res.data.list || []
this.key = +new Date()
this.resetForm()
})
}
if (config.dataType === 'dynamic' && config.propsUrl) {
const query = {
paramList: this.yunzhupaas.getParamList(config.templateJson) || []
};
getDataInterfaceRes(config.propsUrl, query).then(res => {
let list = res.data || []
cur.options = Array.isArray(list) ? list : [];
this.key = +new Date()
this.resetForm()
})
}
}
})
},
initRelationForm(componentList) {
componentList.forEach(cur => {
const config = cur.__config__
if (config.yunzhupaasKey == 'relationFormAttr' || config.yunzhupaasKey == 'popupAttr') {
const relationKey = cur.relationField.split("_yunzhupaasTable_")[0]
componentList.forEach(item => {
const noVisibility = Array.isArray(item.__config__.visibility) && !item
.__config__.visibility.includes('app')
if ((relationKey == item.id) && (noVisibility || !!item.__config__
.noShow)) {
cur.__config__.noShow = true
}
})
}
if (cur.__config__.children && cur.__config__.children.length) this.initRelationForm(cur
.__config__.children)
})
},
allCondition() {
for (let key in this.formData) {
if (!this.formData[key]) this.formData[key] = undefined
if (this.formData[key] && Array.isArray(this.formData[key]) && !this.formData[key]
.length) {
this.formData[key] = undefined
}
}
return this.formData
},
submitForm() {
this.$refs.dataForm.validate(valid => {
if (!valid) return
for (let key in this.formData) {
if (!this.formData[key]) this.formData[key] = undefined
if (this.formData[key] && Array.isArray(this.formData[key]) && !this.formData[key]
.length) {
this.formData[key] = undefined
}
}
this.$emit('submit', this.formData)
})
},
resetForm() {
this.$refs.dataForm.resetFields()
}
}
}
</script>

View File

@@ -0,0 +1,119 @@
<template>
<uni-collapse class='collapse' accordion ref="collapse" @change="collapseChange" @click.stop>
<uni-collapse-item :key="key">
<template v-slot:title>
<view class="u-font-24 u-flex">
<view style="width: 124rpx;text-align: right;">
<text>{{label+':'}}</text>
</view>
<text style="color: #606266;" class="u-m-l-28">{{$t('app.apply.expandData')}}</text>
</view>
</template>
<view class="collapse-item" v-for="(item,d) in dataList" :key="d">
<view v-if="d<allPageLen" class="item-cell-children">
<view class="item-cell" v-for="(cld,c) in children" :key="c">
<text
class="item-cell-label">{{cld.labelI18nCode ? $t(cld.labelI18nCode, cld.label) : cld.label}}:</text>
<text class="item-cell-content"
v-if="['calculate','inputNumber'].includes(cld.__config__.yunzhupaasKey)">
{{toThousands(item[cld.vModel],cld) }}
</text>
<text class="item-cell-content text-primary"
v-else-if="cld.__config__.yunzhupaasKey === 'relationForm'"
@click.stop="relationFormClick(item,cld)">
{{item[cld.vModel]}}
</text>
<view class="item-cell-content" v-else-if="cld.yunzhupaasKey == 'sign'">
<YunzhupaasSign v-model="item[cld.vModel]" align="left" detailed />
</view>
<view class="item-cell-content" v-else-if="cld.yunzhupaasKey == 'signature'">
<YunzhupaasSignature v-model="item[cld.vModel]" align="left" detailed />
</view>
<view class="item-cell-content" v-else-if="cld.yunzhupaasKey == 'uploadImg'" @click.stop>
<YunzhupaasUploadImg v-model="item[cld.vModel]" detailed simple
v-if="item[cld.vModel]&&item[cld.vModel].length" />
</view>
<!-- #ifndef APP-HARMONY -->
<view class="item-cell-content" v-else-if="cld.yunzhupaasKey == 'uploadFile'" @click.stop>
<YunzhupaasUploadFile v-model="item[cld.vModel]" detailed
v-if="item[cld.vModel]&&item[cld.vModel].length" align="left" />
</view>
<!-- #endif -->
<view class="item-cell-content" v-else-if="cld.yunzhupaasKey == 'rate'">
<YunzhupaasRate v-model="item[cld.vModel]" :max="cld.count" :allowHalf="cld.allowHalf" disabled />
</view>
<view class="item-cell-content item-cell-slider" v-else-if="cld.yunzhupaasKey == 'slider'">
<YunzhupaasSlider v-model="item[cld.vModel]" :min="cld.min" :max="cld.max" :step="cld.step"
disabled />
</view>
<view class="item-cell-content" v-else-if="cld.yunzhupaasKey == 'input'">
<YunzhupaasInput v-model="item[cld.vModel]" detailed showOverflow :useMask="cld.useMask"
:maskConfig="cld.maskConfig" align='left' />
</view>
<text class="item-cell-content" v-else>{{item[cld.vModel]}}</text>
</view>
</view>
</view>
<view class="loadMore" @click.stop="loadMore" v-if="!isAllData&&this.dataList.length>allPageLen">
加载更多
</view>
</uni-collapse-item>
</uni-collapse>
</template>
<script>
export default {
props: ['childList', 'label', 'children', 'pageLen', 'thousands', 'thousandsField'],
data() {
return {
dataList: [],
isAllData: false,
key: +new Date(),
allPageLen: 3
}
},
watch: {
childList: {
handler(val) {
this.dataList = val || []
this.allPageLen = this.pageLen
this.children.map(o => {
if (o.childLabel.length > 4) o.childLabel = o.childLabel.substring(0, 4)
})
},
immediate: true,
}
},
methods: {
toThousands(val, column) {
if (val) {
let valList = val.toString().split('.')
let num = Number(valList[0])
let newVal = column.thousands ? num.toLocaleString() : num
return valList[1] ? newVal + '.' + valList[1] : newVal
}
},
relationFormClick(item, cld) {
this.$emit('cRelationForm', item, cld)
},
loadMore() {
this.allPageLen = this.childList.length
this.isAllData = true
this.resizeCollapse()
},
collapseChange(e) {
if (!e) {
this.isAllData = false
setTimeout(() => {
this.allPageLen = this.pageLen
}, 500)
}
this.resizeCollapse()
},
resizeCollapse() {
setTimeout(() => {
this.$refs.collapse && this.$refs.collapse.resize()
}, 50)
}
}
}
</script>