123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348 |
- <template>
- <view>
- <uni-nav-bar :fixed="true" :statusBar="true" :border="false" height="44">
- <view class="nav-left">
- <view class="nav-left-text">{{config.fullName}}</view>
- </view>
- </uni-nav-bar>
- <view v-if="!showPsd">
- <template v-if="type==='form' || type==='list' || type === 'detail'">
- <view v-if="type==='form' || type === 'detail'">
- <view class="jnpf-wrap jnpf-wrap-form" v-if="!loading && (type==='form' || type === 'detail')">
- <JnpfParser :formConf="formConf" :isShortLink="true" ref="dynamicForm" @submit="sumbitForm"
- :key="newDate" />
- <view class="buttom-actions" v-if="type==='form'">
- <u-button class="buttom-btn" @click.stop="resetForm">重置</u-button>
- <u-button class="buttom-btn" type="primary" @click.stop="submit" :loading="btnLoading">
- {{formConf.confirmButtonText||'确定'}}
- </u-button>
- </view>
- <view class="buttom-actions" v-if="type==='detail'">
- <u-button class="buttom-btn" @click.stop="resetForm">取消</u-button>
- </view>
- </view>
- </view>
- <view v-if="type==='list' && flg">
- <List ref="List" :config="config" :modelId="modelId" :columnText="columnText"
- :columnCondition="columnCondition" :encryption='encryption' />
- </view>
- </template>
- </view>
- <view v-show="!showPsd"></view>
- <u-modal v-model="showPsd" :title-style="titleStyle" title="密码" @confirm="confirm" v-if="showPsd">
- <view class="slot-content u-p-l-32 u-p-r-22 u-p-t-20 u-p-b-20">
- <u-input type="password" placeholder="请输入密码" :border="true" v-model="password" />
- </view>
- </u-modal>
- </view>
- </template>
- <script>
- import {
- getConfig,
- createModel,
- getShortLink,
- checkPwd
- } from '@/api/apply/webDesign'
- import md5Libs from "/uni_modules/vk-uview-ui/libs/function/md5";
- import List from './list.vue'
- const getFormDataFields = item => {
- const config = item.__config__
- if (!config || !config.jnpfKey) return true
- const jnpfKey = config.jnpfKey
- const list = ["input", "textarea", "inputNumber", "switch", "datePicker", "timePicker", "colorPicker", "rate",
- "slider", "editor", "link", "text", "alert", 'table', "collapse", 'collapseItem', 'tabItem',
- "tab", "row", "card", "groupTitle", "divider", 'location', 'stepItem', 'steps'
- ]
- const fieldsSelectList = ["radio", "checkbox", "select", "cascader", "treeSelect"]
- if (list.includes(jnpfKey) || (fieldsSelectList.includes(jnpfKey) && config.dataType === 'static')) return true
- return false
- }
- export default {
- components: {
- List
- },
- data() {
- return {
- columnCondition: [],
- columnText: [],
- flg: false,
- password: '',
- titleStyle: {
- paddingTop: '24rpx'
- },
- showPsd: false,
- customStyle: {
- backgroundColor: '#fff'
- },
- dataForm: {
- data: ''
- },
- formConf: {},
- newDate: +new Date(),
- btnLoading: false,
- loading: true,
- modelId: '',
- config: {},
- type: 'form',
- listConfig: {},
- shortLinkData: {},
- formData: {},
- encryption: ''
- }
- },
- onLoad(e) {
- this.formData = e.formData ? JSON.parse(e.formData) : {};
- const decryptedData = this.jnpf.aesEncryption.decrypt(e.encryption)
- if (!decryptedData) return
- const decrypt = JSON.parse(decryptedData)
- this.encryption = e.encryption
- this.modelId = decrypt.modelId
- this.type = decrypt.type
- this.getShortLink()
- this.getConfig()
- },
- methods: {
- // 递归过滤
- recursivefilter(arr, value) {
- let newColumn = arr.filter(item => getFormDataFields(item))
- newColumn.forEach(x =>
- x.__config__ && x.__config__.children && Array.isArray(x.__config__.children) && (x
- .__config__.children = this.recursivefilter(x.__config__.children))
- )
- return newColumn
- },
- getConfig() {
- getConfig(this.modelId, this.encryption).then(res => {
- this.config = res.data || {}
- this.formConf = JSON.parse(this.config.formData) || {}
- this.beforeInit(this.formConf.fields)
- let fields = this.recursivefilter(this.formConf.fields)
- this.formConf.fields = fields
- this.fillFormData(fields, this.formData)
- this.$nextTick(() => {
- this.flg = true
- this.newDate = +new Date()
- this.loading = false
- })
- })
- },
- beforeInit(fields) {
- const loop = (list) => {
- for (var index = 0; index < list.length; index++) {
- const config = list[index].__config__
- if (config.children && config.children.length) loop(config.children)
- if (config.jnpfKey == 'tableGrid') {
- let newList = []
- for (var i = 0; i < config.children.length; i++) {
- let element = config.children[i]
- for (var j = 0; j < element.__config__.children.length; j++) {
- let item = element.__config__.children[j]
- newList.push(...item.__config__.children)
- }
- }
- list.splice(index, 1, ...newList)
- }
- }
- }
- loop(fields)
- },
- getShortLink() {
- getShortLink(this.modelId, this.encryption).then(res => {
- this.shortLinkData = res.data || {}
- this.columnCondition = JSON.parse(this.shortLinkData.columnCondition)
- this.columnText = JSON.parse(this.shortLinkData.columnText)
- if (this.type == 'list' && this.shortLinkData.columnPassUse == 1) this.showPsd = true
- if (this.type == 'form' && this.shortLinkData.formPassUse == 1) this.showPsd = true
- this.newDate = +new Date()
- })
- },
- confirm() {
- let data = {
- id: this.modelId,
- password: md5Libs.md5(this.password),
- type: this.type == 'form' ? 0 : 1,
- encryption: this.encryption
- }
- checkPwd(data).then(res => {
- this.showPsd = false
- this.newDate = +new Date()
- }).catch(err => {
- this.showPsd = true
- this.password = ''
- this.newDate = +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.custom && config.defaultCurrent) {
- if (config.jnpfKey === 'timePicker') {
- config.defaultValue = this.jnpf.toDate(new Date(), this.jnpf.handelFormat(item
- .format))
- }
- if (config.jnpfKey === 'datePicker') {
- config.defaultValue = new Date().getTime()
- }
- if (config.jnpfKey === 'organizeSelect' && (this.userInfo
- .organizeIdList instanceof Array && this.userInfo.organizeIdList.length > 0
- )) {
- config.defaultValue = item.multiple ? [this.userInfo.organizeIdList] :
- this.userInfo.organizeIdList
- }
- if (config.jnpfKey === 'depSelect' && this.userInfo.departmentId) {
- config.defaultValue = item.multiple ? [this.userInfo.departmentId] :
- this.userInfo.departmentId;
- }
- if (config.jnpfKey === 'posSelect' && (this.userInfo
- .positionIds instanceof Array && this.userInfo.positionIds.length > 0)) {
- config.defaultValue = item.multiple ? this.userInfo.positionIds.map(
- o => o.id) : this.userInfo.positionIds[0].id
- }
- if (config.jnpfKey === 'roleSelect' && (this.userInfo
- .roleIds instanceof Array && this.userInfo.roleIds.length > 0)) {
- config.defaultValue = item.multiple ? this.userInfo.roleIds : this.userInfo
- .roleIds[0];
- }
- if (config.jnpfKey === 'groupSelect' && (this.userInfo
- .groupIds instanceof Array && this.userInfo.groupIds.length > 0)) {
- config.defaultValue = item.multiple ? this.userInfo.groupIds : this
- .userInfo.groupIds[0];
- }
- if (config.jnpfKey === 'userSelect' && this.userInfo.userId) {
- config.defaultValue = item.multiple ? [this.userInfo.userId] : this
- .userInfo.userId;
- }
- if (config.jnpfKey === 'usersSelect' && this.userInfo.userId) {
- config.defaultValue = item.multiple ? [this.userInfo.userId + '--user'] :
- this.userInfo.userId + '--user';
- }
- }
- 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) && item
- .__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)
- },
- 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, this.encryption).then(res => {
- uni.showToast({
- title: res.msg,
- complete: () => {
- setTimeout(() => {
- this.btnLoading = false
- this.resetForm()
- }, 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.newDate = +new Date()
- this.$nextTick(() => {
- this.loading = false
- this.$refs.dynamicForm && this.$refs.dynamicForm.resetForm()
- })
- }
- }
- }
- </script>
- <style lang="scss">
- page {
- background-color: #f0f2f6;
- }
- .nav {
- z-index: 99999;
- .uni-navbar__content {
- z-index: 99999;
- }
- .uni-navbar__header-container {
- justify-content: center;
- }
- }
- .nav-left {
- display: flex;
- align-items: center;
- width: 100%;
- text-align: center;
- .nav-left-text {
- font-weight: 700;
- font-size: 32rpx;
- flex: 1;
- min-width: 0;
- white-space: nowrap;
- overflow: hidden;
- text-overflow: ellipsis;
- }
- .right-icons {
- font-weight: 700;
- margin-top: 2px;
- margin-left: 4px;
- transition-duration: 0.3s;
- }
- .select-right-icons {
- transform: rotate(-180deg);
- }
- }
- .pasd_box {
- width: 100%;
- padding: 60% 0;
- display: flex;
- flex-direction: row;
- justify-content: center;
- align-items: center;
- box-sizing: border-box;
- .pasd_box_input {
- box-sizing: border-box;
- .ipt {
- border-radius: 8rpx 0 0 8rpx;
- border: 1px solid red;
- }
- }
- }
- </style>
|