| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624 |
- <template>
- <div>
- <ele-modal
- :visible.sync="visible"
- v-if="visible"
- title="受托转生产订单"
- width="80vw"
- append-to-body
- :maxable="true"
- >
- <el-form
- ref="form"
- :model="form"
- :rules="rules"
- label-width="100px"
- class="create-form"
- >
- <el-row :gutter="24">
- <el-col v-bind="styleResponsive ? { lg: 6, md: 12 } : { span: 6 }">
- <el-form-item label="所属工厂:" prop="orderType">
- <el-input
- clearable
- :maxlength="20"
- v-model="form.applyFactoriesName"
- disabled
- />
- </el-form-item>
- </el-col>
- <el-col v-bind="styleResponsive ? { lg: 6, md: 12 } : { span: 6 }">
- <el-form-item label="请托部门:" prop="orderType">
- <el-input
- clearable
- :maxlength="20"
- v-model="form.applyDeptName"
- disabled
- />
- </el-form-item>
- </el-col>
- <el-col v-bind="styleResponsive ? { lg: 6, md: 12 } : { span: 6 }">
- <el-form-item label="请托人:" prop="orderType">
- <el-input
- clearable
- :maxlength="20"
- v-model="form.createUserName"
- disabled
- />
- </el-form-item>
- </el-col>
- <el-col v-bind="styleResponsive ? { lg: 6, md: 12 } : { span: 6 }">
- <el-form-item label="受托工厂:" prop="orderType">
- <el-input
- clearable
- :maxlength="20"
- v-model="form.beEntrustedFactoriesName"
- disabled
- />
- </el-form-item>
- </el-col>
- <el-col v-bind="styleResponsive ? { lg: 6, md: 12 } : { span: 6 }">
- <el-form-item label="受托部门:" prop="orderType">
- <el-input
- clearable
- :maxlength="20"
- v-model="form.beEntrustedDeptName"
- disabled
- />
- </el-form-item>
- </el-col>
- <el-col v-bind="styleResponsive ? { lg: 6, md: 12 } : { span: 6 }">
- <el-form-item label="类型:">
- <DictSelection
- dictName="请托类型"
- v-model="form.type"
- disabled
- ></DictSelection>
- </el-form-item>
- </el-col>
- <el-col v-bind="styleResponsive ? { lg: 6, md: 12 } : { span: 6 }">
- <el-form-item label="名称:">
- <el-input clearable v-model="form.productName" disabled />
- </el-form-item>
- </el-col>
- <el-col v-bind="styleResponsive ? { lg: 6, md: 12 } : { span: 6 }">
- <el-form-item label="编码:">
- <el-input clearable v-model="form.productCode" disabled />
- </el-form-item>
- </el-col>
- <el-col v-bind="styleResponsive ? { lg: 6, md: 12 } : { span: 6 }">
- <el-form-item label="牌号:">
- <el-input clearable v-model="form.brandNo" disabled />
- </el-form-item>
- </el-col>
- <el-col v-bind="styleResponsive ? { lg: 6, md: 12 } : { span: 6 }">
- <el-form-item label="型号:">
- <el-input clearable v-model="form.model" disabled />
- </el-form-item>
- </el-col>
- <el-col v-bind="styleResponsive ? { lg: 6, md: 12 } : { span: 6 }">
- <el-form-item label="规格:">
- <el-input clearable v-model="form.specification" disabled />
- </el-form-item>
- </el-col>
- <el-col v-bind="styleResponsive ? { lg: 6, md: 12 } : { span: 6 }">
- <el-form-item label="批次号:">
- <el-input clearable v-model="form.batchNo" disabled />
- </el-form-item>
- </el-col>
- <el-col v-bind="styleResponsive ? { lg: 6, md: 12 } : { span: 6 }">
- <el-form-item label="订单数量:">
- <el-input clearable v-model="form.contractNum" disabled>
- <template slot="append">{{ form.measuringUnit }}</template>
- </el-input>
- </el-form-item>
- </el-col>
- <el-col v-bind="styleResponsive ? { lg: 6, md: 12 } : { span: 6 }">
- <el-form-item label="完成日期:" prop="planDeliveryTime">
- <el-date-picker
- :picker-options="pickerOptions"
- style="width: 100%"
- v-model="form.planDeliveryTime"
- type="date"
- placeholder="选择日期"
- value-format="yyyy-MM-dd"
- disabled
- >
- </el-date-picker>
- </el-form-item>
- </el-col>
- <el-col v-bind="styleResponsive ? { lg: 6, md: 12 } : { span: 6 }">
- <el-form-item label="计划开始时间:">
- <el-input clearable v-model="form.planStartTime" disabled>
- </el-input>
- </el-form-item>
- </el-col>
- <el-col v-bind="styleResponsive ? { lg: 6, md: 12 } : { span: 6 }">
- <el-form-item label="计划结束时间:">
- <el-input clearable v-model="form.planCompleteTime" disabled>
- </el-input>
- </el-form-item>
- </el-col>
- <el-col v-bind="styleResponsive ? { lg: 6, md: 12 } : { span: 6 }">
- <el-form-item label="工艺路线:" prop="produceRoutingName">
- <el-input
- v-model="form.produceRoutingName"
- placeholder="请选择工艺路线"
- @click.native="chooseRoute"
- readonly
- />
- </el-form-item>
- </el-col>
- <el-col v-bind="styleResponsive ? { lg: 6, md: 12 } : { span: 6 }">
- <el-form-item label="首工序班组:" prop="teamId">
- <el-select
- style="width: 100%"
- v-model="form.teamId"
- placeholder="请选择首工序班组"
- clearable
- filterable
- :disabled="!form.produceRoutingId"
- :loading="firstTaskTeamLoading"
- @change="teamChange"
- >
- <el-option
- v-for="item in firstTaskTeamList"
- :key="item.id"
- :label="item.name"
- :value="item.id"
- />
- </el-select>
- </el-form-item>
- </el-col>
- <el-col v-bind="styleResponsive ? { lg: 6, md: 12 } : { span: 6 }">
- <el-form-item label="紧急程度:">
- <el-select
- style="width: 100%"
- v-model="form.priority"
- placeholder="请选择"
- clearable
- disabled
- >
- <el-option
- v-for="item in options"
- :key="item.value"
- :label="item.name"
- :value="item.value"
- >
- </el-option>
- </el-select>
- </el-form-item>
- </el-col>
- <el-col v-bind="styleResponsive ? { lg: 12, md: 18 } : { span: 12 }">
- <el-form-item label="需求描述:">
- <el-input
- clearable
- v-model="form.describes"
- type="textarea"
- :rows="4"
- disabled
- />
- </el-form-item>
- </el-col>
- </el-row>
- </el-form>
- <template v-slot:footer>
- <el-button @click="cancel">取消</el-button>
- <el-button type="primary" @click="save"> 确定 </el-button>
- </template>
- <!-- 选择工艺路线 -->
- <ProcessRoute ref="processRouteRef" @changeParent="changeParent" />
- </ele-modal>
- </div>
- </template>
- <script>
- import ProcessRoute from '@/components/selectionDialog/processRoute.vue';
- import {
- getFactoryList,
- createProductionOrder,
- listFirstTaskTeam
- } from '@/api/beEntrusted';
- import { getByCode } from '@/api/system/dictionary-data';
- import { routeList } from '@/api/aps';
- import dayjs from 'dayjs';
- export default {
- name: 'CreateOrder',
- components: {
- ProcessRoute
- },
- props: {
- isAdd: {
- type: Boolean,
- default: true
- }
- },
- data() {
- return {
- visible: false,
- loading: null,
- disabledList: [], //已保存数据不做删除
- form: {
- bomCategoryId: '',
- factoriesId: '',
- applyFactoriesName: '', //所属工厂
- applyDeptName: '', //请托部门
- createUserName: '', //请托人
- beEntrustedFactoriesName: '', //受托工厂
- beEntrustedDeptName: '', //受托部门
- planDeliveryTime: dayjs(
- new Date().getTime() + 3600 * 1000 * 24 * 10
- ).format('YYYY-MM-DD'),
- productName: '',
- productCode: '',
- model: '',
- contractNum: '',
- describes: '',
- measuringUnit: '',
- brandNo: '',
- produceRoutingId: '',
- produceRoutingName: '',
- teamId: '',
- teamName: '',
- sourceId: '',
- sourceCode: '',
- priority: '',
- formingWeight: '',
- newWeightUnit: ''
- },
- // 表单验证规则
- rules: {
- produceRoutingName: [
- { required: true, message: '请选择工艺路线', trigger: 'change' }
- ],
- teamId: [
- { required: true, message: '请选择首工序班组', trigger: 'change' }
- ]
- },
- options: [
- {
- name: '一般',
- value: 1
- },
- {
- name: '紧急',
- value: 2
- }
- ],
- routingList: [],
- factoryList: [],
- firstTaskTeamList: [],
- firstTaskTeamLoading: false,
- title: '受托转生产订单',
- pickerOptions: {
- disabledDate: (time) => {
- // 禁用日期
- let nowData = new Date();
- nowData = new Date(nowData.setDate(nowData.getDate() - 1));
- return time < nowData;
- }
- },
- // 订单类型
- orderTypeList: [
- {
- id: 0,
- label: '库存性订单'
- },
- {
- id: 1,
- label: '生产性订单'
- },
- {
- id: 2,
- label: '无客户生产性订单'
- },
- {
- id: 4,
- label: '不定向订单'
- }
- ],
- selectIndex: 0, // 选择工艺路线的当前数据下标
- processingRequired: 0, // 生产类型跟BOM 版本是否必填 1:是 0:否
- sourceSalesOrderId: '', // 源销售订单ID
- modelList: [], // 机型数据
- colorList: [], // 颜色数据
- routeAllList: []
- };
- },
- watch: {},
- computed: {
- // 是否开启响应式布局
- styleResponsive() {
- return this.$store.state.theme.styleResponsive;
- },
- clientEnvironmentId() {
- return this.$store.state.user.info.clientEnvironmentId;
- },
- // 是否必填字段
- isRequired() {
- return this.processingRequired == 1;
- },
- // 工艺路线 输入框展示跟选择框判断
- isRouteSelect() {
- return (row) => {
- if (this.isRequired) {
- return true;
- }
- if (!row.selectionRowShow) {
- return true;
- }
- return false;
- };
- },
- // 选择按钮的显示
- isSelectShow() {
- // if (this.form.planType == 5) {
- // return true;
- // }
- return this.processingRequired == 0;
- }
- },
- created() {},
- mounted() {
- this.getFactoryList();
- this.getCodeData();
- },
- methods: {
- // 获取
- async getCodeData() {
- let arr1 = await this.getLevelCode('product_model_key');
- let arr2 = await this.getLevelCode('product_color_key');
- this.modelList = arr1;
- this.colorList = arr2;
- },
- async getLevelCode(code) {
- try {
- const res = await getByCode(code);
- if (res.code == 0) {
- let list = Object.values(res.data).map((el) => {
- let k = Object.keys(el)[0];
- let v = Object.values(el)[0];
- return {
- label: v,
- value: k
- };
- });
- return list;
- }
- } catch (err) {
- this.$message.error(err.message);
- }
- },
- async getFactoryList() {
- this.factoryList = await getFactoryList();
- },
- open(row) {
- this.visible = true;
- row[0].bomCategoryId = '';
- row[0].bomCategoryName = '';
- row[0].bomCategoryVersions = '';
- row[0].bomType = '';
- row[0].produceRoutingId = '';
- row[0].produceRoutingName = '';
- row[0].teamId = '';
- row[0].teamName = '';
- this.form = this.deepCopy(row[0]);
- this.form.productCode = this.form.categoryCode;
- this.form.productName = this.form.categoryName;
- this.form.model = this.form.modelType;
- this.form.brandNo = this.form.brandNum;
- this.form.contractNum = this.form.totalCount;
- this.form.sourceCode = this.form.code;
- this.form.sourceId = this.form.id;
- this.form.formingWeight = this.form.totalWeight;
- this.form.newWeightUnit = this.form.weightUnit;
- this.getRoteList(this.form.beEntrustedFactoriesId);
- },
- async getRoteList(factoriesId) {
- await routeList({ factoriesId, pageNum: 1, size: -1 }).then((res) => {
- this.routeAllList = res.list;
- });
- },
- deepCopy(obj, hash = new WeakMap()) {
- if (obj === null) return null;
- if (obj instanceof Date) return new Date(obj);
- if (obj instanceof RegExp) return new RegExp(obj);
- if (typeof obj !== 'object' && typeof obj !== 'function') return obj;
- if (hash.has(obj)) return hash.get(obj);
- const result = Array.isArray(obj) ? [] : {};
- hash.set(obj, result);
- return Object.keys(obj).reduce((acc, key) => {
- acc[key] = this.deepCopy(obj[key], hash);
- return acc;
- }, result);
- },
- cancel() {
- this.form = {
- bomCategoryId: '',
- factoriesId: '',
- applyFactoriesName: '', //所属工厂
- applyDeptName: '', //请托部门
- createUserName: '', //请托人
- beEntrustedFactoriesName: '', //受托工厂
- beEntrustedDeptName: '', //受托部门
- planDeliveryTime: dayjs(
- new Date().getTime() + 3600 * 1000 * 24 * 10
- ).format('YYYY-MM-DD'),
- productName: '',
- productCode: '',
- model: '',
- contractNum: '',
- describes: '',
- measuringUnit: '',
- brandNo: '',
- produceRoutingId: '',
- produceRoutingName: '',
- teamId: '',
- teamName: '',
- sourceId: '',
- sourceCode: '',
- priority: ''
- };
- this.firstTaskTeamList = [];
- this.$refs.form.clearValidate();
- this.visible = false;
- },
- /* 保存编辑 */
- save() {
- this.$refs.form.validate((valid) => {
- if (!valid) {
- return false;
- }
- // if (!this.form.produceRoutingName) {
- // return this.$message.warning('请选择工艺路线');
- // }
- // this.form.produceRoutingName = this.routeAllList.find(
- // (item) => item.id === this.form.produceRoutingId
- // )?.name;
- this.form.planDeliveryTime = this.form.planDeliveryTime
- ? String(this.form.planDeliveryTime).split(' ')[0]
- : '';
- let params = {
- ...this.form,
- teamId: this.form.teamId,
- teamName: this.form.teamName,
- sourceType: 3
- };
- this.loading = this.$loading({
- lock: true,
- text: '加载中',
- background: 'rgba(0, 0, 0, 0.7)'
- });
- createProductionOrder(params)
- .then((res) => {
- this.loading.close();
- this.$message.success('成功');
- this.cancel();
- this.$emit('refresh');
- })
- .catch((e) => {
- this.loading.close();
- });
- });
- },
- chooseRoute() {
- this.$refs.processRouteRef.open(this.form);
- },
- // 打开工艺路线
- openDialog(index) {
- this.selectIndex = index;
- this.$refs.processRouteRef.open();
- },
- async getFirstTaskTeamList(routingId) {
- this.firstTaskTeamLoading = true;
- try {
- const list = await listFirstTaskTeam(routingId);
- if (String(this.form.produceRoutingId) !== String(routingId)) {
- return;
- }
- this.firstTaskTeamList = Array.isArray(list) ? list : [];
- if (!this.firstTaskTeamList.length) {
- this.$message.warning('当前工艺路线未配置首工序班组');
- }
- } catch (err) {
- this.firstTaskTeamList = [];
- // this.$message.error(err.message);
- } finally {
- this.firstTaskTeamLoading = false;
- }
- },
- teamChange(teamId) {
- const team = this.firstTaskTeamList.find(
- (item) => String(item.id) === String(teamId)
- );
- this.form.teamName = team ? team.name : '';
- },
- // 选择工艺路线
- changeParent(item) {
- this.form.produceRoutingName = item.name;
- this.form.produceRoutingId = item.id;
- this.form.teamId = '';
- this.form.teamName = '';
- this.firstTaskTeamList = [];
- this.getFirstTaskTeamList(item.id);
- this.$nextTick(() => {
- this.$refs.form.clearValidate('produceRoutingName');
- });
- }
- }
- };
- </script>
- <style lang="scss" scoped>
- .basic-details-title {
- margin: 10px 0;
- }
- .add-product {
- width: 100%;
- display: flex;
- align-items: center;
- justify-content: flex-end;
- font-size: 30px;
- color: #1890ff;
- margin: 10px 0;
- cursor: pointer;
- }
- .create-form .el-form-item {
- margin-bottom: 15px !important;
- }
- .header_required {
- .is-required:before {
- content: '*';
- color: #f56c6c;
- margin-right: 4px;
- }
- }
- </style>
|