'前后端内容修改、样式、中英文'

This commit is contained in:
Fanzink
2023-01-13 16:54:26 +08:00
parent 3265b4a580
commit 5798e5b6e0
56 changed files with 761 additions and 142 deletions

View File

@@ -5,9 +5,8 @@
:visible.sync="visible"
@close="handleClose"
:distory-on-close="true"
:close-on-click-modal="false"
>
<div style="max-height: 60vh; overflow-y: scroll; overflow-x: hidden;">
:close-on-click-modal="false">
<div style="max-height: 60vh; overflow-y: scroll; overflow-x: hidden">
<el-form ref="dataForm" :model="dataForm" :rules="dataFormRules">
<!-- 如果需要更精细一点的布局可以根据配置项实现地再复杂一点但此处暂时全部采用一行两列布局 -->
<el-row v-for="n in rows" :key="n" :gutter="20">
@@ -18,16 +17,14 @@
v-if="configs.fields[(n - 1) * COLUMN_PER_ROW + (c - 1)]"
:prop="configs.fields[(n - 1) * COLUMN_PER_ROW + (c - 1)].name"
:key="`${n}-col-${c}-item`"
:label="getLabel(n, c)"
>
:label="getLabel(n, c)">
<!-- 暂时先不实现部分输入方式 -->
<el-input
v-if="getType(n, c) === 'input'"
:placeholder="getPlaceholder(n, c)"
v-model="dataForm[configs.fields[(n - 1) * COLUMN_PER_ROW + (c - 1)].name]"
clearable
:disabled="isDetail"
/>
:disabled="isDetail" />
<el-radio v-if="getType(n, c) === 'radio'" v-model="dataForm[configs.fields[(n - 1) * COLUMN_PER_ROW + (c - 1)].name]" :disabled="isDetail" />
<el-checkbox v-if="getType(n, c) === 'check'" v-model="dataForm[configs.fields[(n - 1) * COLUMN_PER_ROW + (c - 1)].name]" :disabled="isDetail" />
<el-select
@@ -36,8 +33,7 @@
v-model="dataForm[configs.fields[(n - 1) * COLUMN_PER_ROW + (c - 1)].name]"
clearable
:disabled="isDetail"
@change="emitSelectChange(configs.fields[(n - 1) * COLUMN_PER_ROW + (c - 1)].name, $event)"
>
@change="emitSelectChange(configs.fields[(n - 1) * COLUMN_PER_ROW + (c - 1)].name, $event)">
<el-option v-for="opt in configs.fields[(n - 1) * COLUMN_PER_ROW + (c - 1)].options" :key="opt.label + Math.random()" :label="opt.label" :value="opt.value" />
</el-select>
<el-switch v-if="getType(n, c) === 'switch'" v-model="dataForm[configs.fields[(n - 1) * COLUMN_PER_ROW + (c - 1)].name]" :disabled="isDetail" />
@@ -47,16 +43,14 @@
:options="configs.fields[(n - 1) * COLUMN_PER_ROW + (c - 1)].options"
:props="configs.fields[(n - 1) * COLUMN_PER_ROW + (c - 1)].props"
:disabled="isDetail"
clearable
/>
clearable />
<el-time-select v-if="getType(n, c) === 'time'" v-model="dataForm[configs.fields[(n - 1) * COLUMN_PER_ROW + (c - 1)].name]" :disabled="isDetail" />
<el-date-picker
v-if="getType(n, c) === 'date'"
v-bind="configs.fields[(n - 1) * COLUMN_PER_ROW + (c - 1)].props"
:placeholder="getPlaceholder(n, c)"
v-model="dataForm[configs.fields[(n - 1) * COLUMN_PER_ROW + (c - 1)].name]"
:disabled="isDetail"
/>
:disabled="isDetail" />
</el-form-item>
</el-col>
</el-row>
@@ -65,14 +59,13 @@
<template v-if="configs.extraComponents && configs.extraComponents.length > 0">
<el-form-item v-for="(ec, index) in configs.extraComponents" :key="ec.name + index" :label="ec.label" class="extra-components">
<component
style="margin-top: 40px;"
style="margin-top: 40px"
v-if="ec.hasModel"
:is="ec.component"
v-bind="ec.props"
v-model="dataForm[ec.name]"
@ready="handleEditorReady"
:read-only="isDetail"
/>
:read-only="isDetail" />
<!-- <component v-if="ec.hasModel" :is="ec.component" v-bind="ec.props" v-model="dataForm[ec.name]" /> -->
<component
v-else
@@ -80,8 +73,7 @@
v-bind="ec.props"
@uploader-update-filelist="handleUploadListUpdate($event, ec.props.extraParams.typeCode)"
:uploader-inject-file-list="/*用于设备分流的*/ fileList[ec.props.extraParams.typeCode]"
:read-only="isDetail"
/>
:read-only="isDetail" />
</el-form-item>
</template>
</el-form>
@@ -96,11 +88,14 @@
<el-button
v-if="
!isDetail &&
(operate.showAlways ||
(((dataForm.id && operate.showOnEdit) || (!dataForm.id && !operate.showOnEdit)) && (operate.permission ? $hasPermission(operate.permission) : true)))
(operate.showAlways ||
(((dataForm.id && operate.showOnEdit) || (!dataForm.id && !operate.showOnEdit)) && (operate.permission ? $hasPermission(operate.permission) : true)))
"
:key="`operate-${index}`"
:type="btnType[operate.name]"
:style="{
backgroundColor: btnType[operate.name],
color: btnColor[operate.name]
}"
@click="handleClick(operate)"
>{{ btnName[operate.name] }}</el-button
>
@@ -125,9 +120,17 @@ const title = {
// 或者也可以改造成自定义颜色:
const btnType = {
save: 'success',
update: 'primary',
reset: 'text'
add :'#0b58ff',
save: '#0b58ff',
update: '#0b58ff',
reset: ''
// cancel: 'text'
// add more...
}
const btnColor = {
save: '#fff',
update: '#fff',
reset: ''
// cancel: 'text'
// add more...
}
@@ -154,7 +157,7 @@ export default {
}
},
filters: {
nameFilter: function(name) {
nameFilter: function (name) {
if (!name) return null
// for i18n
const defaultNames = {
@@ -181,6 +184,7 @@ export default {
/** 按钮相关属性 */
btnName,
btnType,
btnColor,
defaultNames: {
name: i18n.t('name'),
code: i18n.t('code'),
@@ -222,7 +226,7 @@ export default {
/** 转换 configs.fields 的结构,把纯字符串转为对象 */
this.$nextTick(() => {
this.configs.fields = this.configs.fields.map(item => {
this.configs.fields = this.configs.fields.map((item) => {
if (typeof item === 'string') {
return { name: item }
}
@@ -230,13 +234,13 @@ export default {
})
/** 动态设置dataForm字段 */
this.configs.fields.forEach(item => {
this.configs.fields.forEach((item) => {
this.$set(this.dataForm, [item.name], '')
/** select 的默认值设置 */
if (item.type === 'select') {
const opts = item.options || []
const dft = opts.find(item => item.default || false)
const dft = opts.find((item) => item.default || false)
if (dft) {
this.$set(this.dataForm, [item.name], dft.value)
}
@@ -259,10 +263,10 @@ export default {
// 如果有 relatedField就需要在当前item的数据加载后刷新 relatedField 的列表
if (item.relatedField) {
this.$watch(
function() {
function () {
return this.dataForm[item.name]
},
function(val, old) {
function (val, old) {
if (val && val !== old) {
this.$emit('select-change', { name: item.name, id: val })
}
@@ -318,7 +322,7 @@ export default {
}
/** 检查是否需要额外的组件 */
this.configs.extraComponents &&
this.configs.extraComponents.forEach(item => {
this.configs.extraComponents.forEach((item) => {
// if (Object.hasOwn(this.dataForm, [item.name])) {
if (this.dataForm.hasOwnProperty(item.name)) {
return
@@ -409,7 +413,7 @@ export default {
this.fileList = {}
if (this.dataForm.files) {
// console.log('files: ', this.dataForm.files)
this.dataForm.files.forEach(file => {
this.dataForm.files.forEach((file) => {
// const fileName = file.fileUrl.split('/').pop()
/** [1] 处理 fileList */
// if (Object.hasOwn(this.fileList, file.typeCode)) {
@@ -439,7 +443,7 @@ export default {
this.shouldWait.then(() => {
if (this.tempForm.length) {
// console.log('create new, tempform', JSON.stringify(this.tempForm.length))
this.tempForm.forEach(item => {
this.tempForm.forEach((item) => {
// console.log('item data', item.data)
this.dataForm[item.name] = item.data
})
@@ -452,7 +456,7 @@ export default {
},
emitSelectChange(name, id) {
const currentField = this.configs.fields.find(item => item.name === name)
const currentField = this.configs.fields.find((item) => item.name === name)
if (currentField.relatedField) {
this.dataForm[currentField.relatedField] = null
}
@@ -464,7 +468,7 @@ export default {
handleClick(btn) {
/** 提取url */
const urls = {}
this.configs.operations.map(item => {
this.configs.operations.map((item) => {
urls[item.name] = {}
urls[item.name].url = item.url
urls[item.name].extraFields = item.extraFields || {}
@@ -474,7 +478,7 @@ export default {
case 'save':
case 'update':
/** 需要验证表单的操作 */
this.$refs['dataForm'].validate(valid => {
this.$refs['dataForm'].validate((valid) => {
if (valid) {
/** 对于文件上传的单独处理(合并处理) */
if (Object.keys(this.fileForm).length) {
@@ -513,7 +517,7 @@ export default {
this.$message.error(res.msg)
}
})
.catch(err => {
.catch((err) => {
this.$message({
message: err,
type: 'error',
@@ -557,7 +561,7 @@ export default {
this.$set(
this.fileForm,
typeCode,
filelist.map(item => item.id)
filelist.map((item) => item.id)
)
// console.log('after handleUploadListUpdate(): ', this.fileForm)
},

View File

@@ -1,3 +1,11 @@
/*
* @Descripttion:
* @version:
* @Author: fzq
* @Date: 2023-01-06 15:49:50
* @LastEditors: fzq
* @LastEditTime: 2023-01-13 16:46:13
*/
import i18n from '@/i18n'
export default {
@@ -20,6 +28,7 @@ export default {
delete: '#FF5454',
preview: '#f09843',
design: '#0b58ff',
edit: '#0b58ff'
// 'view-trend': 'red'
// add more...
},
@@ -57,7 +66,8 @@ export default {
for (const optionStr of this.injectData.head?.options) {
const optObj = typeof optionStr === 'object'
// btns.push(h('el-button', { props: { type: this.btnTypes[optionStr] } }, optionStr))
btns.push(h('el-button', { props: { type: 'text' }, style: { color: optObj ? this.colors[optionStr.name] : this.colors[optionStr] || '#409EFF' }, on: { click: this.emit.bind(null, optionStr) } }, typeof optionStr === 'object' ? this.text[optionStr.name] : this.text[optionStr]))
// 原色 #409EFF
btns.push(h('el-button', { props: { type: 'text' }, style: { color: optObj ? this.colors[optionStr.name] : this.colors[optionStr] || '#0b58ff' }, on: { click: this.emit.bind(null, optionStr) } }, typeof optionStr === 'object' ? this.text[optionStr.name] : this.text[optionStr]))
}
return h('span', null, btns)
}