|
@@ -16,7 +16,7 @@
|
|
@change="metadataChange"
|
|
@change="metadataChange"
|
|
:originColumns="originColumns"
|
|
:originColumns="originColumns"
|
|
contentType="VIEW"
|
|
contentType="VIEW"
|
|
- @saveFastOption="saveFastOption"
|
|
|
|
|
|
+ :fastOptionContent="formWidgetMetadataViewList"
|
|
></select-metadata>
|
|
></select-metadata>
|
|
<t-button variant="outline" @click="handleRefresh">
|
|
<t-button variant="outline" @click="handleRefresh">
|
|
<template #icon><svg-icon name="refresh" color="#262626" /></template>
|
|
<template #icon><svg-icon name="refresh" color="#262626" /></template>
|
|
@@ -45,6 +45,8 @@
|
|
<select-filter
|
|
<select-filter
|
|
:metadata="formWidgetMetadataViewList"
|
|
:metadata="formWidgetMetadataViewList"
|
|
@confirm="filterConfirm"
|
|
@confirm="filterConfirm"
|
|
|
|
+ type="CLOUD_MARK_SOP_FLOW"
|
|
|
|
+ contentType="SEARCH"
|
|
></select-filter>
|
|
></select-filter>
|
|
</div>
|
|
</div>
|
|
<SearchForm :fields="fields" :params="params" :search="search">
|
|
<SearchForm :fields="fields" :params="params" :search="search">
|
|
@@ -57,7 +59,7 @@
|
|
}"
|
|
}"
|
|
></select-service-unit>
|
|
></select-service-unit>
|
|
</template>
|
|
</template>
|
|
- <template #aaa="{ item, params }">
|
|
|
|
|
|
+ <template #leadId="{ item, params }">
|
|
<select-type-user
|
|
<select-type-user
|
|
v-model="params[item.prop]"
|
|
v-model="params[item.prop]"
|
|
type="REGION_MANAGER"
|
|
type="REGION_MANAGER"
|
|
@@ -214,9 +216,9 @@
|
|
</template>
|
|
</template>
|
|
|
|
|
|
<script setup name="StudentSop">
|
|
<script setup name="StudentSop">
|
|
-import { ref, reactive, computed } from 'vue';
|
|
|
|
|
|
+import { ref, reactive, computed, watch } from 'vue';
|
|
import useFetchTable from '@/hooks/useFetchTable';
|
|
import useFetchTable from '@/hooks/useFetchTable';
|
|
-import { sopListApi, sopBatchCancelApi } from '@/api/sop';
|
|
|
|
|
|
+import { sopListApi, sopBatchCancelApi, getSopFastOptionsApi } from '@/api/sop';
|
|
import { timestampFilter } from '@/utils/filter';
|
|
import { timestampFilter } from '@/utils/filter';
|
|
import SelectFilter from '../../components/select-filter/index.vue';
|
|
import SelectFilter from '../../components/select-filter/index.vue';
|
|
import SelectMetadata from '../../components/select-metadata.vue';
|
|
import SelectMetadata from '../../components/select-metadata.vue';
|
|
@@ -240,8 +242,14 @@ const selectedRowKeys = ref([]);
|
|
const selectChange = (value) => {
|
|
const selectChange = (value) => {
|
|
selectedRowKeys.value = value;
|
|
selectedRowKeys.value = value;
|
|
};
|
|
};
|
|
-const originColumns = [
|
|
|
|
- { fieldId: 'serviceName', fieldTitle: '服务单元', width: 160, code: 'TEXT' },
|
|
|
|
|
|
+const originColumns = ref([]);
|
|
|
|
+const defaultTableColumns = [
|
|
|
|
+ {
|
|
|
|
+ fieldId: 'serviceName',
|
|
|
|
+ fieldTitle: '服务单元',
|
|
|
|
+ width: 160,
|
|
|
|
+ code: 'TEXT',
|
|
|
|
+ },
|
|
{ fieldId: 'sopNo', fieldTitle: 'SOP流水号', width: 200, code: 'TEXT' },
|
|
{ fieldId: 'sopNo', fieldTitle: 'SOP流水号', width: 200, code: 'TEXT' },
|
|
{ fieldId: 'crmNo', fieldTitle: '项目单号', width: 200, code: 'TEXT' },
|
|
{ fieldId: 'crmNo', fieldTitle: '项目单号', width: 200, code: 'TEXT' },
|
|
{ fieldId: 'beginTime', fieldTitle: '派单时间', width: 180, code: 'DATE' },
|
|
{ fieldId: 'beginTime', fieldTitle: '派单时间', width: 180, code: 'DATE' },
|
|
@@ -260,7 +268,12 @@ const originColumns = [
|
|
},
|
|
},
|
|
{ fieldId: 'customName', fieldTitle: '客户名称', width: 140, code: 'TEXT' },
|
|
{ fieldId: 'customName', fieldTitle: '客户名称', width: 140, code: 'TEXT' },
|
|
{ fieldId: 'crmName', fieldTitle: '项目名称', minWidth: 160, code: 'TEXT' },
|
|
{ fieldId: 'crmName', fieldTitle: '项目名称', minWidth: 160, code: 'TEXT' },
|
|
- { fieldId: 'productName', fieldTitle: '实施产品', width: 120, code: 'TEXT' },
|
|
|
|
|
|
+ {
|
|
|
|
+ fieldId: 'productName',
|
|
|
|
+ fieldTitle: '实施产品',
|
|
|
|
+ width: 120,
|
|
|
|
+ code: 'TEXT',
|
|
|
|
+ },
|
|
{
|
|
{
|
|
fieldId: 'examStartTime',
|
|
fieldId: 'examStartTime',
|
|
fieldTitle: '考试开始时间',
|
|
fieldTitle: '考试开始时间',
|
|
@@ -273,7 +286,12 @@ const originColumns = [
|
|
width: 180,
|
|
width: 180,
|
|
code: 'DATE',
|
|
code: 'DATE',
|
|
},
|
|
},
|
|
- { fieldId: 'flowCreateName', fieldTitle: '提交人', width: 140, code: 'TEXT' },
|
|
|
|
|
|
+ {
|
|
|
|
+ fieldId: 'flowCreateName',
|
|
|
|
+ fieldTitle: '提交人',
|
|
|
|
+ width: 140,
|
|
|
|
+ code: 'TEXT',
|
|
|
|
+ },
|
|
{
|
|
{
|
|
fieldId: 'flowCreateTime',
|
|
fieldId: 'flowCreateTime',
|
|
fieldTitle: '提交时间',
|
|
fieldTitle: '提交时间',
|
|
@@ -304,7 +322,30 @@ const originColumns = [
|
|
code: 'SINGLE_SELECT',
|
|
code: 'SINGLE_SELECT',
|
|
},
|
|
},
|
|
];
|
|
];
|
|
-const originFieldIds = originColumns.map((item) => item.fieldId);
|
|
|
|
|
|
+originColumns.value = cloneDeep(defaultTableColumns);
|
|
|
|
+const getCustomColumns = (id) => {
|
|
|
|
+ getSopFastOptionsApi({
|
|
|
|
+ type: 'CLOUD_MARK_SOP_FLOW',
|
|
|
|
+ contentType: 'VIEW',
|
|
|
|
+ }).then((res) => {
|
|
|
|
+ if (res && res?.length) {
|
|
|
|
+ let option = res.find((item) => item.id == id);
|
|
|
|
+ let data = JSON.parse(option.content || '[]').map((item) => {
|
|
|
|
+ if (item.options && typeof item.options === 'string') {
|
|
|
|
+ item.options = JSON.parse(item.options);
|
|
|
|
+ }
|
|
|
|
+ return item;
|
|
|
|
+ });
|
|
|
|
+ originColumns.value = data;
|
|
|
|
+ } else {
|
|
|
|
+ originColumns.value = [];
|
|
|
|
+ }
|
|
|
|
+ });
|
|
|
|
+};
|
|
|
|
+
|
|
|
|
+const originFieldIds = computed(() => {
|
|
|
|
+ return originColumns.value.map((item) => item.fieldId);
|
|
|
|
+});
|
|
|
|
|
|
const columns = computed(() => {
|
|
const columns = computed(() => {
|
|
const defaultColumns = [
|
|
const defaultColumns = [
|
|
@@ -343,84 +384,90 @@ const columns = computed(() => {
|
|
}
|
|
}
|
|
});
|
|
});
|
|
|
|
|
|
-const fields = ref([
|
|
|
|
- {
|
|
|
|
- prop: 'serviceId',
|
|
|
|
- label: '服务单元',
|
|
|
|
- type: 'select',
|
|
|
|
- labelWidth: 75,
|
|
|
|
- colSpan: 4,
|
|
|
|
- cell: 'service',
|
|
|
|
- },
|
|
|
|
- {
|
|
|
|
- prop: 'aaa',
|
|
|
|
- label: '大区经理',
|
|
|
|
- labelWidth: 75,
|
|
|
|
- colSpan: 4,
|
|
|
|
- cell: 'aaa',
|
|
|
|
- },
|
|
|
|
- {
|
|
|
|
- prop: 'bbb',
|
|
|
|
- label: '客户名称',
|
|
|
|
- labelWidth: 75,
|
|
|
|
- colSpan: 4,
|
|
|
|
- },
|
|
|
|
- {
|
|
|
|
- prop: 'ccc',
|
|
|
|
- label: '当前节点',
|
|
|
|
- type: 'select',
|
|
|
|
- labelWidth: 75,
|
|
|
|
- colSpan: 4,
|
|
|
|
- options: [],
|
|
|
|
- },
|
|
|
|
- {
|
|
|
|
- prop: 'ddd',
|
|
|
|
- label: '客户经理',
|
|
|
|
- labelWidth: 75,
|
|
|
|
- colSpan: 4,
|
|
|
|
- },
|
|
|
|
- {
|
|
|
|
- prop: 'eee',
|
|
|
|
- label: '打卡在时限内',
|
|
|
|
- type: 'select',
|
|
|
|
- labelWidth: 100,
|
|
|
|
- colSpan: 4,
|
|
|
|
- options: [],
|
|
|
|
- },
|
|
|
|
- {
|
|
|
|
- prop: 'fff',
|
|
|
|
- label: '项目名称',
|
|
|
|
- labelWidth: 75,
|
|
|
|
- colSpan: 4,
|
|
|
|
- },
|
|
|
|
- {
|
|
|
|
- prop: 'ggg',
|
|
|
|
- label: 'sop号',
|
|
|
|
- labelWidth: 75,
|
|
|
|
- colSpan: 4,
|
|
|
|
- },
|
|
|
|
- {
|
|
|
|
- prop: 'hhh',
|
|
|
|
- label: '快捷搜索',
|
|
|
|
- type: 'select',
|
|
|
|
- labelWidth: 75,
|
|
|
|
- colSpan: 4,
|
|
|
|
- options: [],
|
|
|
|
- },
|
|
|
|
- {
|
|
|
|
- prop: 'iii',
|
|
|
|
- label: '快捷显示',
|
|
|
|
- type: 'select',
|
|
|
|
- labelWidth: 75,
|
|
|
|
- colSpan: 4,
|
|
|
|
- options: [],
|
|
|
|
- },
|
|
|
|
- {
|
|
|
|
- prop: 'buttons',
|
|
|
|
- colSpan: 4,
|
|
|
|
- labelWidth: 16,
|
|
|
|
- },
|
|
|
|
-]);
|
|
|
|
|
|
+const fields = computed(() => {
|
|
|
|
+ return [
|
|
|
|
+ {
|
|
|
|
+ prop: 'serviceId',
|
|
|
|
+ label: '服务单元',
|
|
|
|
+ type: 'select',
|
|
|
|
+ labelWidth: 104,
|
|
|
|
+ colSpan: 6,
|
|
|
|
+ cell: 'service',
|
|
|
|
+ },
|
|
|
|
+ {
|
|
|
|
+ prop: 'leadId',
|
|
|
|
+ label: '大区经理',
|
|
|
|
+ labelWidth: 104,
|
|
|
|
+ colSpan: 6,
|
|
|
|
+ cell: 'leadId',
|
|
|
|
+ },
|
|
|
|
+ {
|
|
|
|
+ prop: 'customName',
|
|
|
|
+ label: '客户名称',
|
|
|
|
+ labelWidth: 104,
|
|
|
|
+ colSpan: 6,
|
|
|
|
+ },
|
|
|
|
+ {
|
|
|
|
+ prop: 'taskKey',
|
|
|
|
+ label: '当前节点',
|
|
|
|
+ type: 'select',
|
|
|
|
+ labelWidth: 104,
|
|
|
|
+ colSpan: 6,
|
|
|
|
+ options:
|
|
|
|
+ appStore
|
|
|
|
+ .getFlowDetailByType('CLOUD_MARK_SOP_FLOW')
|
|
|
|
+ ?.setupList?.map((item) => ({ value: item, label: item })) || [],
|
|
|
|
+ },
|
|
|
|
+ {
|
|
|
|
+ prop: 'crmUserId',
|
|
|
|
+ label: '客户经理',
|
|
|
|
+ labelWidth: 104,
|
|
|
|
+ colSpan: 6,
|
|
|
|
+ },
|
|
|
|
+
|
|
|
|
+ {
|
|
|
|
+ prop: 'crmName',
|
|
|
|
+ label: '项目名称',
|
|
|
|
+ labelWidth: 104,
|
|
|
|
+ colSpan: 6,
|
|
|
|
+ },
|
|
|
|
+ {
|
|
|
|
+ prop: 'sopNo',
|
|
|
|
+ label: 'sop号',
|
|
|
|
+ labelWidth: 104,
|
|
|
|
+ colSpan: 6,
|
|
|
|
+ },
|
|
|
|
+ {
|
|
|
|
+ prop: 'fastSearch',
|
|
|
|
+ label: '快捷搜索',
|
|
|
|
+ type: 'select',
|
|
|
|
+ labelWidth: 104,
|
|
|
|
+ colSpan: 6,
|
|
|
|
+ options: [],
|
|
|
|
+ },
|
|
|
|
+ {
|
|
|
|
+ prop: 'fastColumns',
|
|
|
|
+ label: '快捷显示',
|
|
|
|
+ type: 'select',
|
|
|
|
+ labelWidth: 104,
|
|
|
|
+ colSpan: 6,
|
|
|
|
+ options: [],
|
|
|
|
+ },
|
|
|
|
+ {
|
|
|
|
+ prop: 'eee',
|
|
|
|
+ label: '打卡在时限内',
|
|
|
|
+ type: 'select',
|
|
|
|
+ labelWidth: 104,
|
|
|
|
+ colSpan: 6,
|
|
|
|
+ options: [],
|
|
|
|
+ },
|
|
|
|
+ {
|
|
|
|
+ prop: 'buttons',
|
|
|
|
+ colSpan: 6,
|
|
|
|
+ labelWidth: 16,
|
|
|
|
+ },
|
|
|
|
+ ];
|
|
|
|
+});
|
|
const params = reactive({
|
|
const params = reactive({
|
|
serviceId: '',
|
|
serviceId: '',
|
|
formWidgetMetadataViewList: cloneDeep(originColumns),
|
|
formWidgetMetadataViewList: cloneDeep(originColumns),
|
|
@@ -428,9 +475,10 @@ const params = reactive({
|
|
formWidgetMetadataOrderList: [],
|
|
formWidgetMetadataOrderList: [],
|
|
formWidgetMetadataOperation: 'AND',
|
|
formWidgetMetadataOperation: 'AND',
|
|
});
|
|
});
|
|
|
|
+
|
|
const transParams = computed(() => {
|
|
const transParams = computed(() => {
|
|
let formWidgetMetadataViewList = params.formWidgetMetadataViewList.filter(
|
|
let formWidgetMetadataViewList = params.formWidgetMetadataViewList.filter(
|
|
- (item) => !originFieldIds.includes(item.fieldId)
|
|
|
|
|
|
+ (item) => !originFieldIds.value.includes(item.fieldId)
|
|
);
|
|
);
|
|
return { ...params, formWidgetMetadataViewList, type: 'CLOUD_MARK_SOP_FLOW' };
|
|
return { ...params, formWidgetMetadataViewList, type: 'CLOUD_MARK_SOP_FLOW' };
|
|
});
|
|
});
|
|
@@ -450,7 +498,12 @@ const {
|
|
|
|
|
|
const formWidgetMetadataViewList = ref(cloneDeep(originColumns));
|
|
const formWidgetMetadataViewList = ref(cloneDeep(originColumns));
|
|
const metadataChange = (vals) => {
|
|
const metadataChange = (vals) => {
|
|
- formWidgetMetadataViewList.value = vals;
|
|
|
|
|
|
+ formWidgetMetadataViewList.value = vals.map((item) => {
|
|
|
|
+ if (item.options && typeof item.options === 'string') {
|
|
|
|
+ item.options = JSON.parse(item.options);
|
|
|
|
+ }
|
|
|
|
+ return item;
|
|
|
|
+ });
|
|
search();
|
|
search();
|
|
};
|
|
};
|
|
|
|
|
|
@@ -554,5 +607,8 @@ const toDeviceManage = (row) => {
|
|
showDeviceManage.value = true;
|
|
showDeviceManage.value = true;
|
|
};
|
|
};
|
|
|
|
|
|
-const saveFastOption = (name) => {};
|
|
|
|
|
|
+watch(originColumns, () => {
|
|
|
|
+ params.formWidgetMetadataViewList = cloneDeep(originColumns.value);
|
|
|
|
+ formWidgetMetadataViewList.value = cloneDeep(originColumns.value);
|
|
|
|
+});
|
|
</script>
|
|
</script>
|