| <template> | 
|   <div class="layout-container"> | 
|     <a :href="exportHref" ref="export"></a> | 
|     <!--开启懒加载2020.12.06 --> | 
|     <vol-box | 
|       :on-model-close="closeCustomModel" | 
|       v-model="viewModel" | 
|       :height="520" | 
|       :width="500" | 
|       :padding="0" | 
|       :lazy="true" | 
|       title="设置" | 
|     > | 
|       <template #content> | 
|         <custom-column :view-columns="viewColumns"></custom-column> | 
|       </template> | 
|       <template #footer> | 
|         <div style="text-align: center"> | 
|           <el-button type="default" size="small" @click="closeCustomModel" | 
|             ><i class="el-icon-close"></i>取消</el-button | 
|           > | 
|           <el-button type="success" size="small" @click="initViewColumns(true)" | 
|             ><i class="el-icon-refresh"></i>重置</el-button | 
|           > | 
|           <el-button type="primary" size="small" @click="saveColumnConfig" | 
|             ><i class="el-icon-check"></i>确定</el-button | 
|           > | 
|         </div> | 
|       </template> | 
|     </vol-box> | 
|     <ViewGridAudit @auditClick="saveAudit" :option="table" ref="audit"> | 
|   | 
|     </ViewGridAudit> | 
|     <!--开启懒加载2020.12.06 --> | 
|     <!--审核(异步点击按钮时才加载待完)--> | 
|     <!-- <vol-box | 
|       v-model="auditParam.model" | 
|       :height="auditParam.height" | 
|       :width="750" | 
|       :lazy="true" | 
|       :padding="0" | 
|       title="审批" | 
|     > | 
|       <template #content> | 
|         <el-tabs type="card"> | 
|           <el-tab-pane label="当前审批"> | 
|             <div class="v-steps"> | 
|               <div | 
|                 :class="{ 'step-current': item.isCurrent }" | 
|                 class="step-item" | 
|                 v-for="(item, index) in workFlowSteps" | 
|                 :key="index" | 
|               > | 
|                 <div class="left-item"> | 
|                   <div>审批时间</div> | 
|                   <div class="left-date">{{ item.auditDate || '待审批' }}</div> | 
|                 </div> | 
|                 <div class="right-item"> | 
|                   <div class="step-line"></div> | 
|                   <i class="step-circle"></i> | 
|                   <div class="step-title"> | 
|                     {{ item.stepName }} | 
|                   </div> | 
|                   <div class="step-text">审批人:{{ item.auditor }}</div> | 
|                   <div class="step-text"> | 
|                     状 态: {{ getAuditStatus(item.auditStatus) }} | 
|                   </div> | 
|                   <div class="step-text">备 注: {{ item.remark || '-' }}</div> | 
|                 </div> | 
|               </div> | 
|               <div | 
|                 :style="{ | 
|                   'margin-top': workFlowSteps.length ? '20px' : '-17px' | 
|                 }" | 
|                 class="audit-content" | 
|                 v-show="auditParam.showAction" | 
|               > | 
|                 <div style="margin-bottom:10px;"> | 
|                   审批: | 
|                   <el-radio-group | 
|                     style="margin-left:15px" | 
|                     v-model="auditParam.value" | 
|                   > | 
|                     <el-radio | 
|                       v-for="item in auditParam.data" | 
|                       :key="item.value" | 
|                       :label="item.value" | 
|                     > | 
|                       <span>{{ item.text }}</span> | 
|                     </el-radio> | 
|                   </el-radio-group> | 
|                 </div> | 
|   | 
|                 <el-input | 
|                   v-model="auditParam.reason" | 
|                   type="textarea" | 
|                   style="margin-right: 13px;" | 
|                   :autosize="{ minRows: 4, maxRows: 10 }" | 
|                   placeholder="请输入备注..." | 
|                 ></el-input> | 
|               </div> | 
|             </div> | 
|           </el-tab-pane> | 
|           <el-tab-pane v-if="workFlowSteps.length" label="审批记录"> | 
|             <audit-his :table-data="auditParam.auditHis"></audit-his> | 
|           </el-tab-pane> | 
|         </el-tabs> | 
|       </template> | 
|       <template #footer> | 
|         <div style="text-align: center;"> | 
|           <el-button size="small" @click="auditParam.model = false" | 
|             ><i class="el-icon-close"></i>关闭</el-button | 
|           > | 
|           <el-button | 
|             type="primary" | 
|             v-show="auditParam.showAction" | 
|             size="small" | 
|             @click="saveAudit" | 
|             ><i class="el-icon-check"></i>审核</el-button | 
|           > | 
|         </div> | 
|       </template> | 
|     </vol-box> --> | 
|   | 
|     <!--导入excel功能--> | 
|     <!--2020.10.31添加导入前的方法--> | 
|     <!--开启懒加载2020.12.06 --> | 
|     <!-- 2022.01.08增加明细表导入判断 --> | 
|     <vol-box | 
|       v-if="upload.url" | 
|       v-model="upload.excel" | 
|       :height="350" | 
|       :width="600" | 
|       :lazy="true" | 
|       :title="(boxModel ? detailOptions.cnName : table.cnName) + '-导入'" | 
|     > | 
|       <UploadExcel | 
|         ref="upload_excel" | 
|         @importExcelAfter="importExcelAfter" | 
|         :importExcelBefore="importExcelBefore" | 
|         :url="upload.url" | 
|         :template="upload.template" | 
|       ></UploadExcel> | 
|     </vol-box> | 
|     <!--头部自定义组件--> | 
|     <component | 
|       :is="dynamicComponent.gridHeader" | 
|       ref="gridHeader" | 
|       @parentCall="parentCall" | 
|     ></component> | 
|     <!--主界面查询与table表单布局--> | 
|     <div class="view-container"> | 
|       <!-- 2020.09.11增加固定查询表单 --> | 
|       <!--查询条件--> | 
|       <div class="grid-search"> | 
|         <div | 
|           :class="[fiexdSearchForm ? 'fiexd-search-box' : 'search-box']" | 
|           v-show="searchBoxShow" | 
|         > | 
|           <!-- 2020.09.13增加formFileds拼写错误兼容处理 --> | 
|           <vol-form | 
|             ref="searchForm" | 
|             :load-key="false" | 
|             style="padding: 0 15px" | 
|             :label-width="labelWidth" | 
|             :formRules="searchFormOptions" | 
|             :formFields="searchFormFields" | 
|             :select2Count="select2Count" | 
|           > | 
|             <template #footer> | 
|               <div v-if="!fiexdSearchForm" class="form-closex"> | 
|                 <el-button size="small" type="primary" plain @click="search"> | 
|                   <i class="el-icon-search" />查询 | 
|                 </el-button> | 
|   | 
|                 <el-button | 
|                   size="small" | 
|                   type="success" | 
|                   plain | 
|                   @click="resetSearch" | 
|                 > | 
|                   <i class="el-icon-refresh-right" />重置 | 
|                 </el-button> | 
|                 <el-button | 
|                   size="small" | 
|                   plain | 
|                   @click="searchBoxShow = !searchBoxShow" | 
|                 > | 
|                   <i class="el-icon-switch-button" />关闭 | 
|                 </el-button> | 
|               </div> | 
|             </template> | 
|           </vol-form> | 
|           <div v-if="fiexdSearchForm" class="fs-line"></div> | 
|         </div> | 
|         <div class="view-header"> | 
|           <div class="desc-text"> | 
|             <i class="el-icon-s-grid" /> | 
|             <span>{{ table.cnName }}</span> | 
|           </div> | 
|           <div class="notice"> | 
|             <a class="text" :title="extend.text">{{ extend.text }}</a> | 
|           </div> | 
|           <!--快速查询字段--> | 
|           <div class="search-line" v-if="!fiexdSearchForm"> | 
|             <QuickSearch | 
|               v-if="singleSearch" | 
|               :singleSearch="singleSearch" | 
|               :searchFormFields="searchFormFields" | 
|               :tiggerPress="quickSearchKeyPress" | 
|             ></QuickSearch> | 
|           </div> | 
|           <!--操作按钮组--> | 
|           <!-- 2020.11.29增加查询界面hidden属性 --> | 
|   | 
|           <div class="btn-group"> | 
|             <template | 
|               :key="bIndex" | 
|               v-for="(btn, bIndex) in buttons.slice(0, maxBtnLength)" | 
|             > | 
|               <el-dropdown size="small" v-if="btn.data" :split-button="false"> | 
|                 <el-button | 
|                   :color="btn.color" | 
|                   :dark="false" | 
|                   :type="btn.type" | 
|                   :plain="btn.plain" | 
|                 > | 
|                   {{ btn.name }}<i class="el-icon-arrow-down el-icon--right"></i | 
|                 ></el-button> | 
|                 <template #dropdown> | 
|                   <el-dropdown-menu> | 
|                     <el-dropdown-item | 
|                       v-for="(item, index) in btn.data" | 
|                       :key="index" | 
|                     > | 
|                       <div @click="onClick(item.onClick)"> | 
|                         <i :class="item.icon"></i> | 
|                         {{ item.name }} | 
|                       </div> | 
|                     </el-dropdown-item> | 
|                   </el-dropdown-menu> | 
|                 </template> | 
|               </el-dropdown> | 
|               <el-button | 
|                 v-else | 
|                 :type="btn.type" | 
|                 size="small" | 
|                 :color="btn.color" | 
|                 :dark="false" | 
|                 :class="btn.class" | 
|                 :plain="btn.plain" | 
|                 v-show="!btn.hidden" | 
|                 @click="onClick(btn.onClick)" | 
|               > | 
|                 <i :class="btn.icon"></i> {{ btn.name }} | 
|               </el-button> | 
|             </template> | 
|             <!-- 设置列按钮 --> | 
|             <el-button | 
|               type="default" | 
|               style="padding: 0px 10px" | 
|               size="small" | 
|               :plain="true" | 
|               v-if="showCustom" | 
|               @click="showCustomModel" | 
|             > | 
|               <i class="el-icon-s-grid"></i> | 
|             </el-button> | 
|             <el-dropdown | 
|               size="small" | 
|               @click="changeDropdown" | 
|               v-if="buttons.length > maxBtnLength" | 
|             > | 
|               <el-button type="primary" plain size="small"> | 
|                 更多<i class="el-icon-arrow-down el-icon--right"></i> | 
|               </el-button> | 
|               <template #dropdown> | 
|                 <el-dropdown-menu> | 
|                   <el-dropdown-item | 
|                     @click="changeDropdown(item.name)" | 
|                     :name="item.name" | 
|                     v-show="!item.hidden" | 
|                     v-for="(item, dIndex) in buttons.slice( | 
|                       maxBtnLength, | 
|                       buttons.length | 
|                     )" | 
|                     :key="dIndex" | 
|                   > | 
|                     <i :class="item.icon"></i> {{ item.name }}</el-dropdown-item | 
|                   > | 
|                 </el-dropdown-menu> | 
|               </template> | 
|             </el-dropdown> | 
|           </div> | 
|         </div> | 
|   | 
|         <!-- 分割位置 --> | 
|         <vol-box | 
|           v-if="boxInit" | 
|           v-model="boxModel" | 
|           :title="boxOptions.title" | 
|           :width="boxOptions.width" | 
|           :height="boxOptions.height" | 
|           :modal="boxOptions.modal" | 
|           :draggable="boxOptions.draggable" | 
|           :padding="0" | 
|           :on-model-close="onGridModelClose" | 
|           @fullscreen="fullscreen" | 
|         > | 
|           <!--明细头部自定义组件--> | 
|           <template #content> | 
|             <div class="box-com"> | 
|               <component | 
|                 :is="dynamicComponent.modelHeader" | 
|                 ref="modelHeader" | 
|                 @parentCall="parentCall" | 
|               ></component> | 
|               <!-- <div v-show="isBoxAudit" class="flow-step"> | 
|                 <div v-for="(item, index) in workFlowSteps" :key="index"> | 
|                   {{ item.stepName }} | 
|                 </div> | 
|               </div> --> | 
|               <div class="item form-item"> | 
|                 <vol-form | 
|                   ref="form" | 
|                   :editor="editor" | 
|                   :load-key="false" | 
|                   :label-width="boxOptions.labelWidth" | 
|                   :formRules="editFormOptions" | 
|                   :formFields="editFormFields" | 
|                   :select2Count="select2Count" | 
|                 ></vol-form> | 
|               </div> | 
|               <!--明细body自定义组件--> | 
|               <component | 
|                 :is="dynamicComponent.modelBody" | 
|                 ref="modelBody" | 
|                 @parentCall="parentCall" | 
|               ></component> | 
|               <div | 
|                 v-show="hasDetail" | 
|                 v-if="detail.columns && detail.columns.length > 0" | 
|                 class="grid-detail table-item item" | 
|               > | 
|                 <div class="toolbar"> | 
|                   <div class="title form-text"> | 
|                     <span> | 
|                       <i class="el-icon-menu" /> | 
|                       {{ detail.cnName }} | 
|                     </span> | 
|                   </div> | 
|                   <!--明细表格按钮--> | 
|                   <div class="btns" v-show="!isBoxAudit"> | 
|                     <el-button | 
|                       v-for="(btn, bIndex) in detailOptions.buttons" | 
|                       :key="bIndex" | 
|                       :plain="btn.plain" | 
|                       v-show="!(typeof btn.hidden == 'boolean' && btn.hidden)" | 
|                       @click="onClick(btn.onClick)" | 
|                       size="small" | 
|                       ><i :class="btn.icon"></i>{{ btn.name }}</el-button | 
|                     > | 
|                   </div> | 
|                 </div> | 
|                 <vol-table | 
|                   ref="detail" | 
|                   @loadBefore="loadInternalDetailTableBefore" | 
|                   @loadAfter="loadDetailTableAfter" | 
|                   @rowChange="detailRowOnChange" | 
|                   @rowClick="detailRowOnClick" | 
|                   :url="detailOptions.url" | 
|                   :load-key="false" | 
|                   :index="true" | 
|                   :tableData="detailOptions.data" | 
|                   :columns="detailOptions.columns" | 
|                   :pagination="detailOptions.pagination" | 
|                   :height="detailOptions.height" | 
|                   :single="detailOptions.single" | 
|                   :pagination-hide="false" | 
|                   :defaultLoadPage="detailOptions.load" | 
|                   :beginEdit="detailOptions.beginEdit" | 
|                   :endEditBefore="detailOptions.endEditBefore" | 
|                   :endEditAfter="detailOptions.endEditAfter" | 
|                   :summary="detailOptions.summary" | 
|                   :click-edit="detailOptions.clickEdit" | 
|                   :double-edit="detailOptions.doubleEdit" | 
|                   :column-index="detailOptions.columnIndex" | 
|                   :ck="detailOptions.ck" | 
|                   :text-inline="detailOptions.textInline" | 
|                   :select2Count="select2Count" | 
|                   :selectable="detailSelectable" | 
|                 ></vol-table> | 
|               </div> | 
|               <!--明细footer自定义组件--> | 
|               <component | 
|                 :is="dynamicComponent.modelFooter" | 
|                 ref="modelFooter" | 
|                 @parentCall="parentCall" | 
|               ></component> | 
|             </div> | 
|           </template> | 
|           <template #footer> | 
|             <div style="text-align: center;" v-show="isBoxAudit"> | 
|               <el-button | 
|                 size="small" | 
|                 type="primary" | 
|                 plain | 
|                 @click="onGridModelClose(false)" | 
|               > | 
|                 <i class="el-icon-close">关闭</i> | 
|               </el-button> | 
|               <el-button | 
|                 size="small" | 
|                 type="primary" | 
|                 v-show="auditParam.showViewButton" | 
|                 @click="auditParam.model = true" | 
|               > | 
|                 <i class="el-icon-view">审批</i> | 
|               </el-button> | 
|             </div> | 
|             <div v-show="!isBoxAudit"> | 
|               <el-button | 
|                 v-for="(btn, bIndex) in boxButtons" | 
|                 :key="bIndex" | 
|                 :type="btn.type" | 
|                 size="small" | 
|                 :plain="btn.plain" | 
|                 v-show="!(typeof btn.hidden == 'boolean' && btn.hidden)" | 
|                 :disabled="btn.hasOwnProperty('disabled') && !!btn.disabled" | 
|                 @click="onClick(btn.onClick)" | 
|               > | 
|                 <i :class="btn.icon"> {{ btn.name }}</i> | 
|               </el-button> | 
|               <el-button | 
|                 size="small" | 
|                 type="primary" | 
|                 plain | 
|                 @click="onGridModelClose(false)" | 
|               > | 
|                 <i class="el-icon-close">关闭</i> | 
|               </el-button> | 
|             </div> | 
|           </template> | 
|         </vol-box> | 
|       </div> | 
|       <!--body自定义组件--> | 
|       <div class="grid-body"> | 
|         <component | 
|           :is="dynamicComponent.gridBody" | 
|           ref="gridBody" | 
|           @parentCall="parentCall" | 
|         ></component> | 
|       </div> | 
|   | 
|       <!--table表格--> | 
|       <div class="grid-container"> | 
|         <!-- 2021.05.02增加树形结构 rowKey --> | 
|         <vol-table | 
|           ref="table" | 
|           :single="single" | 
|           :rowKey="rowKey" | 
|           :loadTreeChildren="loadTreeTableChildren" | 
|           @loadBefore="loadTableBefore" | 
|           @loadAfter="loadTableAfter" | 
|           @rowChange="rowOnChange" | 
|           @rowClick="rowOnClick" | 
|           @rowDbClick="rowOnDbClick" | 
|           :tableData="[]" | 
|           :linkView="linkData" | 
|           :columns="columns" | 
|           :pagination="pagination" | 
|           :height="height" | 
|           :max-height="tableMaxHeight" | 
|           :pagination-hide="false" | 
|           :url="url" | 
|           :load-key="false" | 
|           :defaultLoadPage="load" | 
|           :summary="summary" | 
|           :double-edit="doubleEdit" | 
|           :index="doubleEdit" | 
|           :beginEdit="tableBeginEdit" | 
|           :endEditBefore="tableEndEditBefore" | 
|           :click-edit="true" | 
|           :column-index="columnIndex" | 
|           :text-inline="textInline" | 
|           :ck="ck" | 
|           :select2Count="select2Count" | 
|           :selectable="selectable" | 
|         ></vol-table> | 
|       </div> | 
|     </div> | 
|   | 
|     <!--footer自定义组件--> | 
|     <component | 
|       :is="dynamicComponent.gridFooter" | 
|       ref="gridFooter" | 
|       @parentCall="parentCall" | 
|     ></component> | 
|   </div> | 
| </template> | 
|   | 
| <script> | 
| const _const = { | 
|   EDIT: 'update', | 
|   ADD: 'Add', | 
|   VIEW: 'view', | 
|   PAGE: 'getPageData', | 
|   AUDIT: 'audit', | 
|   DEL: 'del', | 
|   EXPORT: 'Export', //导出操作返回加密后的路径 | 
|   DOWNLOAD: 'DownLoadFile', //导出文件 | 
|   DOWNLOADTEMPLATE: 'DownLoadTemplate', //下载导入模板 | 
|   IMPORT: 'Import', //导入(导入表的Excel功能) | 
|   UPLOAD: 'Upload' //上传文件 | 
| }; | 
| import Empty from '@/components/basic/Empty.vue'; | 
|   | 
| import VolTable from '@/components/basic/VolTable.vue'; | 
| import VolForm from '@/components/basic/VolForm.vue'; | 
| import { | 
|   defineAsyncComponent, | 
|   defineComponent, | 
|   ref, | 
|   shallowRef, | 
|   toRaw | 
| } from 'vue'; | 
| var vueParam = { | 
|   components: { | 
|     'vol-form': VolForm, | 
|     'vol-table': VolTable, | 
|     VolBox: defineAsyncComponent(() => import('@/components/basic/VolBox.vue')), | 
|     QuickSearch: defineAsyncComponent(() => | 
|       import('@/components/basic/QuickSearch.vue') | 
|     ), | 
|     Audit: defineAsyncComponent(() => import('@/components/basic/Audit.vue')), | 
|     UploadExcel: defineAsyncComponent(() => | 
|       import('@/components/basic/UploadExcel.vue') | 
|     ), | 
|     'custom-column': defineAsyncComponent(() => | 
|       import('./ViewGridCustomColumn.vue') | 
|     ), | 
|     'vol-header': defineAsyncComponent(() => import('./../VolHeader.vue')), | 
|      ViewGridAudit: defineAsyncComponent(() => import('./ViewGridAudit.vue')) | 
|   }, | 
|   props: {}, | 
|   setup(props) { | 
|     //2021.07.17调整扩展组件组件 | 
|     const dynamicCom = { | 
|       gridHeader: Empty, | 
|       gridBody: Empty, | 
|       gridFooter: Empty, | 
|       modelHeader: Empty, | 
|       modelBody: Empty, | 
|       modelFooter: Empty | 
|     }; | 
|     //合并扩展组件 | 
|     if (props.extend.components) { | 
|       for (const key in props.extend.components) { | 
|         if (props.extend.components[key]) { | 
|           dynamicCom[key] = toRaw(props.extend.components[key]); | 
|         } | 
|       } | 
|     } | 
|     const dynamicComponent = shallowRef(dynamicCom); | 
|     return { dynamicComponent }; | 
|   }, | 
|   data() { | 
|     return { | 
|       isBoxAudit: false, | 
|       formFieldsType: [], | 
|       workFlowSteps: [], | 
|       //树形结构的主键字段,如果设置值默认会开启树形table;注意rowKey字段的值必须是唯一(2021.05.02) | 
|       rowKey: undefined, | 
|       fiexdSearchForm: false, //2020.09.011是否固定查询表单,true查询表单将固定显示在表单的最上面 | 
|       _inited: false, | 
|       doubleEdit: false, //2021.03.19是否开启查询界面表格双击编辑 | 
|       single: false, //表是否单选 | 
|       const: _const, //增删改查导入导出等对应的action | 
|       boxInit: false, //新建或编辑的弹出框初化状态,默认不做初始化,点击新建或编辑才初始化弹出框 | 
|       searchBoxShow: false, //高级查询(界面查询后的下拉框点击触发) | 
|       singleSearch: {}, //快速查询字段 | 
|       exportHref: '', | 
|       currentAction: _const.ADD, //当新建或编辑时,记录当前的状态:如当前操作是新建 | 
|       currentRow: {}, //当前编辑或查看数据的行 | 
|       closable: false, | 
|       boxModel: false, //弹出新建、编辑框 | 
|       width: 700, //弹出框查看表数据结构 | 
|       labelWidth: 100, //高级查询的标签宽度 | 
|       viewModel: false, //查看表结构的弹出框 | 
|       viewColumns: [], //查看表结构的列数据 | 
|       viewColumnsClone: [], | 
|       showCustom: true, //是否显示自定义配置列按钮2022.05.27 | 
|       // viewData: [], //查看表结构信息 | 
|       maxBtnLength: 8, //界面按钮最多显示的个数,超过的数量都显示在更多中 | 
|       buttons: [], //查询界面按钮  如需要其他操作按钮,可在表对应的.js中添加(如:Sys_User.js中buttons添加其他按钮) | 
|       splitButtons: [], | 
|       uploadfiled: [], //上传文件图片的字段 | 
|       boxButtons: [], //弹出框按钮 如需要其他操作按钮,可在表对应的.js中添加 | 
|       dicKeys: [], //当前界面所有的下拉框字典编号及数据源 | 
|       hasKeyField: [], //有字典数据源的字段 | 
|       keyValueType: { _dinit: false }, | 
|       url: '', //界面表查询的数据源的url | 
|       hasDetail: false, //是否有从表(明细)表格数据 | 
|       initActivated: false, | 
|       load: true, //是否默认加载表数据 | 
|       activatedLoad: false, //页面触发actived时是否刷新页面数据 | 
|       summary: false, //查询界面table是否显示合计 | 
|       //需要从远程绑定数据源的字典编号,如果字典数据源的查询结果较多,请在onInit中将字典编号添加进来 | 
|       //只对自定sql有效 | 
|       remoteKeys: [], | 
|       columnIndex: true, //2020.11.01是否显示行号 | 
|       ck: true, //2020.11.01是否显示checkbox | 
|       continueAdd: false, //2021.04.11新建时是否可以连续新建操作 | 
|       continueAddName: '保存后继续添加', //2021.04.11按钮名称 | 
|       // detailUrl: "", | 
|       detailOptions: { | 
|         //弹出框从表(明细)对象 | 
|         //从表配置 | 
|         buttons: [], //弹出框从表表格操作按钮,目前有删除行,添加行,刷新操作,如需要其他操作按钮,可在表对应的.js中添加 | 
|         cnName: '', //从表名称 | 
|         key: '', //从表主键名 | 
|         data: [], //数据源 | 
|         columns: [], //从表列信息 | 
|         edit: true, //明细是否可以编辑 | 
|         single: false, //明细表是否单选 | 
|         load: false, // | 
|         delKeys: [], //当编辑时删除当前明细的行主键值 | 
|         url: '', //从表加载数据的url | 
|         pagination: { total: 0, size: 100, sortName: '' }, //从表分页配置数据 | 
|         height: 0, //默认从表高度 | 
|         textInline: true, //明细表行内容显示在一行上,如果需要换行显示,请设置为false | 
|         doubleEdit: true, //使用双击编辑 | 
|         clickEdit: false, //是否开启点击单元格编辑,点击其他行时结束编辑 | 
|         currentReadonly: false, //当前用户没有编辑或新建权限时,表单只读(可用于判断用户是否有编辑或新建权限) | 
|         //开启编辑时 | 
|         beginEdit: (row, column, index) => { | 
|           return true; | 
|         }, | 
|         //结束编辑前 | 
|         endEditBefore: (row, column, index) => { | 
|           return true; | 
|         }, | 
|         //结束编辑后 | 
|         endEditAfter: (row, column, index) => { | 
|           return true; | 
|         }, | 
|         columnIndex: false, //2020.11.01明细是否显示行号 | 
|         ck: true //2020.11.01明细是否显示checkbox | 
|       }, | 
|       auditParam: { | 
|         //审核对象 | 
|         rows: 0, //当前选中审核的行数 | 
|         model: false, //审核弹出框 | 
|         value: -1, //审核结果 | 
|         status: -1, | 
|         reason: '', //审核原因 | 
|         height: 500, | 
|         showViewButton: true, | 
|         auditHis: [], | 
|         showAction: false, //是否显示审批操作(当前节点为用户审批时显示) | 
|         //审核选项(可自行再添加) | 
|         data: [ | 
|           { text: '通过', value: 1 }, | 
|           { text: '拒绝', value: 2 }, | 
|           { text: '驳回', value: 3 } | 
|         ] | 
|       }, | 
|       upload: { | 
|         //导入上传excel对象 | 
|         excel: false, //导入的弹出框是否显示 | 
|         url: '', //导入的路径,如果没有值,则不渲染导入功能 | 
|         template: { | 
|           //下载模板对象 | 
|           url: '', //下载模板路径 | 
|           fileName: '' //模板下载的中文名 | 
|         }, | 
|         init: false //是否有导入权限,有才渲染导入组件 | 
|       }, | 
|       height: 0, //表高度 | 
|       tableHeight: 0, //查询页面table的高度 | 
|       tableMaxHeight: 0, //查询页面table的最大高度 | 
|       textInline: true, //table内容超出后是否不换行2020.01.16 | 
|       pagination: { total: 0, size: 30, sortName: '' }, //从分页配置数据 | 
|       boxOptions: { | 
|         title: '', //弹出框显示的标题2022.08.01 | 
|         saveClose: true, | 
|         labelWidth: 100, | 
|         height: 0, | 
|         width: 0, | 
|         summary: false, //弹出框明细table是否显示合计 | 
|         draggable: false, //2022.09.12弹出框拖动功能 | 
|         modal: true //2022.09.12弹出框背景遮罩层 | 
|       }, //saveClose新建或编辑成功后是否关闭弹出框//弹出框的标签宽度labelWidth | 
|       editor: { | 
|         uploadImgUrl: '', //上传路径 | 
|         upload: null //上传方法 | 
|       }, | 
|       numberFields: [], | 
|       //2022.09.26增加自定义导出文件名 | 
|       downloadFileName: null, | 
|       select2Count: 500 //超出500数量显示select2组件 | 
|     }; | 
|   }, | 
|   methods: {}, | 
|   activated() { | 
|      this.initFlowQuery(); | 
|     //2020.06.25增加activated方法 | 
|     this.onActivated && this.onActivated(); | 
|     if (!this._inited) { | 
|       this._inited = true; | 
|       return; | 
|     } | 
|     if (this.activatedLoad) { | 
|       this.refresh(); | 
|     } | 
|   }, | 
|   mounted() { | 
|     this.mounted(); | 
|     // this.$refs.searchForm.forEach() | 
|   }, | 
|   unmounted() { | 
|     this.destroyed(); | 
|   }, | 
|   created: function() { | 
|     //合并自定义业务扩展方法 | 
|     Object.assign(this, this.extend.methods); | 
|     //如果没有指定排序字段,则用主键作为默认排序字段 | 
|     this.pagination.sortName = this.table.sortName || this.table.key; | 
|     this.initBoxButtons(); //初始化弹出框与明细表格按钮 | 
|     this.initAuditColumn(); | 
|     this.onInit(); //初始化前,如果需要做其他处理在扩展方法中覆盖此方法 | 
|     this.getButtons(); | 
|     //初始化自定义表格列 | 
|     this.initViewColumns(); | 
|     //初始编辑框等数据 | 
|     this.initBoxHeightWidth(); | 
|     this.initDicKeys(); //初始下框数据源 | 
|     this.onInited(); //初始化后,如果需要做其他处理在扩展方法中覆盖此方法 | 
|   }, | 
|   beforeUpdate: function() {}, | 
|   updated: function() {} | 
| }; | 
|   | 
| import props from './props.js'; | 
| import methods from './methods.js'; | 
|   | 
| //合并属性 | 
| vueParam.props = Object.assign(vueParam.props, props); | 
| //合并方法 | 
| vueParam.methods = Object.assign( | 
|   vueParam.methods, | 
|   methods, | 
|   props.extend.methods | 
| ); | 
| export default defineComponent(vueParam); | 
| </script> | 
| <style lang="less" scoped> | 
| @import './ViewGrid.less'; | 
| </style> | 
| <style lang="less" scoped> | 
| .btn-group ::v-deep(.ivu-select-dropdown) { | 
|   padding: 0px !important; | 
|   right: 3px; | 
| } | 
|   | 
| .btn-group ::v-deep(.ivu-select-dropdown .ivu-dropdown-menu) { | 
|   min-width: 100px; | 
|   right: -2px; | 
|   position: absolute; | 
|   background: white; | 
|   width: 130px; | 
|   border-radius: 5px; | 
|   border: 1px solid #e7e5e5; | 
| } | 
|   | 
| .vertical-center-modal ::v-deep(.srcoll-content) { | 
|   padding: 0; | 
| } | 
|   | 
| .view-model-content { | 
|   background: #eee; | 
| } | 
|   | 
| .grid-detail ::v-deep(.v-table .el-table__header th) { | 
|   height: 44px; | 
| } | 
| </style> | 
| <style lang="less" scoped> | 
| .grid-search { | 
|   position: relative; | 
|   | 
|   .search-box { | 
|     background: #fefefe; | 
|     margin-top: 33px; | 
|     border: 1px solid #eae8e8; | 
|     position: absolute; | 
|     z-index: 999; | 
|     left: 15px; | 
|     right: 15px; | 
|     padding: 25px 20px; | 
|     padding-bottom: 0; | 
|     border-top: 0; | 
|     box-shadow: 0 7px 18px -12px #bdc0bb; | 
|   } | 
| } | 
| </style> |