|
|
@@ -32,7 +32,8 @@
|
|
|
!fieldUtil.isFileType(field) &&
|
|
|
!fieldUtil.isRichTextAreaEditor(field) &&
|
|
|
!fieldUtil.isNumberType(field) &&
|
|
|
- !fieldUtil.isButtonType(field)
|
|
|
+ !fieldUtil.isButtonType(field) &&
|
|
|
+ !fieldUtil.isGridButtonEditor(field)
|
|
|
"
|
|
|
v-tooltip.left="getFieldStringValue()"
|
|
|
class="form-control-static input-group-item"
|
|
|
@@ -183,16 +184,62 @@
|
|
|
@execute-callout="executeCallout"
|
|
|
/>
|
|
|
</div>
|
|
|
+
|
|
|
+ <div v-if="fieldUtil.isGridButtonEditor(field)" style="display: inline-block">
|
|
|
+ <template v-for="(tabFormButtonItem, index) in field.tabFormButtonDtos" :key="tabFormButtonItem.name">
|
|
|
+ <template v-if="visible[index]">
|
|
|
+ <a-button v-if="tabFormButtonItem.action === 'EDIT'" type="link" @click="editRecord">
|
|
|
+ {{ tabFormButtonItem.name
|
|
|
+ }}
|
|
|
+ </a-button>
|
|
|
+ <a-button
|
|
|
+ v-if="tabFormButtonItem.action === 'RUN_PROCESS_REPORT'" type="link"
|
|
|
+ @click="execute(tabFormButtonItem)"
|
|
|
+ >
|
|
|
+ {{ tabFormButtonItem.name }}
|
|
|
+ </a-button>
|
|
|
+ <a-button
|
|
|
+ v-if="tabFormButtonItem.action === 'OPEN_CUSTOMER_WINDOW'" type="link"
|
|
|
+ @click="execute(tabFormButtonItem)"
|
|
|
+ >
|
|
|
+ {{ tabFormButtonItem.name }}
|
|
|
+ </a-button>
|
|
|
+ <a-button
|
|
|
+ v-if="tabFormButtonItem.action === 'OPEN_HTML_WINDOW'" type="link"
|
|
|
+ @click="execute(tabFormButtonItem)"
|
|
|
+ >
|
|
|
+ {{ tabFormButtonItem.name }}
|
|
|
+ </a-button>
|
|
|
+ <a-button
|
|
|
+ v-if="tabFormButtonItem.action === 'OPEN_REMOTE_COMPONENT_MODULE_IN_MODAL'" type="link"
|
|
|
+ @click="openRemoteComponentModule(tabFormButtonItem)"
|
|
|
+ >
|
|
|
+ {{ tabFormButtonItem.name }}
|
|
|
+ </a-button>
|
|
|
+ <a-button
|
|
|
+ v-if="tabFormButtonItem.action === 'OPEN_NEW_VIEW_EDIT'" type="link"
|
|
|
+ @click="openNewViewEdit(tabFormButtonItem)"
|
|
|
+ >
|
|
|
+ {{ tabFormButtonItem.name }}
|
|
|
+ </a-button>
|
|
|
+ </template>
|
|
|
+ </template>
|
|
|
+ </div>
|
|
|
</div>
|
|
|
</div>
|
|
|
+ <component :is="modal1Component" v-model:open="modal1Open" :class-name="className" :model-data="modelData" @refresh-data="refreshDatas" />
|
|
|
</template>
|
|
|
|
|
|
<script>
|
|
|
+import {
|
|
|
+ ref,
|
|
|
+ defineAsyncComponent,
|
|
|
+} from 'vue';
|
|
|
import fieldUtil from '../../resource/dictionary/FieldUtil.js';
|
|
|
import WindowClientUtil from '../../resource/dictionary/WindowClientUtil.js';
|
|
|
import Language from '../../common/Language.js';
|
|
|
import Context from '../common/Context.js';
|
|
|
-
|
|
|
+import { Spin as ASpin, Empty as AEmpty } from 'ant-design-vue';
|
|
|
import EnumSelectWidget from '../tabFormWidget/EnumSelectWidget.vue';
|
|
|
import SelectWidget from '../tabFormWidget/SelectWidget.vue';
|
|
|
import EnumRadioGroupWidget from '../tabFormWidget/EnumRadioGroupWidget.vue';
|
|
|
@@ -204,7 +251,12 @@ import ImageViewWidget from '../tabFormWidget/ImageViewWidget.vue';
|
|
|
import ImageListViewWidget from '../tabFormWidget/ImageListViewWidget.vue';
|
|
|
import JsUtil from '../../common/JsUtil.js';
|
|
|
import { SqlApi } from 'pc-component-v3';
|
|
|
-import { Notify, Uuid } from 'pc-component-v3';
|
|
|
+import { Notify, Uuid , CssUtil} from 'pc-component-v3';
|
|
|
+import Common from '../../common/Common.js';
|
|
|
+import CustomerWindowResource from '../../api/dic/CustomerWindowResource.js';
|
|
|
+import HtmlWindowResource from '../../api/dic/HtmlWindowResource.js';
|
|
|
+import ProcessReportResource from '../../api/dic/ProcessReportResource.js';
|
|
|
+
|
|
|
export default {
|
|
|
components: {
|
|
|
ImageViewWidget,
|
|
|
@@ -215,6 +267,10 @@ export default {
|
|
|
VideoListWidget,
|
|
|
FileListWidget,
|
|
|
ButtonWidget,
|
|
|
+ Common,
|
|
|
+ CustomerWindowResource,
|
|
|
+ HtmlWindowResource,
|
|
|
+ ProcessReportResource,
|
|
|
},
|
|
|
|
|
|
props: {
|
|
|
@@ -248,7 +304,7 @@ export default {
|
|
|
},
|
|
|
},
|
|
|
|
|
|
- emits: ['executeCallout'],
|
|
|
+ emits: ['executeCallout', 'refreshDatas'],
|
|
|
|
|
|
data: function () {
|
|
|
this.Language = Language;
|
|
|
@@ -266,6 +322,9 @@ export default {
|
|
|
fieldValue: fieldValue,
|
|
|
fieldUtil: fieldUtil,
|
|
|
showField: true, // 显示字段
|
|
|
+ visible:[],
|
|
|
+ modal1Open: false,
|
|
|
+ modal1Component: null,
|
|
|
};
|
|
|
},
|
|
|
|
|
|
@@ -355,6 +414,19 @@ export default {
|
|
|
this.showLogical();
|
|
|
},
|
|
|
},
|
|
|
+ 'field.tabFormButtonDtos': {
|
|
|
+
|
|
|
+ immediate: true,
|
|
|
+ handler(curVal, oldVal) {
|
|
|
+ const _self = this;
|
|
|
+ this.visible.splice(0, this.visible.length);
|
|
|
+ if (curVal != null) {
|
|
|
+ curVal.forEach(item => {
|
|
|
+ _self.visible.push(true);
|
|
|
+ });
|
|
|
+ }
|
|
|
+ },
|
|
|
+ },
|
|
|
},
|
|
|
|
|
|
mounted: function () {
|
|
|
@@ -372,7 +444,238 @@ export default {
|
|
|
executeCallout: function (field) {
|
|
|
this.$emit('executeCallout', field);
|
|
|
},
|
|
|
+ refreshDatas: function () {
|
|
|
+ this.$emit('refreshDatas');
|
|
|
+ },
|
|
|
+ /**
|
|
|
+ * 打开新界面编辑
|
|
|
+ * @param tabButton
|
|
|
+ */
|
|
|
+ openNewViewEdit:function(tabButton){
|
|
|
+ //打开新界面编辑Url
|
|
|
+ var openNewViewEditUrl = tabButton.openNewViewEditUrl;
|
|
|
+ //传递modelData,调接口
|
|
|
+ //待开发
|
|
|
+ },
|
|
|
+ /**
|
|
|
+ * 远程加载ES VUE组件模块,并在模态框中打开。
|
|
|
+ * @param jsUrl js路径
|
|
|
+ * @param cssUrl css路径
|
|
|
+ */
|
|
|
+ openRemoteComponentModule: function (tabButton) {
|
|
|
+ var _self = this;
|
|
|
+ let jsUrl = tabButton.remoteComponentModuleJsUrl;
|
|
|
+ let cssUrl = tabButton.remoteComponentModuleCssUrl;
|
|
|
+
|
|
|
+ // 显示模态框
|
|
|
+ // 异步的加载js组件
|
|
|
+ //let jsUrl = './static/client-eam-module-v3/dist/AssetCheckCreate.js';
|
|
|
+ //let cssUrl = './static/client-eam-module-v3/dist/AssetCheckCreate.css';
|
|
|
+
|
|
|
+ if (cssUrl != null && cssUrl.length > 0) {
|
|
|
+ let cssUrlHash = _self.getHash(cssUrl);
|
|
|
+ CssUtil.dynamicLoadCss(cssUrl, cssUrlHash);
|
|
|
+ }
|
|
|
+ // webpackIgnore:设置为 true 时,禁用动态导入解析。
|
|
|
+ // const testAsyncRemoteComponent = await import(/* webpackIgnore: true */ jsUrl);
|
|
|
+
|
|
|
+ // console.log(testAsyncRemoteComponent);
|
|
|
+ if (jsUrl != null && jsUrl.length > 0) {
|
|
|
+ const testAsyncRemoteComponent = defineAsyncComponent({
|
|
|
+ // 加载函数
|
|
|
+ loader: () => {
|
|
|
+ return import(/* webpackIgnore: true */ jsUrl);
|
|
|
+ },
|
|
|
+ // 加载异步组件时使用的组件
|
|
|
+ loadingComponent: ASpin,
|
|
|
+ // 展示加载组件前的延迟时间,默认为 200ms
|
|
|
+ delay: 200,
|
|
|
+ // 加载失败后展示的组件
|
|
|
+ errorComponent: AEmpty,
|
|
|
+ // 如果提供了一个 timeout 时间限制,并超时了
|
|
|
+ // 也会显示这里配置的报错组件,默认值是:Infinity
|
|
|
+ timeout: 10000,
|
|
|
+ });
|
|
|
+
|
|
|
+ _self.modal1Component = testAsyncRemoteComponent;
|
|
|
+ _self.modal1Open = true;
|
|
|
+ console.log(_self.modal1Component);
|
|
|
+ }
|
|
|
+ },
|
|
|
+
|
|
|
+ //跳转或执行流程
|
|
|
+ execute: function (tabButton) {
|
|
|
+ var _self = this;
|
|
|
+ _self.tabButtonModel = tabButton;
|
|
|
+ if (tabButton.customerWindowNo != undefined && tabButton.customerWindowNo != '') {
|
|
|
+ CustomerWindowResource.uniqueByNo(tabButton.customerWindowNo).then(
|
|
|
+ successData => {
|
|
|
+ if (successData.errorCode == 0) {
|
|
|
+ tabButton.customerWindowRouteUrl = successData.data.routeUrl;
|
|
|
+ if (tabButton.customerWindowNo == '20221101_151823') {
|
|
|
+ localStorage.setItem('AssetInstance_ComplexFilterParams', JSON.stringify(_self.complexFilterParams));
|
|
|
+ localStorage.setItem('AssetInstance_SimpleFilterParams', _self.simpleFilterParams);
|
|
|
+ }
|
|
|
+ //跳转到tabButton.routeUrl
|
|
|
+ _self.switchFormRoute(tabButton);
|
|
|
+ }else{
|
|
|
+ Notify.error(_self.$t('lang.Notify.error'), successData.errorMessage, true);
|
|
|
+ }
|
|
|
+
|
|
|
+ },
|
|
|
+ errorData => {
|
|
|
+ Common.processException(errorData);
|
|
|
+ },
|
|
|
+ );
|
|
|
+ } else if (
|
|
|
+ tabButton.processReportNo != undefined &&
|
|
|
+ tabButton.processReportNo != ''
|
|
|
+ ) {
|
|
|
+ // 判断流程报表是否有参数
|
|
|
+ // 如果有参数则直接跳转到流程和报表的界面。
|
|
|
+ if (tabButton.routerRedirect == undefined || tabButton.routerRedirect == false) {
|
|
|
+ if (tabButton.tipsTitle == undefined || tabButton.tipsTitle.length == 0) {
|
|
|
+ _self.executeProcess();
|
|
|
+ } else {
|
|
|
+ _self.titleModal = true;
|
|
|
+ }
|
|
|
+ } else {
|
|
|
+ this.$router.push({
|
|
|
+ path: '/desktop/process-report/' + tabButton.processReportNo,
|
|
|
+ });
|
|
|
+ }
|
|
|
+ } else if (tabButton.htmlWindowNo != undefined) {
|
|
|
+ HtmlWindowResource.uniqueByNo(tabButton.htmlWindowNo).then(
|
|
|
+ response => {
|
|
|
+ if (response.errorCode != 0) {
|
|
|
+ Notify.error(_self.$t('lang.Notify.dataDictionaryError'), response.errorMessage, true);
|
|
|
+ return;
|
|
|
+ }
|
|
|
+
|
|
|
+ const htmlWindowDto = response.data;
|
|
|
+ if (htmlWindowDto != undefined) {
|
|
|
+ var htmlWindowUrl = htmlWindowDto.htmlFileName;
|
|
|
+ var autoCloseInterval = htmlWindowDto.autoCloseInterval;
|
|
|
+ var regExp = new RegExp('[{].*?[}]', 'g');
|
|
|
+ var result = htmlWindowUrl.match(regExp);
|
|
|
+ if (htmlWindowUrl != undefined && htmlWindowUrl != '') {
|
|
|
+ for (var index = 0, len = result.length; index < len; index++) {
|
|
|
+ var tempResult = result[index];
|
|
|
+ console.log('{' + tempResult + '}匹配');
|
|
|
+ if (tempResult == '{URL}') {
|
|
|
+ htmlWindowUrl = htmlWindowUrl.replace(
|
|
|
+ '{URL}',
|
|
|
+ Common.getHostPageBaseURL(),
|
|
|
+ );
|
|
|
+ } else if (tempResult == '{RecordIds}') {
|
|
|
+ var recordId = _self.modelData.id;
|
|
|
+ htmlWindowUrl = htmlWindowUrl.replace('{RecordIds}', recordId);
|
|
|
+ } else if (tempResult == '{Token}') {
|
|
|
+ htmlWindowUrl = htmlWindowUrl.replace('{Token}', Common.getToken());
|
|
|
+ } else {
|
|
|
+ if (_self.selectedModelDatas.length == 0) {
|
|
|
+ Notify.error(_self.$t('lang.Notify.error'), _self.$t('lang.tabButton.describe3'), true);
|
|
|
+ return;
|
|
|
+ } else if (_self.selectedModelDatas.length > 1) {
|
|
|
+ Notify.error(_self.$t('lang.Notify.error'), _self.$t('lang.tabButton.describe2'), true);
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ var tempResult1 = tempResult.replace('{', '').replace('}', '');
|
|
|
+ htmlWindowUrl = htmlWindowUrl.replace(
|
|
|
+ tempResult,
|
|
|
+ _self.getFirstSelectModelDataFieldValue(tempResult1),
|
|
|
+ );
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ var openWindow = window.open(htmlWindowUrl);
|
|
|
+
|
|
|
+ // 自动关闭
|
|
|
+ if (autoCloseInterval != undefined) {
|
|
|
+ setTimeout(function () {
|
|
|
+ openWindow.close();
|
|
|
+ openWindow = undefined;
|
|
|
+ }, autoCloseInterval * 1000);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ },
|
|
|
+ errorData => {
|
|
|
+ Common.processException(errorData);
|
|
|
+ },
|
|
|
+ );
|
|
|
+ }
|
|
|
+ },
|
|
|
+ // 执行流程
|
|
|
+ executeProcess: function () {
|
|
|
+ var _self = this;
|
|
|
+ var ids = [_self.modelData.id];
|
|
|
+ ProcessReportResource.runProcessByIds(_self.tabButtonModel.processReportNo, ids).then(
|
|
|
+ successData => {
|
|
|
+ _self.modal = true;
|
|
|
+ _self.processReportResult = successData;
|
|
|
+
|
|
|
+ if (
|
|
|
+ _self.processReportResult.reportResults != undefined &&
|
|
|
+ _self.processReportResult.reportResults.length > 0
|
|
|
+ ) {
|
|
|
+ _self.processReportResult.reportResults.forEach(function (item, index) {
|
|
|
+ if (item.reportDefinitionType !== 'ExcelReport') {
|
|
|
+ item.previewIndex = 1;
|
|
|
+ } else {
|
|
|
+ item.previewIndex = 2;
|
|
|
+ }
|
|
|
+ if (index == 0) {
|
|
|
+ item.showPreview = true;
|
|
|
+ } else {
|
|
|
+ item.showPreview = false;
|
|
|
+ }
|
|
|
+ });
|
|
|
+ }
|
|
|
+ _self.titleModal = false;
|
|
|
+ _self.refreshDatas();
|
|
|
+ },
|
|
|
+ errorData => {
|
|
|
+ _self.titleModal = false;
|
|
|
+ Common.processException(errorData);
|
|
|
+ },
|
|
|
+ );
|
|
|
+ // }
|
|
|
+ },
|
|
|
+ // 切换到Form表单的路由
|
|
|
+ switchFormRoute: function (tabButton) {
|
|
|
+ const _self = this;
|
|
|
+ var routeDate = {
|
|
|
+ path: tabButton.customerWindowRouteUrl,
|
|
|
+ params: {
|
|
|
+ modelData: this.modelData,
|
|
|
+ },
|
|
|
+ };
|
|
|
+ // 请勿修改,会影响生单的功能
|
|
|
+ var uuid = _self.uuid;
|
|
|
+ if (uuid != undefined) {
|
|
|
+ routeDate.path = routeDate.path + '/' + uuid;
|
|
|
+ }
|
|
|
+
|
|
|
+ const frameUrl = Common.getRedirectUrl(
|
|
|
+ '#' + routeDate.path,
|
|
|
+ );
|
|
|
|
|
|
+ // 供子页面iframe调用,修改modelData,(举例:生单界面修改参数)。
|
|
|
+ // window.modelDataChanged = this.modelDataChanged;
|
|
|
+
|
|
|
+ // window.getModelData = this.getModelData;
|
|
|
+ let modelData = JSON.stringify(this.modelData);
|
|
|
+ console.log(modelData);
|
|
|
+ localStorage.setItem(_self.uuid + '#GenerateDocumentTool', modelData);
|
|
|
+
|
|
|
+ var iWidth = 1280;//弹出窗口的宽度;
|
|
|
+ var iHeight = 720; //弹出窗口的高度;
|
|
|
+ var iTop = (window.screen.availHeight - 30 - iHeight) / 2;//获得窗口的垂直位置;
|
|
|
+ var iLeft = (window.screen.availWidth - 10 - iWidth) / 2; //获得窗口的水平位置;
|
|
|
+ window.open(frameUrl, '_blank', 'height=' + iHeight + ',innerHeight=' + iHeight + ',width=' + iWidth + ',innerWidth=' + iWidth + ',top=' + iTop + ',left=' + iLeft + ',toolbar=no,menubar=no,scrollbars=auto,resizeable=no,location=no,status=no');
|
|
|
+ // window.open(frameUrl);
|
|
|
+ },
|
|
|
// 获取String字符串
|
|
|
getFieldStringValue: function () {
|
|
|
var value = '';
|