diff --git a/src/views/haomo/components/forms/HmComplexForm.vue b/src/views/haomo/components/forms/HmComplexForm.vue index 696b7fa4739eee525a35e26619afc5ecec95f45e..0f51a3f3d8147d910be1a41136b8a78f5a3225af 100644 --- a/src/views/haomo/components/forms/HmComplexForm.vue +++ b/src/views/haomo/components/forms/HmComplexForm.vue @@ -9,61 +9,65 @@ <div> <!--表å•部分--> <el-form ref="form" + :label-position="formStyle && formStyle.formOptions && formStyle.formOptions.labelPosition || 'right'" element-loading-text="åŠ è½½ä¸" + :label-width="formStyle && formStyle.formOptions && formStyle.formOptions.labelWidth || '170px'" :model="formModel" :rules="rules" - label-width="200px" - style="width:80%;margin:0 auto"> + :style=" formStyle && formStyle.formOptions && formStyle.formOptions.style || {width:'80%',margin:'0 auto'}"> <el-form-item v-for="column in showUserColumns" + v-show="!column.hide" :key="column.id" :label="column.name" + :rules="column.rule?column.rule:null" :prop="column.codeCamel"> <!--el-input<el-input v-if="column.codeCamel==='password'" type="password" v-model="formModel[column.codeCamel]"></el-input>--> - - <!-- 1 普通input --> - <el-input v-if="column.widgetType === 1" - v-model="formModel[column.codeCamel]" - :disabled="column.disabled" - @change="useralidate(formModel[column.codeCamel])"></el-input> <!-- 2 日期选择 --> - <el-date-picker v-else-if="column.widgetType === 6 || column.type === 'datetime' || column.type === 'date'" + <!-- --> + <el-date-picker v-if="column.widgetType === 6 || column.type === 'datetime' || column.type === 'date'" v-model="formModel[column.codeCamel]" + :style="formStyle && formStyle.datePicker && formStyle.datePicker.style || {width: '65%'}" :type="column.dateType || 'date'" align="right" :disabled="column.disabled" - @change="logTimeChange" + @change="column.change && column.change($event)" :value-format="column.dateFormate || 'yyyy-MM-dd'" :picker-options="pickerOptions"> </el-date-picker> <!-- 3 下拉框 --> <el-select v-else-if="column.widgetType === 2" v-model="formModel[column.codeCamel]" - @change="selectChange" + @change="column.change && column.change($event)" + :style="formStyle && formStyle.select && formStyle.select.style || {width: '65%'}" :multiple="column.multiple" :disabled="column.disabled" + style="width: 50%" clearable> - <el-option v-for="item in column.options" - :key="item.value" + <el-option v-for="(item,key) in column.options" + :key="key" :label="item.label" :value="item.value"> </el-option> </el-select> <!-- 4 文本域 --> <el-input v-else-if="column.widgetType === 4" + :style="formStyle && formStyle.textarea && formStyle.textarea.style || {width: '65%'}" v-model="formModel[column.codeCamel]" type="textarea" :disabled="column.disabled" - :autosize="{ minRows: 2, maxRows: 5}" - :rows="2"> + :resize="formStyle && formStyle.textarea && formStyle.textarea.resize || 'vertical'" + :autosize="formStyle && formStyle.textarea && formStyle.textarea.autosize || { minRows: 4, maxRows: 6}" + :rows="formStyle && formStyle.textarea && formStyle.textarea.rows || 4" @change="column.change && column.change($event)"> </el-input> <!-- 5 å¤é€‰æ¡† --> <el-checkbox v-else-if="column.widgetType === 3 && !column.options" v-model="formModel[column.codeCamel]" :disabled="column.disabled" + @change="column.change && column.change($event)" true-label="1" false-label="0"></el-checkbox> <el-checkbox-group v-else-if="column.widgetType === 3 && column.options" v-model="formModel[column.codeCamel]" :disabled="column.disabled" - @change="checkboxsChange"> + @change="column.change && column.change($event)"> <el-checkbox v-for="option in column.options" :label="option" :key="option">{{option}}</el-checkbox> </el-checkbox-group> @@ -71,28 +75,39 @@ <quill-editor v-else-if="column.widgetType === 5" ref="textEditor" :disabled="column.disabled" v-model="formModel[column.codeCamel]" + :style="formStyle && formStyle.quillEdito && formStyle.quillEdito.style || {width:'65%'}" :options="editorOption" @blur="onEditorBlur($event)" @focus="onEditorFocus($event)" + @change="column.change && column.change($event)" @ready="onEditorReady($event)"> </quill-editor> <!-- 7 å•选框 --> <el-radio-group v-else-if="column.widgetType === 7" :disabled="column.disabled" + @change="column.change && column.change($event)" v-model="formModel[column.codeCamel]"> - <el-radio v-for="(option,key) in column.options" - :key="key" :label="key">{{option}}</el-radio> + <el-radio v-for="option in column.options" + :key="option.label" :label="option.label">{{option.value}}</el-radio> </el-radio-group> <!-- 8 文件 --> <el-upload v-else-if="column.widgetType === 8" - class="upload-demo" - action="/api/upload" - :on-remove="handleRemove" - multiple - :on-exceed="handleExceed"> + name="picture" + :action=" column.url || '/api/upload'" + :on-remove="handleRemove" + :file-list="fileList" + :multiple="column.multiple" + ref="upload" + :on-success="uploadSuccess"> <el-button slot="trigger" size="small" type="primary" :disabled="column.disabled">选喿–‡ä»¶</el-button> </el-upload> + <!-- 1 普通input --> + <el-input v-else + :style="formStyle && formStyle.input && formStyle.input.style || {width:'65%'}" + v-model="formModel[column.codeCamel]" + :disabled="column.disabled" + @change="column.change && column.change($event)"></el-input> </el-form-item> <!--按钮--> <el-form-item v-if="buttons && buttons.length > 0"> @@ -105,7 +120,10 @@ @click="resetForm(btn.method)">{{btn.text}}</el-button> <el-button v-if="btn.type === 3" type="primary" - @click="btn.method">{{btn.text}}</el-button> + @click="cancel(btn.method)">{{btn.text}}</el-button> + <el-button v-if="!btn.type" + type="primary" + @click="cancel(btn.method)">{{btn.text}}</el-button> </el-col> </el-form-item> </el-form> @@ -149,34 +167,46 @@ /** * å¿…ä¼ ï¼ŒæŒ‡å®šè¦æ˜¾ç¤ºçš„表å•å—æ®µåŠç±»åž‹ã€‚æ•°ç»„çš„å…ƒç´ ä¸ºå¯¹è±¡ç±»åž‹ï¼Œå¯¹è±¡çš„å±žæ€§æœ‰nameã€codeCamelã€widgetTypeã€disabled〠* optionsã€multipleã€dateTypeç‰ï¼Œä¸åŒçš„表å•类型需é…置的属性ä¸åŒï¼Œ - * codeCamelå¿…é¡»æœ‰ï¼Œè¡¨ç¤ºè¦æ˜¾ç¤ºçš„表å•å—æ®µ, - * nameè¡¨ç¤ºè‡ªå®šä¹‰çš„å—æ®µå,如果ä¸ä¼ ,默认为数æ®åº“ä¸çš„å—æ®µå, - * widgetTypeè¡¨ç¤ºè¯¥å—æ®µè¦æ˜¾ç¤ºçš„表å•类型(æ™®é€šè¾“å…¥æ¡†ã€æ–‡æœ¬åŸŸã€å¯Œæ–‡æœ¬ã€ä¸‹æ‹‰æ¡†...),ä¸ä¼ 默认为普通input - * å–值1-7(1表示普通输入框,2表示下拉框,3表示å¤é€‰æ¡†,4表示文本域,5表示富文本,6表示日期,7表示å•选框), + * codeCamelå±žæ€§ï¼Œè¡¨ç¤ºè¦æ˜¾ç¤ºçš„表å•å—æ®µ, å¦‚æžœå…¶ä»–å—æ®µéƒ½ä¸éœ€è¦ä¼ ,å¯ä»¥åªå†™codeCamel的值,比如['username','departmentId'] + * name属性å¯é€‰ï¼Œè¡¨ç¤ºè‡ªå®šä¹‰çš„å—æ®µå,如果ä¸ä¼ ,默认为数æ®åº“ä¸çš„å—æ®µå, + * change属性å¯é€‰ï¼Œå€¼ä¸ºå‡½æ•°ç±»åž‹ï¼Œè¡¨ç¤ºinputçš„changeäº‹ä»¶çš„æ‰§è¡Œæ–¹æ³•ï¼Œå‚æ•°å³ä¸ºinput输入内容 + * default属性å¯é€‰(å¤é€‰æ¡†ä¸æ”¯æŒ),设置默认值,å–值规范å‚考form/index.vue + * hide属性å¯é€‰ï¼Œè®¾ç½®è¯¥è¡¨å•å—æ®µæ˜¯å¦æ˜¾ç¤º,值为boolean + * widgetType属性å¯é€‰ï¼Œè¡¨ç¤ºè¯¥å—æ®µè¦æ˜¾ç¤ºçš„表å•类型(æ™®é€šè¾“å…¥æ¡†ã€æ–‡æœ¬åŸŸã€å¯Œæ–‡æœ¬ã€ä¸‹æ‹‰æ¡†...),ä¸ä¼ 默认为普通input + * å–值1-8(1表示普通输入框,2表示下拉框,3表示å¤é€‰æ¡†,4表示文本域,5表示富文本,6表示日期,7表示å•选框,8è¡¨ç¤ºæ–‡ä»¶ä¸Šä¼ ), * 若表å•类型为下拉框/å¤é€‰æ¡†/å•é€‰æ¡†ï¼Œè¿˜éœ€ä¼ å…¥optionså—æ®µï¼Œå€¼ä¸ºæ•°ç»„(æ•°ç»„å…ƒç´ æ˜¯ä¸‹æ‹‰æ¡†/å¤é€‰æ¡†/å•选框的选项), * 对于å¤é€‰æ¡†ï¼Œå¦‚æžœåªæœ‰ä¸€ä¸ªå¤‡é€‰é¡¹åˆ™ä¸å¿…ä¼ options, - * 若表å•类型为下拉框,还å¯ä¼ å…¥multipleå—æ®µï¼Œå–值true/false,表示是å¦å¤šé€‰ï¼Œé»˜è®¤false - * 若表å•类型为时间日期,å¯ä¼ å…¥dateTypeå—æ®µï¼Œå€¼ä¸ºdateï¼ˆåªæ˜¾ç¤ºæ—¥æœŸï¼‰æˆ–datetime(显示日期和时间),如果ä¸ä¼ , + * 若表å•类型为下拉框,还å¯ä¼ å…¥multipleå—æ®µï¼Œå–值boolean类型,true/false,表示是å¦å¤šé€‰ï¼Œé»˜è®¤false + * 若表å•类型为时间日期,å¯ä¼ å…¥dateTypeå—æ®µï¼Œå€¼ä¸º'date'ï¼ˆåªæ˜¾ç¤ºæ—¥æœŸï¼‰æˆ–'datetime'(显示日期和时间),如果ä¸ä¼ , * é»˜è®¤åªæ˜¾ç¤ºæ—¥æœŸ; å¯ä¼ å…¥dateFormateå—æ®µï¼Œä¸ºæ—¥æœŸæ ¼å¼ï¼Œå–值éµå¾ªelementUI DatePicker组件ä¸çš„æ—¥æœŸæ ¼å¼ï¼Œ - * 比如 åªæ˜¾ç¤ºæ—¥æœŸå–值'yyyy-MM-dd',显示日期和时间å–值'yyyy-MM-dd HH:mm:ss',如果ä¸ä¼ é»˜è®¤ä¸ºåªæ˜¾ç¤ºæ—¥æœŸå–值'yyyy-MM-dd',dateå—æ®µå’ŒdateFormateå—æ®µå–值须对应 - * 所有的表å•类型都å¯ä¼ å…¥disabledå—æ®µï¼Œå–值true/false,表示是å¦ç¦ç”¨ï¼Œé»˜è®¤ä¸ç¦ç”¨ + * 比如 åªæ˜¾ç¤ºæ—¥æœŸå–值'yyyy-MM-dd',显示日期和时间å–值'yyyy-MM-ddHH:mm:ss', + * 如果ä¸ä¼ é»˜è®¤ä¸ºåªæ˜¾ç¤ºæ—¥æœŸå–值'yyyy-MM-dd',dateå—æ®µå’ŒdateFormateå—æ®µå–值须对应 + * disabled属性å¯é€‰ï¼Œå–值boolean类型,true/false,表示是å¦ç¦ç”¨ï¼Œé»˜è®¤ä¸ç¦ç”¨ + * rule属性å¯é€‰ï¼Œè¿›è¡Œè‡ªå®šä¹‰éªŒè¯è§„则,ruleå–值规范å‚ç…§elementUIï¼Œä¸‹é¢æœ‰ç®€å•示例 * 示例:[ - { name: '用户åç§°', codeCamel: 'username', widgetType: 1, disabled: true }, - { name: '电å邮件', codeCamel: 'email', widgetType: 5, disabled: false }, - { name: '选择类型', codeCamel: 'type', widgetType: 2, multiple: false, - options: [ - { value: 0, label: '选项1' }, - { value: 1, label: '选项2' }, - { value: 2, label: '选项3' }, - { value: 3, label: '选项4' }, - { value: 4, label: '选项5' } - ] - }, - { name: '部门ID', codeCamel: 'departmentId', widgetType: 3, options: ['美女', '帅哥'] }, - { codeCamel: 'password', widgetType: 4 }, - { name: '新建时间', codeCamel: 'createTime', widgetType: 6, dateType: 'datetime', dateFormate: 'yyyy-MM-dd HH:mm:ss' }, - { name: '登陆id', codeCamel: 'loginid', widgetType: 7, options: ['会员', '访客'] }, - { name: '选择头åƒ', codeCamel: 'avatar', widgetType: 8 } + { name: '用户åç§°', codeCamel: 'username', widgetType: 1, disabled: true, + rule: { required: true, message: '用户åä¸èƒ½ä¸ºç©º', trigger: 'blur' } + }, + { name: '电å邮件', codeCamel: 'email', widgetType: 5, disabled: false, + rule: [ + { required: true, message: '请输入邮箱地å€', trigger: 'blur' }, + { type: 'email', message: '请输入æ£ç¡®çš„邮箱地å€', trigger: 'blur,change' } + ] + }, + { name: '选择类型', codeCamel: 'type', widgetType: 2, multiple: false, + options: [ + { value: 0, label: '选项1' }, + { value: 1, label: '选项2' }, + { value: 2, label: '选项3' }, + { value: 3, label: '选项4' }, + { value: 4, label: '选项5' } + ] + }, + { name: '部门ID', codeCamel: 'departmentId', widgetType: 3, options: ['美女', '帅哥'] }, + { codeCamel: 'password', widgetType: 4 }, + { name: '新建时间', codeCamel: 'createTime', widgetType: 6, dateType: 'datetime', dateFormate: 'yyyy-MM-dd HH:mm:ss' }, + { name: '登陆id', codeCamel: 'loginid', widgetType: 7, options: ['会员', '访客'] }, + { name: '选择头åƒ', codeCamel: 'avatar', widgetType: 8 } ] */ columns: { @@ -193,16 +223,18 @@ /** * éžå¿…ä¼ ï¼ŒæŒ‡å®šè¦æ˜¾ç¤ºçš„æŒ‰é’®åŠç±»åž‹ï¼Œé»˜è®¤ä¸æ˜¾ç¤ºã€‚ * 类型(typeï¼‰å…³ç³»åˆ°æŒ‰é’®è¦æ‰§è¡Œçš„æ–¹æ³•,type=1,执行组件的æäº¤æ–¹æ³•,还å¯ä»¥ä¼ 入了methodå—æ®µï¼Œå€¼ä¸ºå‡½æ•°ï¼Œ - * 该函数会作为æäº¤æ–¹æ³•的回调函数执行,åŒæ—¶è¿˜å¯ä»¥ä¼ å…¥beforeSubmitå—æ®µï¼Œå€¼ä¸ºå‡½æ•°ï¼Œå‡½æ•°æŽ¥å—一个包å«è¡¨å•æ•°æ®çš„Object - * ç±»åž‹å‚æ•°ï¼Œè¯¥å‡½æ•°å¯ä»¥åœ¨æäº¤ä¹‹å‰å¯¹è¡¨å•æ•°æ®è¿›è¡Œå¤„ç†ï¼Œå‚数类似{username: 'name', loginid: 'id'},å…¶ä¸é”®ä¸º - * è°ƒç”¨è€…ä¼ å…¥çš„codeCamel + * 该函数会作为æäº¤æ–¹æ³•的回调函数执行,函数接å—ä¸€ä¸ªå‚æ•°ä¸ºæ–°å»ºæˆ–修改的数æ®, + * åŒæ—¶è¿˜å¯ä»¥ä¼ å…¥beforeSubmitå—æ®µï¼Œå€¼ä¸ºå‡½æ•°ï¼Œå‡½æ•°æŽ¥å—ä¸¤ä¸ªå‚æ•°(value,isCancel) + * value为包å«è¡¨å•æ•°æ®çš„对象,{username: 'name', loginid: 'id'},å…¶ä¸é”®ä¸ºè°ƒç”¨è€…ä¼ å…¥çš„codeCamel + * 该函数å¯ä»¥åœ¨æäº¤ä¹‹å‰å¯¹è¡¨å•æ•°æ®è¿›è¡Œå¤„ç†ï¼Œå¹¶è¿”回数æ®ï¼›å¯¹è±¡isCancel包å«ä¸€ä¸ªå€¼ä¸ºfalse的属性cancelSubmit + * 如果需è¦å–消æäº¤ï¼Œå°†cancelSubmit值改为true * type=2,执行组件的é‡ç½®æ–¹æ³•,å¦‚æžœç”¨æˆ·ä¼ å…¥äº†method,会作为é‡ç½®æ–¹æ³•的回调函数执行 * type=3ï¼Œç›´æŽ¥æ‰§è¡Œç”¨æˆ·ä¼ å…¥çš„æ–¹æ³• * 如果è¦ä¼ 入了确定/å–æ¶ˆçš„å›žè°ƒå‡½æ•°ï¼Œè¯·å…ˆä¼ å…¥å¯¹åº”çš„æŒ‰é’® * 示例:[ - * {text: '确定', type: '1', method: method1}, - * {text: 'é‡ç½®', type: '2', method: method2}, - * {text: 'å–æ¶ˆ', type: '3', method: method3} + * {text: '确定', type: 1, method: method1, beforeSubmit: this.processData}, + * {text: 'é‡ç½®', type: 2, method: method2}, + * {text: 'å–æ¶ˆ', type: 3, method: method3} * ] */ buttons: { @@ -224,33 +256,93 @@ layout: { type: Object, required: false + }, + /** + * 用æ¥å°†æœ¬è¡¨çš„外链嗿®µ(table_idç±»ä¼¼çš„å—æ®µ)指å‘的外链表相关è”, æ ¼å¼ä¸º: + * { + * "hm_user": { //外链表 è¡¨å æœ¬è¡¨æ‰€å¯¹åº”的主键表) + * includes:['user_id'] // 与主表所对应的外键 + * } + * } + * + */ + includes: { + type: Object, + required: false + }, + /** + * 用æ¥å°†å…¶ä»–è¡¨çš„å¤–é“¾å—æ®µæŒ‡å‘本表关è”ï¼ŒåŒæ—¶è¿”回数æ®, æ ¼å¼ä¸º: + * { + * 'auth_token': { //主键id所对应的外键表 表å1 (本表所对应的外键表) + * includes: ['user_id'] //å¤–é”®è¡¨çš„å¤–é”®å—æ®µ + * } + * } + */ + refers: { + type: Object, + required: false + }, + /** + * 请求æˆåŠŸæˆ–å¤±è´¥æ—¶çš„æç¤ºä¿¡æ¯,æ ¼å¼ä¸º: + * tips: { + * hidde: false, // æ˜¯å¦æ˜¾ç¤ºæç¤ºï¼Œé»˜è®¤false显示 + * newSuccess: { text: 'å‘布æˆåŠŸ' }, // 新建æˆåŠŸçš„æç¤º + * newError: { text: 'å‘布失败' }, // 新建失败的æç¤º + * editSuccess: { text: '编辑æˆåŠŸ' }, // 编辑æˆåŠŸçš„æç¤º + * editError: { text: '编辑失败' } // 编辑失败的æç¤º + * otherError: { text: 'æ²¡æœ‰ä¼ ID,ä¸å¯ä»¥æäº¤' } + * } + */ + tips: { + type: Object, + required: false + }, + /** + * è¡¨å•æ ·å¼è®¾ç½®,æ ¼å¼ä¸º: + * formStyle: { + * formOptions: { labelWidth: '170px', labelPosition: 'right' }, + * datePicker: { style: { width: '60%' }}, + * input: { style: { width: '60%' }}, + * select: { style: { width: '60%' }}, + * textarea: { + * style: { width: '60%' }, + * resize: 'none', + * autosize: { minRows: 3, maxRows: 5 }, + * rows: 3 + * }, + * quillEdito: { style: { width: '65%' }} + * }, + */ + formStyle: { + type: Object, + required: false } }, data() { - var validateUsername = (rule, value, callback) => { - // console.log(value.length) - if (!value) { - callback(new Error('请输入用户å')) - } else if ((value.length < 2 || value.length > 10)) { - callback(new Error('用户å长度在 2 到 10 个å—符')) - } else { - callback() - } - } - var validatePassword = (rule, value, callback) => { - if (value.length > 0 && !(/^(?![0-9]+$)(?![a-zA-Z]+$)[0-9A-Za-z]{6,20}$/.test(value))) { - callback(new Error('密ç å¿…é¡»åŒæ—¶åŒ…嫿•°å—å’Œå—æ¯ 6-20ä½')) - } else { - callback() - } - } - var validateMobile = (rule, value, callback) => { - if (value.length > 0 && !(/^((0\d{2,3}-\d{7,8})|(1[3584]\d{9}))$/.test(value))) { - callback(new Error('请输入æ£ç¡®çš„电è¯å·ç 或手机å·')) - } else { - callback() - } - } + // var validateUsername = (rule, value, callback) => { + // // console.log(value.length) + // if (!value) { + // callback(new Error('请输入用户å')) + // } else if ((value.length < 2 || value.length > 10)) { + // callback(new Error('用户å长度在 2 到 10 个å—符')) + // } else { + // callback() + // } + // } + // var validatePassword = (rule, value, callback) => { + // if (value.length > 0 && !(/^(?![0-9]+$)(?![a-zA-Z]+$)[0-9A-Za-z]{6,20}$/.test(value))) { + // callback(new Error('密ç å¿…é¡»åŒæ—¶åŒ…嫿•°å—å’Œå—æ¯ 6-20ä½')) + // } else { + // callback() + // } + // } + // var validateMobile = (rule, value, callback) => { + // if (value.length > 0 && !(/^((0\d{2,3}-\d{7,8})|(1[3584]\d{9}))$/.test(value))) { + // callback(new Error('请输入æ£ç¡®çš„电è¯å·ç 或手机å·')) + // } else { + // callback() + // } + // } // var validateEmail = (rule, value, callback) => { // if (value.length > 0) { // if (!(/^[A-Za-z0-9\u4e00-\u9fa5]+@[a-zA-Z0-9_-]+(\.[a-zA-Z0-9_-]+)+$/.test(value))) { @@ -266,26 +358,26 @@ formModel: {}, // åŒå‘绑定的数æ®å˜é‡ showUserColumns: [], // è¦æ˜¾ç¤ºçš„å—æ®µ rules: { - username: [ - { validator: validateUsername, trigger: 'change' } + // username: [ + // { validator: validateUsername, trigger: 'change' } // { required: true, message: '请输入用户å', trigger: 'blur' }, // { min: 2, max: 10, message: '长度在 2 到 10 个å—符', trigger: 'blur' } - ], - loginid: [ - // { required: true, message: '请输入登陆ID', trigger: 'blur' } - ], - password: [ - { validator: validatePassword, trigger: 'change' } - // { pattern: /^(?![0-9]+$)(?![a-zA-Z]+$)[0-9A-Za-z]{6,20}$/, message: '密ç å¿…é¡»åŒæ—¶åŒ…嫿•°å—å’Œå—æ¯ 6-20ä½', trigger: 'change' } - ], - mobile: [ - { validator: validateMobile, trigger: 'change' } - // { pattern: /^((0\d{2,3}-\d{7,8})|(1[3584]\d{9}))$/, message: '请输入æ£ç¡®çš„电è¯å·ç ', trigger: 'change' } - ], - email: [ - // { validator: validateEmail, trigger: 'change' } - { type: 'email', message: '请输入æ£ç¡®çš„邮箱', trigger: 'change' } - ] + // ], + // loginid: [ + // { required: true, message: '请输入登陆ID', trigger: 'blur' } + // ], + // password: [ + // { validator: validatePassword, trigger: 'change' } + // { pattern: /^(?![0-9]+$)(?![a-zA-Z]+$)[0-9A-Za-z]{6,20}$/, message: '密ç å¿…é¡»åŒæ—¶åŒ…嫿•°å—å’Œå—æ¯ 6-20ä½', trigger: 'change' } + // ], + // mobile: [ + // { validator: validateMobile, trigger: 'change' } + // { pattern: /^((0\d{2,3}-\d{7,8})|(1[3584]\d{9}))$/, message: '请输入æ£ç¡®çš„电è¯å·ç ', trigger: 'change' } + // ] + // email: [ + // { validator: validateEmail, trigger: 'change' } + // { type: 'email', message: '请输入æ£ç¡®çš„邮箱', trigger: 'change' } + // ] }, editorOption: { // 富文本选项é…ç½® placeholder: '', @@ -299,9 +391,9 @@ } }, pickerOptions: { // 日期选项é…ç½® - disabledDate(time) { - return time.getTime() > Date.now() - }, + // disabledDate(time) { + // return time.getTime() > Date.now() + // }, shortcuts: [{ text: '今天', onClick(picker) { @@ -322,45 +414,88 @@ picker.$emit('pick', date) } }] - } + }, + fileList: [], // ä¸Šä¼ æ–‡ä»¶åˆ—è¡¨ + fileCode: '', // ä¸Šä¼ ç»„ä»¶å¯¹åº”çš„æ•°æ®åº“å—æ®µ + isCancel: { cancelSubmit: false } } }, created() { // this.validate() this.init() this.getList() - console.log(this.buttons) + // console.log(this.buttons) }, methods: { - createRule() { - _.each() + handleRemove(file, fileList) { + // console.log(self.formModel) }, - useralidate(value) { - // console.log(event) - console.log(value) + handlePreview(file) { + console.log(file) }, - handleRemove(file, fileList) { - console.log(file, fileList) + uploadSuccess(response, file, fileList) { + const self = this + console.log('ä¸Šä¼ æˆåŠŸ') + // console.log(response) + // console.log('fileList', fileList) + // console.log(self.fileList) + _.each(self.columns, function(item, index) { + if (item.widgetType === 8) { + _.forEach(self.formModel, function(value, key) { + if (item.codeCamel === key) { + self.formModel[key] = response.message || response.visitName + } + }) + } + }) + // console.log(404, self.formModel) }, - handleExceed(files, fileList) { - this.$message.warning(`当å‰é™åˆ¶é€‰æ‹© 3 个文件,本次选择了 ${files.length} 个文件,共选择了 ${files.length + fileList.length} 个文件`) + // inputChange(val) { + // // console.log(event) + // // console.log(val) + // }, + // checkboxChange(val) { + // console.log(val) + // }, + // checkboxsChange(val) { + // console.log(val) + // }, + // selectChange(val) { + // console.log(val) + // }, + // radioChange(val) { + // console.log(val) + // }, + // logTimeChange(val) { + // console.log(val) + // }, + // textareaChange(val) { + // console.log(val) + // }, + // onEditorChange({ quill, html, text }) { + // console.log(quill) + // console.log(html) + // console.log(text) + // // this.content = html + // }, + onEditorBlur(val) { + // console.log(val) }, - checkboxsChange(val) { - console.log(val) + onEditorFocus(val) { + // console.log('editor focus!') }, - selectChange(val) { - console.log(val) + onEditorReady(val) { + // console.log('editor ready!') }, // åˆ¤æ–æ˜¯å¦ä¸€ä¸ªå¯¹è±¡çš„æ‰€æœ‰å±žæ€§éƒ½ä¸ºç©º isEmpty(obj) { - _.forEach(obj, function(val) { - if (val) return false - }) + for (var key in obj) { + if (obj[key] && _.trim(obj[key])) { + return false + } + } return true }, - logTimeChange(value) { - console.log(value) - }, validate() { const self = this // this.columnsæ•°ç»„å…ƒç´ æœ¬èº«å¿…é¡»æ˜¯string或者object. 且必须是schemaä¸å®šä¹‰çš„列 @@ -381,15 +516,6 @@ } }) }, - onEditorBlur(editor) { - // console.log('editor blur!') - }, - onEditorFocus(editor) { - // console.log('editor focus!') - }, - onEditorReady(editor) { - // console.log('editor ready!') - }, // å˜åœ¨tableId,修改数æ®å‰å…ˆèŽ·å–æ•°æ® getList() { const self = this @@ -402,49 +528,63 @@ } */ self.Loading = false // console.log(self.formModel) - var formArray = _.keys(self.formModel) + var formArray = _.keys(self.formModel) // æå–formModel的属性到数组 // console.log(formArray) - self.formModel = _.pick(resp.data, formArray) - // console.log(self.formModel) + self.formModel = _.pick(resp.data, formArray) // æ ¹æ®æ•°ç»„ä¸çš„属性æå–出dataä¸å¯¹åº”çš„æ•°æ® + + // 下拉框多选时将å—符串转为数组 + _.each(self.columns, function(item, index) { + if (item.widgetType === 2 && item.multiple === true) { + _.forEach(self.formModel, function(value, key) { + if (item.codeCamel === key) { + // console.log(11111, self.formModel[key]) + self.formModel[key] = self.formModel[key].split(',') + } + }) + } + }) + // console.log(2222, self.formModel) }) }, + // åˆå§‹åŒ– init() { const self = this if (self.columns && self.columns.length) { - self.showUserColumns = JSON.parse(JSON.stringify(self.columns)) - // console.log(self.showUserColumns) - // å°†å—符串对象进行替æ¢å¤„ç† + self.showUserColumns = _.cloneDeep(self.columns) + // console.log(504, self.showUserColumns) + // console.log(514, self.formModel) + // 处ç†ä¼ æ¥çš„表å•å—æ®µ _.each(self.showUserColumns, function(column, index) { - if (typeof column === 'object') { + if (typeof column === 'string') { // 生æˆä¸€ä¸ªæ–°å¯¹è±¡ - const tmp = _.keyBy(self.schema['columns'], 'codeCamel')[column.codeCamel] - // console.log(tmp) - // self.$set(tmp, 'code', tmp.code.toLowerCase()) + const tmp = _.keyBy(self.schema['columns'], 'codeCamel')[column] + /* self.$set(tmp, 'code', tmp.code.toLowerCase()) column.name && self.$set(tmp, 'name', column.name) // è‡ªå®šä¹‰å—æ®µå - self.$set(tmp, 'widgetType', column.widgetType || 1) - // column.validate && self.$set(tmp, 'validate', column.validate) + column.rule && self.$set(tmp, 'rule', column.rule) // è®¾ç½®è¡¨å•æ ¡éªŒè§„则 column.disabled && self.$set(tmp, 'disabled', column.disabled) // 设置是å¦ç¦ç”¨ column.options && self.$set(tmp, 'options', column.options) // 设置下拉框或者多选的选项 column.multiple && self.$set(tmp, 'multiple', column.multiple) // 设置下拉框是å¦å¤šé€‰ column.dateType && self.$set(tmp, 'dateType', column.dateType) // è®¾ç½®æ—¥æœŸè¡¨å•æ˜¾ç¤ºç±»åž‹ column.dateFormate && self.$set(tmp, 'dateFormate', column.dateFormate) // è®¾ç½®æ—¥æœŸæ ¼å¼ + column.change && self.$set(tmp, 'change', column.change) // 设置change函数 + column.url && self.$set(tmp, 'url', column.url) // è®¾ç½®æ–‡ä»¶ä¸Šä¼ åœ°å€ */ + self.$set(tmp, 'widgetType', 1) // 设置表å•类型 self.$set(self.showUserColumns, index, tmp) // é¡ºåº } }) console.log(self.showUserColumns) // æå–v-model绑定的å˜é‡ _.each(self.showUserColumns, function(item) { - if (item.widgetType === 3 && item.options && item.options.length > 0) { + if (item.widgetType === 8 || (item.widgetType === 3 && item.options && item.options.length > 0)) { self.$set(self.formModel, item.codeCamel, []) } else { - self.$set(self.formModel, item.codeCamel, '') + item.default ? self.$set(self.formModel, item.codeCamel, item.default) : self.$set(self.formModel, item.codeCamel, '') } }) if (!request.defaults.baseURL) { request.defaults.baseURL = '/org/api' - console.log('没有') } - console.log(request.defaults.baseURL) + // console.log(request.defaults.baseURL) // åŠ è½½ç‰å¾… if (self.tableId) { self.Loading = true @@ -465,13 +605,36 @@ onSubmit(callback, processData) { const self = this console.log('点击了æäº¤å‡½æ•°') - // console.log(self.formModel) - self.formModel = processData ? processData(self.formModel) : self.formModel // å¯¹è¡¨å•æ•°æ®è¿›è¡Œå¤„ç† console.log(self.formModel) - // if (self.isEmpty(self.formModel)) return + // å¯¹è¡¨å•æ•°æ®è¿›è¡Œå¤„ç† + self.formModel = processData ? processData(self.formModel, self.isCancel) : self.formModel + // 如果在processDataä¸ç¦æ¢æäº¤äº†ï¼Œæ˜¾ç¤ºæç¤ºä¿¡æ¯ + if (self.isCancel.cancelSubmit) { + console.log('å–æ¶ˆæäº¤') + if (self.tips && !self.tips.hidde) { + self.$message({ + message: self.tips.otherError.text, + type: 'error' + }) + } + return + } + // self.formModel = JSON.stringify(self.formModel) + // var params = _.cloneDeep(self.formModel) + // params = JSON.stringify(params) + // console.log(self.formModel) + // 如果所有值都为空 ç¦æ¢æäº¤ + if (self.isEmpty(self.formModel)) { + self.$message({ + message: 'ä¸èƒ½éƒ½ä¸ºç©º', + type: 'error' + }) + return + } + // 验è¯ã€æäº¤ self.$refs.form.validate((valid) => { if (valid) { - console.log('valid通过!') + // console.log('valid通过!') // å˜åœ¨tableId åˆ™ä¿®æ”¹ä¿¡æ¯ if (self.tableId) { request(self.schema.modelUnderscorePlural + '/' + self.tableId + '/edit', { @@ -483,7 +646,7 @@ var str = [] // åˆ é™¤ç©ºå€¼çš„å±žæ€§ obj = _.omitBy(obj, function(value) { - return !value + return value === null // åˆ é™¤value=null的属性,剩下的返回给新对象 }) for (var p in obj) { str.push(encodeURIComponent(p) + '=' + encodeURIComponent(obj[p])) @@ -492,12 +655,35 @@ } }).then(resp => { console.log('修改æˆåŠŸ') - self.resetForm() + // self.resetForm() + if (self.tips && !self.tips.hidde) { + self.$message({ + message: self.tips.editSuccess.text, + type: 'success' + }) + } + // self.formModel = {} // æ–°å»ºå®Œæˆæ¸…ç©ºæ•°æ® if (typeof (callback) === 'function') { - callback() + callback(resp.data) + } + }).catch(err => { + console.log(err) + if (self.tips && !self.tips.hidde) { + self.$message({ + message: self.tips.editError.text, + type: 'error' + }) } }) } else { // ä¸å˜åœ¨tableId åˆ™åˆ›å»ºä¸€æ¡æ•°æ® + console.log(self.formModel) + // if (self.isEmpty(self.formModel)) { + // self.$message({ + // message: 'ä¸èƒ½éƒ½ä¸ºç©º', + // type: 'error' + // }) + // return + // } request(self.schema.modelUnderscorePlural + '/new', { method: 'post', headers: { 'Content-Type': 'application/x-www-form-urlencoded;charset=UTF-8' }, @@ -512,14 +698,33 @@ } }).then(resp => { console.log('创建æˆåŠŸ') + if (self.tips && !self.tips.hidde) { + self.$message({ + message: self.tips.newSuccess.text, + type: 'success' + }) + } + // self.formModel = {} // æ–°å»ºå®Œæˆæ¸…ç©ºæ•°æ® // self.resetForm() if (typeof (callback) === 'function') { - callback() + callback(resp.data) + } + }).catch(err => { + console.log(err) + if (self.tips && !self.tips.hidde) { + self.$message({ + message: self.tips.newError.text, + type: 'error' + }) } }) } } else { console.log('æäº¤å¤±è´¥!!') + self.$message({ + message: 'éªŒè¯æœªé€šè¿‡', + type: 'error' + }) return false } }) @@ -535,8 +740,20 @@ * æ¸…ç©ºæ‰€æœ‰è¾“å…¥åŠæç¤ºä¿¡æ¯ã€‚ */ resetForm(callback) { + // const self = this console.log('é‡ç½®') this.$refs.form.resetFields() + // console.log(self.formModel) + // // 清空 + // _.each(self.formModel, function(value, index) { + // self.formModel[index] = '' + // }) + // 执行回调 + if (typeof (callback) === 'function') { + callback() + } + }, + cancel(callback) { if (typeof (callback) === 'function') { callback() } diff --git a/src/views/haomo/components/forms/index.vue b/src/views/haomo/components/forms/index.vue index 8c6313002f25cd86bf24e90c6abfa25006e8cc47..bde8ee940a93542b3ec69c4d8ff5d519feba47e8 100644 --- a/src/views/haomo/components/forms/index.vue +++ b/src/views/haomo/components/forms/index.vue @@ -1,12 +1,12 @@ <template> - <!--:tableId="tableId"--> + <!--:refers="judgeRefers"--> <div> <hm-complex-form :schema="schema['HmUser']" :columns="showUserColumns" :buttons="showUserButtons" - :tableId="tableId" :layout="layout" - > + :tips="tips" + :refers="userRefers"> </hm-complex-form> </div> </template> @@ -25,34 +25,119 @@ }, data() { return { - // widgetType值 1:普通input 2:下拉框 (如果是下拉框 å†ä¼ 一个options表示下拉框选项)3:å¤é€‰æ¡† 4:文本域 5:富文本 6:日期 7:å•选框 + // widgetType值 1:普通input 2:下拉框 (如果是下拉框 å†ä¼ 一个options表示下拉框选项)3:å¤é€‰æ¡† 4:文本域 5:富文本 6:日期 7:å•选框 8: æ–‡ä»¶ä¸Šä¼ showUserColumns: [ - { name: '用户åç§°', codeCamel: 'username', widgetType: 1, disabled: true }, - { name: '电å邮件', codeCamel: 'email', widgetType: 5, disabled: false }, - { name: '选择类型', codeCamel: 'type', widgetType: 2, multiple: false, + // 1普通input + { name: '选择类型', codeCamel: 'type', widgetType: 1, disabled: false, + change: this.inputChange + // rule: { required: true, message: '用户åä¸èƒ½ä¸ºç©º', trigger: 'blur' } + // hide: true + // default: '默认值', + }, + // 5富文本 + { name: '电å邮件', codeCamel: 'email', widgetType: 5, disabled: false, + change: this.inputChange, hide: false + // rule: [ + // { required: true, message: '请输入邮箱地å€', trigger: 'blur' }, + // { type: 'email', message: '请输入æ£ç¡®çš„邮箱地å€', trigger: 'blur,change' } + // ] + }, + // 2下拉框 + { name: '用户åç§°', codeCamel: 'username', widgetType: 2, multiple: false, + change: this.inputChange, // default: [1], 如果开å¯å¤šé€‰ï¼Œé»˜è®¤é€‰ä¸é¡¹ç”¨æ•°ç»„[1]ã€[1,2,3] options: [ - { value: 0, label: '选项1' }, - { value: 1, label: '选项2' }, - { value: 2, label: '选项3' }, - { value: 3, label: '选项4' }, - { value: 4, label: '选项5' } + { value: '1', label: 'ä¼ä¸š' }, // 下拉框的label是选项文å—,value是选ä¸å€¼ + { value: '2', label: '代ç†å•†' }, + { value: '3', label: '会员' }, + { value: '4', label: '访客' } ] }, - { name: '部门ID', codeCamel: 'departmentId', widgetType: 3, options: ['美女', '帅哥'] }, - { codeCamel: 'password', widgetType: 4 }, - { name: '新建时间', codeCamel: 'createTime', widgetType: 6, dateType: 'datetime', dateFormate: 'yyyy-MM-dd HH:mm:ss' }, - { name: '登陆id', codeCamel: 'loginid', widgetType: 7, options: ['会员', '访客'] }, - { name: '选择头åƒ', codeCamel: 'avatar', widgetType: 8 } + // 3多选 䏿”¯æŒé»˜è®¤å€¼ + { name: '部门ID', codeCamel: 'departmentId', widgetType: 3, options: ['美女', '帅哥'], change: this.inputChange }, + // 4密ç + { name: '密ç ', codeCamel: 'password', widgetType: 4, change: this.inputChange }, + // 'password', + // 6日期 + { name: '新建时间', codeCamel: 'createTime', widgetType: 6, dateType: 'datetime', + dateFormate: 'yyyy-MM-dd HH:mm:ss', change: this.inputChange + // default: '2018-01-01 00:07:08' + }, + // 7å•选 + { name: '登陆id', codeCamel: 'loginid', widgetType: 7, + options: [ + { label: 1, value: '会员' }, // å•选的value是选项文å—,label是选ä¸å€¼ + { label: 2, value: '访客' } + ], // default: 1 + change: this.inputChange }, + // 8文件 + { name: '选择头åƒ', codeCamel: 'avatar', widgetType: 8, url: '/api/upload' } // url是åŽå°æŽ¥å£åœ°å€ + ], + showUserColumns2: [ + // 1普通input + { name: '用户åç§°', codeCamel: 'username', widgetType: 1 }, + { name: '部门ID', codeCamel: 'departmentId', widgetType: 1 }, + { name: '部门åç§°', codeCamel: 'departmentName', widgetType: 1 }, + { name: '密ç ', codeCamel: 'password', widgetType: 1 }, + { name: '电è¯', codeCamel: 'mobile', widgetType: 1 }, + { name: '电å邮件', codeCamel: 'email', widgetType: 1 }, + { name: '新建时间', codeCamel: 'createTime', widgetType: 1 }, + { name: '登陆id', codeCamel: 'loginid', widgetType: 1 } ], + userIncludes: { + 'hm_user': { + includes: ['user_id'] + } + }, + // 主查外 + userRefers: { + 'cc_shift': { + includes: ['applicant_id'] + } + }, // è¦æ˜¾ç¤ºæŒ‰é’® showUserButtons: [ { text: '确定', type: 1, method: this.method1, beforeSubmit: this.processData }, { text: 'é‡ç½®', type: 2, method: this.method2 }, + { text: '生æˆ', method: this.method4 }, { text: 'å–æ¶ˆ', type: 3, method: this.method3 } ], // showUserButtons: [] // å¸ƒå±€æ–¹å¼ - layout: { left: 6, middle: 12, right: 6 } + layout: { left: 4, middle: 16, right: 4 }, + // 自定义æç¤ºæ¶ˆæ¯ + tips: { + hidde: false, // æ˜¯å¦æ˜¾ç¤ºæç¤ºï¼Œé»˜è®¤false显示 + newSuccess: { text: 'å‘布æˆåŠŸ' }, // 新建æˆåŠŸçš„æç¤º + newError: { text: 'å‘布失败' }, // 新建失败的æç¤º + editSuccess: { text: '编辑æˆåŠŸ' }, // 编辑æˆåŠŸçš„æç¤º + editError: { text: '编辑失败' }, // 编辑失败的æç¤º + otherError: { text: '填写有误,ä¸å¯ä»¥æäº¤' } // processDataä¸å–消æäº¤çš„æç¤º + }, + // å„ç±»åž‹è¡¨å•æ ·å¼è®¾ç½® + formStyle: { + formOptions: { + labelWidth: '170px', + labelPosition: 'right' + }, + datePicker: { style: { width: '60%' }}, + input: { style: { width: '60%' }}, + select: { style: { width: '60%' }}, + textarea: { + style: { width: '60%' }, + resize: 'none', + autosize: { minRows: 3, maxRows: 5 }, + rows: 3 + }, + quillEdito: { style: { width: '65%' }} + }, + // 'cc_option': { + // includes: ['ccSubjectId'] + // } + judgeRefers: { // 主查外 + 'cc_hm_user': { + includes: ['applicantId'] + } + } } }, computed: { @@ -62,12 +147,18 @@ created() { this.schema = schema // console.log(this.schema) - this.tableId = '0e26566e953449a7a7500c34be39fd26' + // this.tableId = '1efff63125954583b0ac5a9c252b9041' + this.tableId = 'b08d2220d2574bf2ac09ec4f470ed999' }, methods: { - processData(object) { - console.log(object) - return object + inputChange(val) { + // console.log(event) + console.log(val) + }, + processData(object, isCancel) { + isCancel.cancelSubmit = false // 如果è¦å–消æäº¤ï¼Œè®¾ä¸ºtrue + console.log(125, object) + return object // 将数æ®è¿”回 }, method1() { console.log('method1') @@ -78,15 +169,8 @@ method3() { console.log('method3') }, - usernameValidate() { - console.log(1) - // if (!value) { - // callback(new Error('请输入用户å')) - // } else if ((value.length < 2 || value.length > 10)) { - // callback(new Error('用户å长度在 2 到 10 个å—符')) - // } else { - // callback() - // } + method4() { + console.log('method4') } } } diff --git a/src/views/haomo/components/tables/HmComplexTable.vue b/src/views/haomo/components/tables/HmComplexTable.vue index e2c5b5d5901f8b1f2dd3c232a2c227d1c9388345..cc4175cf6f8ee678c64c73d7190d1c77a8685288 100644 --- a/src/views/haomo/components/tables/HmComplexTable.vue +++ b/src/views/haomo/components/tables/HmComplexTable.vue @@ -3,104 +3,98 @@ <!-- 过滤 --> <div class="filter-container"> <el-form :inline="true"> - <!-- 过滤æ¡ä»¶ --> - <span v-for="filter in filters" class="hm-complex-table__filter-span"> - <el-input @keyup.enter.native="handleFilter" - style="width: 200px;" - class="filter-item" - :placeholder="filter.placeholder" - v-if="filter.isShow && isShowFilter(filter)" - v-model="listQuery.filters[schema['modelUnderscore']][getFilterColumn(filter)][getFilterOper(filter)]"> - </el-input> - - <el-input @keyup.enter.native="handleFilter" - style="width: 200px;" - class="filter-item" - :placeholder="filter.placeholder[0]" - v-if="filter.isShow && !isShowFilter(filter) && !isDatetimeFilter(filter)" - v-model="listQuery.filters[schema['modelUnderscore']][getFilterColumn(filter)][getFilterOper(filter)]"> - </el-input> - <el-input @keyup.enter.native="handleFilter" - style="width: 200px;" - class="filter-item" - :placeholder="filter.placeholder[1]" - v-if="filter.isShow && !isShowFilter(filter) && !isDatetimeFilter(filter)" - v-model="listQuery.filters[schema['modelUnderscore']][getFilterColumn(filter)][getFilterOperTwin(filter)]"> - </el-input> - - <el-date-picker type="datetime" - align="right" - class="filter-item hm-complex-table__filter-span" - @keyup.enter.native="handleFilter" - value-format="yyyy-MM-dd HH:mm:ss" - :picker-options="pickerOptions" - :placeholder="filter.placeholder[0]" - v-if="filter.isShow && !isShowFilter(filter) && isDatetimeFilter(filter)" - v-model="listQuery.filters[schema['modelUnderscore']][getFilterColumn(filter)][getFilterOper(filter)]"> - </el-date-picker> - <el-date-picker type="datetime" - align="right" - class="filter-item" - @keyup.enter.native="handleFilter" - value-format="yyyy-MM-dd HH:mm:ss" - :picker-options="pickerOptions" - :placeholder="filter.placeholder[1]" - v-if="filter.isShow && !isShowFilter(filter) && isDatetimeFilter(filter)" - v-model="listQuery.filters[schema['modelUnderscore']][getFilterColumn(filter)][getFilterOperTwin(filter)]"> - </el-date-picker> - </span> - <!-- end 过滤æ¡ä»¶ --> - - <!--预定义按钮--> - <el-button-group v-if="buttonGroup"> - <el-button class="filter-item" type="primary" v-waves icon="el-icon-search" @click="handleFilter">æœç´¢</el-button> - <el-button class="filter-item" type="primary" :loading="downloadLoading" v-waves icon="el-icon-download" v-if="isShowExport" @click="handleDownload">导出</el-button> - <el-button class="filter-item" type="primary" v-waves icon="el-icon-plus" v-if="isShowNewButton" @click="openDialog('newData')">新建</el-button> - <el-button class="filter-item" type="primary" v-waves icon="el-icon-refresh" v-if="isShowRefresh" @click="refreshList">刷新</el-button> - <el-button class="filter-item" type="primary" v-waves icon="el-icon-close" v-if="multipleSelection.length" @click="BatchRemove">批é‡åˆ 除</el-button> - </el-button-group> - <span v-if="!buttonGroup"> - <el-button class="filter-item" type="primary" v-waves icon="el-icon-search" @click="handleFilter">æœç´¢</el-button> - <el-button class="filter-item" type="primary" :loading="downloadLoading" v-waves icon="el-icon-download" v-if="isShowExport" @click="handleDownload">导出</el-button> - <el-button class="filter-item" type="primary" v-waves icon="el-icon-plus" v-if="isShowNewButton" @click="openDialog('newData')">新建</el-button> - <el-button class="filter-item" type="primary" v-waves icon="el-icon-refresh" v-if="isShowRefresh" @click="refreshList">刷新</el-button> - <el-button class="filter-item" type="primary" v-waves icon="el-icon-close" v-if="multipleSelection.length" @click="BatchRemove">批é‡åˆ 除</el-button> - </span> - - <!--自定义--> - <span v-if="definedOperate.length" v-for="operate in definedOperate"> - <!--自定义按钮--> - <el-button v-if="operate.type == 'button'" class="filter-item" type="primary" v-waves :icon="operate.icon" @click="operate.func">{{operate.label}}</el-button> - <!--自定义下拉选择--> - <el-form-item v-if="operate.type == 'select'" :label="operate.label"> - <el-select v-model="operate.value" :placeholder="operate.placeholder"> - <el-option v-for="o in operate.options" :label="o.label" :value="o.code"></el-option> - </el-select> - </el-form-item> - <!--自定义输入框--> - <el-form-item v-if="operate.type == 'input'" :label="operate.label"> + <!-- 过滤æ¡ä»¶ --> + <span v-for="filter in filters" class="hm-complex-table__filter-span"> <el-input @keyup.enter.native="handleFilter" style="width: 200px;" class="filter-item" - :placeholder="operate.placeholder" - v-model="operate.value"> + :placeholder="filter.placeholder" + v-if="filter.isShow && isShowFilter(filter)" + v-model="listQuery.filters[schema['modelUnderscore']][getFilterColumn(filter)][getFilterOper(filter)]"> </el-input> - </el-form-item> - <!--自定义时间选择--> - <el-form-item v-if="operate.type == 'datetime'" :label="operate.label"> + + <el-input @keyup.enter.native="handleFilter" + style="width: 200px;" + class="filter-item" + :placeholder="filter.placeholder[0]" + v-if="filter.isShow && !isShowFilter(filter) && !isDatetimeFilter(filter)" + v-model="listQuery.filters[schema['modelUnderscore']][getFilterColumn(filter)][getFilterOper(filter)]"> + </el-input> + <el-input @keyup.enter.native="handleFilter" + style="width: 200px;" + class="filter-item" + :placeholder="filter.placeholder[1]" + v-if="filter.isShow && !isShowFilter(filter) && !isDatetimeFilter(filter)" + v-model="listQuery.filters[schema['modelUnderscore']][getFilterColumn(filter)][getFilterOperTwin(filter)]"> + </el-input> + + <el-date-picker type="datetime" + align="right" + class="filter-item hm-complex-table__filter-span" + @keyup.enter.native="handleFilter" + value-format="yyyy-MM-dd HH:mm:ss" + :placeholder="filter.placeholder[0]" + v-if="filter.isShow && !isShowFilter(filter) && isDatetimeFilter(filter)" + v-model="listQuery.filters[schema['modelUnderscore']][getFilterColumn(filter)][getFilterOper(filter)]"> + </el-date-picker> <el-date-picker type="datetime" align="right" class="filter-item" @keyup.enter.native="handleFilter" value-format="yyyy-MM-dd HH:mm:ss" - :picker-options="pickerOptions" - :placeholder="operate.placeholder" - v-model="operate.value"> + :placeholder="filter.placeholder[1]" + v-if="filter.isShow && !isShowFilter(filter) && isDatetimeFilter(filter)" + v-model="listQuery.filters[schema['modelUnderscore']][getFilterColumn(filter)][getFilterOperTwin(filter)]"> </el-date-picker> - </el-form-item> - </span> - - + </span> + <!-- end 过滤æ¡ä»¶ --> + <!--自定义--> + <span v-if="definedOperate.length" v-for="operate in definedOperate"> + <!--自定义按钮--> + <el-button v-if="operate.type == 'button'" class="filter-item" type="primary" v-waves :icon="operate.icon" @click="operate.func">{{operate.label}}</el-button> + <!--自定义下拉选择--> + <el-form-item v-if="operate.type == 'select'" :label="operate.label"> + <el-select v-model="operate.value" :placeholder="operate.placeholder" clearable> + <el-option v-for="o in operate.options" :label="o.label" :value="o.code"></el-option> + </el-select> + </el-form-item> + <!--自定义输入框--> + <el-form-item v-if="operate.type == 'input'" :label="operate.label"> + <el-input @keyup.enter.native="handleFilter" + style="width: 200px;" + class="filter-item" + :placeholder="operate.placeholder" + v-model="operate.value"> + </el-input> + </el-form-item> + <!--自定义时间选择--> + <el-form-item v-if="operate.type == 'datetime'" :label="operate.label"> + <el-date-picker type="datetime" + class="filter-item" + @keyup.enter.native="handleFilter" + value-format="yyyy-MM-dd HH:mm:ss" + :placeholder="operate.placeholder" + v-model="operate.value"> + </el-date-picker> + </el-form-item> + </span> + + <!--预定义按钮--> + <el-button-group v-if="buttonGroup"> + <el-button class="filter-item" type="primary" v-waves icon="el-icon-search" @click="handleFilter">æœç´¢</el-button> + <el-button class="filter-item" type="primary" :loading="downloadLoading" v-waves icon="el-icon-download" v-if="isShowExport" @click="handleDownload">导出</el-button> + <el-button class="filter-item" type="primary" v-waves icon="el-icon-plus" v-if="isShowNewButton" @click="openDialog('newData')">新建</el-button> + <el-button class="filter-item" type="primary" v-waves icon="el-icon-refresh" v-if="isShowRefresh" @click="refreshList">刷新</el-button> + <el-button class="filter-item" type="primary" v-waves icon="el-icon-close" v-if="multipleSelection.length" @click="BatchRemove">批é‡åˆ 除</el-button> + </el-button-group> + + <span v-if="!buttonGroup"> + <el-button class="filter-item" type="primary" v-waves icon="el-icon-search" @click="handleFilter">æœç´¢</el-button> + <el-button class="filter-item" type="primary" :loading="downloadLoading" v-waves icon="el-icon-download" v-if="isShowExport" @click="handleDownload">导出</el-button> + <el-button class="filter-item" type="primary" v-waves icon="el-icon-plus" v-if="isShowNewButton" @click="openDialog('newData')">新建</el-button> + <el-button class="filter-item" type="primary" v-waves icon="el-icon-refresh" v-if="isShowRefresh" @click="refreshList">刷新</el-button> + <el-button class="filter-item" type="primary" v-waves icon="el-icon-close" v-if="multipleSelection.length" @click="BatchRemove">批é‡åˆ 除</el-button> + </span> </el-form> </div> @@ -108,20 +102,23 @@ <!-- è¡¨æ ¼ --> <el-table :data="list" v-loading="listLoading" element-loading-text="给我一点时间" border fit highlight-current-row - style="width: 100%" @selection-change="handleSelectionChange"> + style="width: 100%" @selection-change="handleSelectionChange" @sort-change="sortChange" @current-change="tableCurrentChange"> <el-table-column type="index" :index="indexMethod" label="åºå·" width="50px"></el-table-column> - <el-table-column type="selection" width="55"> + <el-table-column type="selection" width="55" v-if="isShowSelection"></el-table-column> + <el-table-column v-for="(column,index) in showColumns" :key="index" align="center" :label="column.name" + :prop="column.codeCamel" :sortable="column.isSort" :width="column.width" :show-overflow-tooltip="showOverflowTooltip"> + <template slot-scope="scope"> + <span v-if="(scope.row[column.codeCamel] !== false && scope.row[column.codeCamel] !== true )&& !column.render">{{ scope.row[column.codeCamel] }}</span> + <el-checkbox v-if="(scope.row[column.codeCamel] === false || scope.row[column.codeCamel] === true) && !column.render" v-model="scope.row[column.codeCamel]"></el-checkbox> + <span v-if='column.render' v-html="column.render(scope)"></span> + </template> </el-table-column> - <el-table-column v-for="(column,index) in showColumns" :key="index" align="center" :label="column.name"> - <template slot-scope="scope"> - <span>{{ scope.row[column.codeCamel] }}</span> - </template> - </el-table-column> - <el-table-column fixed="right" label="æ“作" :width="operationWidth" v-if="isShowEditDataButton || isShowDeleteButton"> + <el-table-column fixed="right" label="æ“作" :width="operationWidth" v-if="isShowEditDataButton || isShowDeleteButton || definedOperation.length"> <template slot-scope="scope"> <el-button @click="openDialog('editData',scope.row)" v-if="isShowEditDataButton" type="text" size="small">编辑</el-button> <el-button @click="deleteData(scope.row)" type="text" v-if="isShowDeleteButton" size="small">åˆ é™¤</el-button> <el-button @click="openDialog('detail',scope.row)" type="text" v-if="isShowDetail" size="small">详情</el-button> + <el-button @click="operation.func(scope.row)" type="text" v-if="definedOperation.length" size="small" v-for="operation in definedOperation">{{operation.label}}</el-button> </template> </el-table-column> </el-table> @@ -138,17 +135,15 @@ <!-- 弹窗 --> <!-- @TODO 补充详情弹窗 --> - <el-dialog :title="dialogName" :visible.sync="dialogFormVisible" :close-on-click-modal="closeOnClickModal" width="dialogWidth"> - <el-form v-if="dialogName == '详情'"> - <el-form-item :label="dialog.name" :label-width="formLabelWidth" v-for="dialog in dialogForm"> - <el-input v-model="dialog.value" disabled auto-complete="off"></el-input> - </el-form-item> - </el-form> + <el-dialog :title="dialogName" :visible.sync="dialogFormVisible" :close-on-click-modal="closeOnClickModal" width="dialogWidth" v-if="dialogFormVisible"> <hm-complex-form :schema="formSchema" :columns="showUserColumns" :buttons="showUserButtons" :layout="layout" - :tableId="tableId" v-if="dialogName != '详情'"> + :tableId="tableId" + :tips="formTips" + :formStyle="formStyle" + ref="selectfood"> </hm-complex-form> </el-dialog> @@ -253,6 +248,7 @@ * { * "name": "å§“å", * "codeCamel": "username", + * "isSort": false, //æ˜¯å¦æŽ’åºï¼Œé»˜è®¤false * "render": function(value){ * return "<a href='value'></a>" * } @@ -282,7 +278,7 @@ }, /** * è¡¨æ ¼çš„é€‰é¡¹ï¼ŒåŒ…æ‹¬ï¼špageSizeã€showExportã€sortItemã€sortOrderã€showRefreshã€showDeleteButton〠- * buttonGroupã€showDetailã€dataProcessingã€changeValueã€newDataã€editData完整的示例为: + * buttonGroupã€showDetailã€dataProcessingã€promiseProcessingã€changeValueã€newDataã€editData完整的示例为: * { * "pageSize": 10, // 默认为10æ¡æ•°æ®/页 * "showExport": false, // é»˜è®¤ä¸ºä¸æ˜¾ç¤ºå¯¼å‡ºæŒ‰é’® @@ -291,13 +287,12 @@ * "showRefresh": false, //é»˜è®¤ä¸æ˜¾ç¤ºåˆ·æ–°æŒ‰é’® * "showDeleteButton": false, //é»˜è®¤ä¸æ˜¾ç¤ºåˆ 除按钮 * "buttonGroup": false //默认ä¸ä»¥æŒ‰é’®ç»„的方å¼å‘ˆçްbutton - * showDetail: { - * isShow: false, // é»˜è®¤ä¸æ˜¾ç¤ºè¯¦æƒ… - * showColumns: ['mobile', 'loginid', 'username', 'email'] - * }, - * dataProcessing(value){} // 对接å£è¿”回数æ®è¿›è¡Œå¤„ç† + * tableCurrentChange(value){} // 设置点击æŸè¡Œæ‰€æ‰§è¡Œæ–¹æ³• + * dataProcessing(value, params, definedOperate){} // 对接å£è¿”回数æ®è¿›è¡Œå¤„ç†ï¼ˆå¿…须有返回值,返回值需为 [{}] 的形å¼ï¼Œæ”¯æŒæ”¾å›žPromise对象) + * promiseProcessing(value, params, definedOperate){} // 对接å£è¿”回数æ®è¿›è¡Œå¤„ç†ï¼ˆå¿…须有返回值,返回Promise对象) * "changeValue": { // æ•°æ®åº“å—æ®µè½¬åŒ–显示,例如(0=å¦,1=是) - * username: {1: '是', 0: 'å¦'} + * username: {1: '是', 0: 'å¦'}, + * type: { 1: 'Hm-isChecked', 0: 'Hm-noChecked' } // 以多选框的形å¼å±•示Hm-isChecked(选择状æ€)ã€Hm-noChecked(未选择状æ€) * }, * "newData": { // 新建按钮的é…ç½® * isShow: false, // é»˜è®¤ä¸æ˜¾ç¤ºæ–°å»ºæŒ‰é’® @@ -310,7 +305,10 @@ * showUserColumns: [], // 编辑表å•çš„Columnsé…ç½®,详情å‚考Form组件 * formSchema: {}, // 编辑表å•çš„schemaé…ç½® * layout: {} // å¸ƒå±€æ–¹å¼ - * } + * }, + * showDetail: { // åŒç¼–辑的的é…ç½® + * isShow: false, // é»˜è®¤ä¸æ˜¾ç¤ºè¯¦æƒ… + * }, * } */ options: { @@ -321,7 +319,7 @@ * è‡ªå®šä¹‰è¡¨æ ¼é€‰é¡¹ï¼ŒåŒ…æ‹¬ï¼šdefinedParamsã€definedOperateã€å®Œæ•´çš„示例为: * { * definedParams(params, operate){return params} // è‡ªå®šä¹‰æŸ¥è¯¢æ•°æ®æ—¶çš„Params - * definedOperate: [ // 自定义table顶部的æ“ä½œï¼Œå¦‚æžœè¦æ ¹æ®å¤šé€‰æ¡†ã€è¾“å…¥æ¡†ã€æ—¶é—´é€‰æ‹©å™¨çš„值查询,需在自定义definedParams()æ–¹æ³•ä¸æ·»åŠ + * definedOperate: [ // 自定义table顶部的æ“ä½œï¼Œå¦‚æžœè¦æ ¹æ®ä¸‹æ‹‰é€‰æ‹©ã€è¾“å…¥æ¡†ã€æ—¶é—´é€‰æ‹©å™¨çš„值查询,需在自定义definedParams()æ–¹æ³•ä¸æ·»åŠ * { type: 'select', label:'', placeholder: '', options:[{label: '', code: ''}], value:''}, // 自定义多选框 * { type: 'input', label:'', placeholder: '', code:'', value:''}, // 自定义输入框 * { type: 'datetime', label:'', placeholder: '', code:'', value:''}, // 自定义时间选择器 @@ -358,18 +356,19 @@ multipleSelection: [], // 选择的数组 dialogName: '', + isShowSelection: false, // æ˜¯å¦æ˜¾ç¤ºå¤šé€‰ isShowNewButton: false, // æ˜¯å¦æ˜¾ç¤ºæ–°å»º isShowEditDataButton: false, // æ˜¯å¦æ˜¾ç¤ºç¼–辑 isShowDeleteButton: false, // æ˜¯å¦æ˜¾ç¤ºåˆ 除 isShowExport: false, // æ˜¯å¦æ˜¾ç¤ºå¯¼å‡ºæŒ‰é’® formSchema: {}, // form弹窗的Schema定义 showUserColumns: [], // form弹窗的Columns定义 - showUserButtons: [ // from弹窗显示按钮 - { text: '确定', type: 1, method: this.formConfirm }, - { text: 'å–æ¶ˆ', type: 2, method: this.formCancel } - ], + showUserButtons: [], // from弹窗显示按钮, layout: { left: 0, middle: 24, right: 0 }, // formå¼¹çª—çš„å¸ƒå±€æ–¹å¼ tableId: '', + formTips: '', + formStyle: '', + showOverflowTooltip: false, isShowRefresh: false, buttonGroup: false, @@ -377,32 +376,7 @@ isShowDetail: false, // æ˜¯å¦æ˜¾ç¤ºè¯¦æƒ…按钮 definedOperate: [], // 自定义æ“作 - - pickerOptions: { // 日期选项é…ç½® - disabledDate(time) { - return time.getTime() > Date.now() - }, - shortcuts: [{ - text: '今天', - onClick(picker) { - picker.$emit('pick', new Date()) - } - }, { - text: '昨天', - onClick(picker) { - const date = new Date() - date.setTime(date.getTime() - 3600 * 1000 * 24) - picker.$emit('pick', date) - } - }, { - text: '一周å‰', - onClick(picker) { - const date = new Date() - date.setTime(date.getTime() - 3600 * 1000 * 24 * 7) - picker.$emit('pick', date) - } - }] - } + definedOperation: [] } }, computed: { @@ -429,10 +403,16 @@ }, created() { // this.validate() - - this.init() - - this.getList() + const self = this + if (this.userDefined && this.userDefined.pretreatment) { + self.userDefined.pretreatment().then(function() {}) + self.init() + self.getList() + console.log('IS-[object Promise]') + } else { + self.init() + self.getList() + } }, methods: { indexMethod(index) { @@ -469,7 +449,7 @@ self.showColumns.push(tmp) }) } else { - self.showColumns = JSON.parse(JSON.stringify(self.columns)) + self.showColumns = _.cloneDeep(self.columns) // å°†å—符串对象进行替æ¢å¤„ç† _.each(self.showColumns, function(column, index) { if (typeof column === 'string') { @@ -481,6 +461,11 @@ } }) } + if (self.showColumns) { + _.map(self.showColumns, function(item, index) { + item.isSort = item.isSort === undefined ? false : item.isSort === true ? 'custom' : false + }) + } // 处ç†è¿‡æ»¤æ¡ä»¶ if (self.filters) { @@ -511,11 +496,22 @@ console.log(request.defaults) console.log(`request.defaults.baseURL: ${request.defaults.baseURL}`) }, + // 设置自定义组件 setDefinedOperate() { const self = this if (self.userDefined.definedOperate) { self.definedOperate = self.userDefined.definedOperate } + if (self.userDefined.definedOperation) { + self.operationWidth += 50 * self.userDefined.definedOperation.length + self.definedOperation = self.userDefined.definedOperation + } + }, + // æŽ’åº + sortChange(row) { + this.listQuery.sortItem = row.prop.replace(/([A-Z])/g, '_$1').toLowerCase() + this.listQuery.sortOrder = row.order === 'descending' ? 'desc' : 'asc' + this.getList() }, getList() { const self = this @@ -540,10 +536,6 @@ request(self.schema.modelUnderscorePlural, { params: params }).then(resp => { - // æ•°æ®åº“å—æ®µè½¬åŒ–显示 - if (self.options && self.options.changeValue) { - resp.data = self.changeValue(resp.data) - } if (resp.data.length !== 0 && resp.data[0].superior !== undefined && resp.data[0].includes !== undefined && resp.data[0].refers !== undefined && resp.data[0].relates !== undefined) { self.list = [] @@ -553,22 +545,39 @@ } else { self.list = resp.data } + // æ•°æ®åº“å—æ®µè½¬åŒ–显示 + if (self.options && self.options.changeValue) { + self.list = self.changeValue(self.list) + } // æ•°æ®å¤„ç† if (self.options && self.options.dataProcessing) { - self.list = self.options.dataProcessing(resp.data) + console.log('NO-[object Promise]') + self.list = self.options.dataProcessing(resp.data, params, self.definedOperate) + } + if (self.options && self.options.promiseProcessing) { + self.options.promiseProcessing(resp.data, params, self.definedOperate).then(function(dataList) { + self.list = dataList + }) } self.total = parseInt(resp.headers.total) self.listLoading = false }) }, + tableCurrentChange(value) { + const self = this + if (self.options && self.options.tableCurrentChange) { + console.log('value', value) + self.options.tableCurrentChange(value) + } + }, // æ•°æ®åº“å—æ®µè½¬åŒ–显示,例如(0=å¦,1=是) changeValue(data) { const self = this _.map(data, function(item, index) { _.forEach(item, function(listValue, listKey) { if (self.options.changeValue[listKey] && self.options.changeValue[listKey][listValue]) { - item[listKey] = self.options.changeValue[listKey][listValue] + item[listKey] = self.options.changeValue[listKey][listValue] === 'Hm-isChecked' ? true : self.options.changeValue[listKey][listValue] === 'Hm-noChecked' ? false : self.options.changeValue[listKey][listValue] } }) }) @@ -590,36 +599,57 @@ // æ·»åŠ ä¸€æ¡æ•°æ® openDialog(type, data) { const self = this - self.dialogFormVisible = true + if (type === 'editData' && self.userDefined && self.userDefined.definedEdit) { + self.userDefined.definedEdit(true, data) + return false + } + if (type === 'newData' && self.userDefined && self.userDefined.definedNew) { + self.userDefined.definedNew(true) + return false + } + if (type === 'detail' && self.userDefined && self.userDefined.definedDetail) { + self.userDefined.definedDetail(true, data) + return false + } + self.tableId = '' if (type === 'editData') { self.dialogName = '编辑' + if (self.options.editData.showUserButtons) { + self.showUserButtons = self.options.editData.showUserButtons + } + self.tableId = data.id self.showUserColumns = self.options.editData.showUserColumns self.formSchema = self.options.editData.formSchema self.layout = self.options.editData.layout - self.tableId = data.id + self.formTips = self.options.editData.tips + self.formStyle = self.options.editData.formStyle } if (type === 'newData') { self.dialogName = '新建' + if (self.options.newData.showUserButtons) { + self.showUserButtons = self.options.newData.showUserButtons + } self.showUserColumns = self.options.newData.showUserColumns self.formSchema = self.options.newData.formSchema self.layout = self.options.newData.layout + self.formTips = self.options.newData.tips + self.formStyle = self.options.newData.formStyle } if (type === 'detail') { self.dialogName = '详情' - self.dialogForm = [] - _.each(self.options.showDetail.showColumns, function(columns) { - _.each(self.schema.columns, function(item, index) { - if (columns === item.codeCamel) { - self.dialogForm.push(item) - } - }) - }) - _.map(self.dialogForm, function(item, index) { - item.value = data[item.code] - item.id = data.id - }) + if (self.options.detailData.showUserButtons) { + self.showUserButtons = self.options.detailData.showUserButtons + } + self.showUserColumns = self.options.showDetail.showUserColumns + self.formSchema = self.options.showDetail.formSchema + self.layout = self.options.showDetail.layout + self.formTips = self.options.showDetail.tips + self.formStyle = self.options.showDetail.formStyle + self.tableId = data.id } + + self.dialogFormVisible = true }, // 表å•çš„æäº¤ formConfirm() { @@ -748,6 +778,12 @@ self.isShowDetail = self.options.showDetail.isShow self.operationWidth += 50 } + if (self.options.showSelection) { // è®¾ç½®æ˜¯å¦æ˜¾ç¤ºå¤šé€‰ + self.isShowSelection = self.options.showSelection + } + if (self.options.showOverflowTooltip) { // 当内容过长被éšè—时显示 tooltip + self.showOverflowTooltip = self.options.showOverflowTooltip + } }, handleSelectionChange(val) { this.multipleSelection = val diff --git a/src/views/haomo/components/tables/index.vue b/src/views/haomo/components/tables/index.vue index 9f45ac742d1dfb095219b25c1fecc14ebacc936d..16480b596dbf79aa28bb91713ffb0da72dad4d3b 100644 --- a/src/views/haomo/components/tables/index.vue +++ b/src/views/haomo/components/tables/index.vue @@ -24,7 +24,11 @@ }, data() { return { - showUserColumns: ['mobile', 'loginid', 'username', 'email', 'createTime'], + showUserColumns: [ + { name: '手机å·', codeCamel: 'mobile', isSort: true }, + { name: '登录ID', codeCamel: 'loginid', isSort: true }, + 'username', 'email', { name: '创建时间', codeCamel: 'createTime', isSort: true, width: '130px' } + ], userFilters: [ { placeholder: '过滤手机å·', 'mobile': { 'like': '' }, isShow: true }, { placeholder: '过滤用户å', 'username': { 'equalTo': '' }, isShow: true }, @@ -51,7 +55,7 @@ sortItem: 'create_time', sortOrder: 'desc', changeValue: { - username: { 1: '是', 0: 'å¦' } + username: { 1: 'Hm-isChecked', 0: 'Hm-noChecked' } }, newData: { isShow: true, @@ -60,24 +64,33 @@ { name: '登录ID', codeCamel: 'loginid', widgetType: 1 }, { name: '类型', codeCamel: 'type', widgetType: 1 } ], + showUserButtons: [], formSchema: schema['HmUser'], - layout: { left: 0, middle: 24, right: 0 } + layout: { left: 0, middle: 24, right: 0 }, + tips: {}, + formStyle: {} }, editData: { isShow: true, showUserColumns: [{ name: 'å§“å', codeCamel: 'username', widgetType: 1 }], + showUserButtons: [], formSchema: schema['HmUser'], - layout: { left: 0, middle: 24, right: 0 } + layout: { left: 0, middle: 24, right: 0 }, + tips: {}, + formStyle: {} + }, + showDetail: { + isShow: true }, showRefresh: true, showExport: true, showDeleteButton: true, buttonGroup: false, - showDetail: { - isShow: true, - showColumns: ['mobile', 'loginid', 'username', 'email'] - } - // dataProcessing(value) {} // 处ç†è¿”回åŽçš„æ•°æ®,å¿…é¡»return 处ç†åŽçš„æ•°æ® + showSelection: false, + showOverflowTooltip: true, + tableCurrentChange(value) {} + // dataProcessing(value, params, definedOperate) {}, // 处ç†è¿”回åŽçš„æ•°æ®,å¿…é¡»return 处ç†åŽçš„æ•°æ® + // promiseProcessing(value, params, definedOperate) {} // 处ç†è¿”回åŽçš„æ•°æ®,å¿…é¡»return Promise对象 } this.userDefined = { definedParams(params, operate) { @@ -86,8 +99,19 @@ definedOperate: [ { type: 'select', label: '', placeholder: '类型', options: [{ label: 'å§“å', code: 'username' }, { label: '登录ID', code: 'loginid' }], value: '' }, { type: 'input', label: '', placeholder: '邮箱', code: 'email', value: '' }, - { type: 'datetime', label: '', placeholder: '创建时间', code: 'createTime', value: '' }, - { type: 'button', label: 'æœç´¢', icon: 'el-icon-search', func: this.dropDown }] + { type: 'datetime', label: '', placeholder: '创建时间', code: 'createTime', value: '' } + ], + definedOperation: [{ label: '测试', func: this.dropDown }], + definedEdit() { + + }, + definedNew() { + + }, + definedDetail() { + + } + // pretreatment() {} } }, methods: { @@ -95,8 +119,8 @@ this.dialogFormVisible = false console.log('method1') }, - dropDown() { - console.log('输出一些东西') + dropDown(value) { + console.log('输出一些东西', value) } } }