|
@@ -2,50 +2,84 @@
|
|
|
<div class="sop-step">
|
|
|
<div class="page-wrap">
|
|
|
<p class="split-line"></p>
|
|
|
- <t-tabs v-model="curStep" placement="left" class="m-t-20px">
|
|
|
- <t-tab-panel
|
|
|
- v-for="item in tabs"
|
|
|
- :key="item.taskKey"
|
|
|
- :value="item.value"
|
|
|
- :label="item.label"
|
|
|
- >
|
|
|
- <t-form
|
|
|
- ref="form"
|
|
|
- colon
|
|
|
- :label-width="labelWidth"
|
|
|
- class="cur-step-view"
|
|
|
+ <div class="p-t-10px p-b-30px" style="background-color: #fff">
|
|
|
+ <t-tabs v-model="curStep" placement="left" class="m-t-10px">
|
|
|
+ <t-tab-panel
|
|
|
+ v-for="item in tabs"
|
|
|
+ :key="item.taskKey"
|
|
|
+ :value="item.value"
|
|
|
+ :label="item.label"
|
|
|
>
|
|
|
- <t-row :gutter="[0, 10]">
|
|
|
- <t-col
|
|
|
- :span="
|
|
|
- fullWidthCodes.includes(config.code) ? 12 : config.span || 6
|
|
|
- "
|
|
|
- v-for="config in curFormConfig"
|
|
|
- :key="config.id"
|
|
|
- >
|
|
|
- <MyFormItem
|
|
|
- :config="config"
|
|
|
- :labelWidth="labelWidth"
|
|
|
- ></MyFormItem>
|
|
|
- </t-col>
|
|
|
- </t-row>
|
|
|
- </t-form>
|
|
|
- <s-buttons
|
|
|
- confirmText="提交"
|
|
|
- @cancel="router.back()"
|
|
|
- class="m-t-50px"
|
|
|
- ></s-buttons>
|
|
|
- </t-tab-panel>
|
|
|
- </t-tabs>
|
|
|
+ <t-form
|
|
|
+ ref="form"
|
|
|
+ colon
|
|
|
+ :label-width="labelWidth"
|
|
|
+ class="cur-step-view"
|
|
|
+ :rules="rules"
|
|
|
+ :data="formData"
|
|
|
+ >
|
|
|
+ <t-row :gutter="[0, 20]">
|
|
|
+ <t-col
|
|
|
+ :span="
|
|
|
+ fullWidthCodes.includes(config.code)
|
|
|
+ ? 12
|
|
|
+ : config.span < 6
|
|
|
+ ? 6
|
|
|
+ : config.span || 6
|
|
|
+ "
|
|
|
+ v-for="config in curFormConfig"
|
|
|
+ :key="config.id"
|
|
|
+ >
|
|
|
+ <MyFormItem
|
|
|
+ :config="config"
|
|
|
+ :labelWidth="labelWidth"
|
|
|
+ @change="itemValueChange"
|
|
|
+ ></MyFormItem>
|
|
|
+ </t-col>
|
|
|
+ </t-row>
|
|
|
+ </t-form>
|
|
|
+ <s-buttons
|
|
|
+ confirmText="提交"
|
|
|
+ @cancel="router.back()"
|
|
|
+ @confirm="submitHandle"
|
|
|
+ class="m-t-50px"
|
|
|
+ ></s-buttons>
|
|
|
+ </t-tab-panel>
|
|
|
+ </t-tabs>
|
|
|
+ </div>
|
|
|
</div>
|
|
|
</div>
|
|
|
</template>
|
|
|
|
|
|
<script setup name="SopStep">
|
|
|
-import { ref, computed } from 'vue';
|
|
|
+import { ref, computed, watch } from 'vue';
|
|
|
import MyFormItem from '../../components/my-form-item.vue';
|
|
|
-import { useRouter } from 'vue-router';
|
|
|
-import testData from '../test';
|
|
|
+import { useRouter, useRoute } from 'vue-router';
|
|
|
+import { getSopFlowView } from '@/api/sop';
|
|
|
+import bus from '@/utils/bus';
|
|
|
+// import testData from '../test';
|
|
|
+const needValueCodes = [
|
|
|
+ 'NUMBER', //新增
|
|
|
+ 'TEXT',
|
|
|
+ 'DATE',
|
|
|
+ 'SELECT',
|
|
|
+ 'CHECKBOX',
|
|
|
+ 'TEXTAREA',
|
|
|
+ 'TABLE',
|
|
|
+ 'RADIO',
|
|
|
+ 'RADIO_WITH_INPUT',
|
|
|
+ 'SIGN',
|
|
|
+ 'DEVICE_OUT_TABLE',
|
|
|
+ 'DEVICE_IN_TABLE',
|
|
|
+ 'FILE',
|
|
|
+];
|
|
|
+const rules = ref({
|
|
|
+ // scan_net_radio_2: [{ required: true, type: 'error', message: '大大是的' }],
|
|
|
+});
|
|
|
+const formData = ref({});
|
|
|
+const formProperty = ref([]);
|
|
|
+const loading = ref(false);
|
|
|
+const route = useRoute();
|
|
|
const router = useRouter();
|
|
|
const labelWidth = ref(230);
|
|
|
const fullWidthCodes = ref([
|
|
@@ -56,34 +90,94 @@ const fullWidthCodes = ref([
|
|
|
'DEVICE_OUT_TABLE',
|
|
|
'DEVICE_IN_TABLE',
|
|
|
]);
|
|
|
-const form = ref();
|
|
|
+const form = ref(null);
|
|
|
+const allSteps = ref([]);
|
|
|
+const tabs = ref([]);
|
|
|
+const curStep = ref('');
|
|
|
+const flowId = route.query.flowId;
|
|
|
+const initFill = () => {
|
|
|
+ loading.value = true;
|
|
|
+ getSopFlowView({ flowId }).then((res) => {
|
|
|
+ loading.value = false;
|
|
|
+ curStep.value = res.currFlowTaskResult.taskName;
|
|
|
+ res.flowTaskHistoryList = res.flowTaskHistoryList || [];
|
|
|
+ res.flowTaskHistoryList.forEach((item) => {
|
|
|
+ item.formProperty.forEach((v) => {
|
|
|
+ v.writable = false;
|
|
|
+ });
|
|
|
+ });
|
|
|
+ allSteps.value = [...res.flowTaskHistoryList, res.currFlowTaskResult];
|
|
|
+ tabs.value = [
|
|
|
+ ...res.flowTaskHistoryList.map((item) => {
|
|
|
+ return { value: item.taskName, label: item.taskName };
|
|
|
+ }),
|
|
|
+ {
|
|
|
+ value: res.currFlowTaskResult.taskName,
|
|
|
+ label: res.currFlowTaskResult.taskName,
|
|
|
+ },
|
|
|
+ ];
|
|
|
+ });
|
|
|
+};
|
|
|
+const init = () => {
|
|
|
+ if (route.query.type === 'fill') {
|
|
|
+ //type为fill是点击“填报”进来的
|
|
|
+ initFill();
|
|
|
+ } else {
|
|
|
+ //还有可能是点击“新增SOP”进来的
|
|
|
+ }
|
|
|
+};
|
|
|
+init();
|
|
|
|
|
|
-// const curStep = ref('f_usertask_jwc_project');
|
|
|
-const curStep = ref('设备入库登记');
|
|
|
-let allSteps = ref([
|
|
|
- ...testData.flowTaskHistoryList,
|
|
|
- testData.currFlowTaskResult,
|
|
|
-]);
|
|
|
-let tabsArr = [
|
|
|
- ...testData.flowTaskHistoryList.map((item) => {
|
|
|
- return { value: item.taskName, label: item.taskName };
|
|
|
- }),
|
|
|
- {
|
|
|
- value: testData.currFlowTaskResult.taskName,
|
|
|
- label: testData.currFlowTaskResult.taskName,
|
|
|
- },
|
|
|
-];
|
|
|
-let tabs = ref(tabsArr);
|
|
|
const curFormConfig = computed(() => {
|
|
|
- return allSteps.value.find((item) => item.taskName === curStep.value)
|
|
|
- .formProperty;
|
|
|
+ return (
|
|
|
+ allSteps.value.find((item) => item.taskName === curStep.value)
|
|
|
+ ?.formProperty || []
|
|
|
+ );
|
|
|
});
|
|
|
-const submitHandle = () => {
|
|
|
- form.value.validate().then(async (result) => {
|
|
|
- alert(result);
|
|
|
- if (result === true) {
|
|
|
+watch(curFormConfig, (val) => {
|
|
|
+ formData.value = val.reduce((obj, item) => {
|
|
|
+ if (needValueCodes.includes(item.code)) {
|
|
|
+ obj[item.formName] = '';
|
|
|
+ }
|
|
|
+ return obj;
|
|
|
+ }, {});
|
|
|
+ rules.value = val.reduce((obj, item) => {
|
|
|
+ let ruleItem =
|
|
|
+ item.required && needValueCodes.includes(item.code)
|
|
|
+ ? {
|
|
|
+ required: true,
|
|
|
+ message: `${item.title}不能为空`,
|
|
|
+ type: 'error',
|
|
|
+ trigger: 'change',
|
|
|
+ }
|
|
|
+ : null;
|
|
|
+ if (ruleItem) {
|
|
|
+ obj[item.formName] = [ruleItem];
|
|
|
}
|
|
|
+ return obj;
|
|
|
+ }, {});
|
|
|
+});
|
|
|
+const submitHandle = () => {
|
|
|
+ bus.emit('checkTable');
|
|
|
+ let tablePassed = false;
|
|
|
+ bus.on('tablePassed', () => {
|
|
|
+ tablePassed = true;
|
|
|
+ console.log('table通过了');
|
|
|
});
|
|
|
+ bus.on('tableFailed', () => {
|
|
|
+ tablePassed = false;
|
|
|
+ console.log('table不通过');
|
|
|
+ });
|
|
|
+ setTimeout(() => {
|
|
|
+ form.value[0].validate().then(async (result) => {
|
|
|
+ if (result === true && tablePassed) {
|
|
|
+ //提交表单接口执行
|
|
|
+ }
|
|
|
+ });
|
|
|
+ }, 10);
|
|
|
+};
|
|
|
+const itemValueChange = ({ prop, value }) => {
|
|
|
+ formData.value[prop] = value;
|
|
|
};
|
|
|
const back = () => {
|
|
|
history.back();
|