Browse Source

页面新增弹窗

LAPTOP-16IUEB3P\Lenovo 3 years ago
parent
commit
0423c5d29b

+ 52 - 0
src/api/classifyManage/index.js

@@ -0,0 +1,52 @@
+import request from '@/utils/request';
+
+export async function getSubPage (data) {
+  const res = await request.get('/main/categoryLevel/getSubPage', {
+    params: data
+  });
+  if (res.data.code == 0) {
+    return res.data.data;
+  }
+  return Promise.reject(new Error(res.data.message));
+}
+export async function saveOrUpdate (data) {
+  const res = await request.post('/main/categoryLevel/saveOrUpdate', data);
+  if (res.data.code == 0) {
+    return res.data;
+  }
+  return Promise.reject(new Error(res.data.message));
+}
+
+// 根据父级id查分类树
+export async function getTreeByPid (parentId) {
+  const res = await request.get(`/main/categoryLevel/getTreeByPid/${parentId}`);
+  if (res.data.code == 0) {
+    return res.data;
+  }
+  return Promise.reject(new Error(res.data.message));
+}
+// 根据类型查分类树
+export async function getTreeByType (type) {
+  const res = await request.get(`/main/categoryLevel/getTreeByType/${type}`);
+  if (res.data.code == 0) {
+    return res.data;
+  }
+  return Promise.reject(new Error(res.data.message));
+}
+
+// 删除分类
+export async function deleteCategory (id) {
+  const res = await request.get(`/main/categoryLevel/delete/${id}`);
+  if (res.data.code == 0) {
+    return res.data;
+  }
+  return Promise.reject(new Error(res.data.message));
+}
+//根据ID查询分类详情系信息
+export async function getInfoById (id) {
+  const res = await request.get(`/main/categoryLevel/getById/${id}`);
+  if (res.data.code == 0) {
+    return res.data;
+  }
+  return Promise.reject(new Error(res.data.message));
+}

+ 53 - 0
src/api/classifyManage/itemInformation.js

@@ -0,0 +1,53 @@
+import request from '@/utils/request';
+// 物品信息列表
+export async function getList (data) {
+  const res = await request.post('/main/category/getList', data);
+  if (res.data.code == 0) {
+    return res.data.data;
+  }
+  return Promise.reject(new Error(res.data.message));
+}
+// 物品信息保存
+export async function informationAdd (data) {
+  const res = await request.post('/main/category/add', data);
+  if (res.data.code == 0) {
+    return res.data.data;
+  }
+  return Promise.reject(new Error(res.data.message));
+}
+
+// 物品信息编辑
+export async function informationEdit (data) {
+  const res = await request.post('/main/category/edit', data);
+  if (res.data.code == 0) {
+    return res.data.data;
+  }
+  return Promise.reject(new Error(res.data.message));
+}
+
+// 物品信息详情
+export async function getDetails (id) {
+  const res = await request.get(`/main/category/info/${id}`);
+  if (res.data.code == 0) {
+    return res.data.data;
+  }
+  return Promise.reject(new Error(res.data.message));
+}
+
+// 物品信息删除
+export async function removeItem (id) {
+  const res = await request.get(`/main/category/remove/${id}`, {});
+  if (res.data.code == 0) {
+    return res.data.data;
+  }
+  return Promise.reject(new Error(res.data.message));
+}
+
+// 物品信息获取编码
+export async function getOrderNo (prefix) {
+  const res = await request.get(`/main/category/createOrderNo/${prefix}`, {});
+  if (res.data.code == 0) {
+    return res.data.data;
+  }
+  return Promise.reject(new Error(res.data.message));
+}

+ 115 - 0
src/api/saleOrder/index.js

@@ -0,0 +1,115 @@
+import request from '@/utils/request';
+
+/**
+ * 获取当前登录的菜单、按钮权限
+ */
+export async function getResourcesTree () {
+  const res = await request.get('/system/resources/getResourcesTree');
+  if (res.data.code == 0 && res.data.data) {
+    return res.data.data;
+  }
+  return Promise.reject(new Error(res.data.message));
+}
+
+/**
+ * 修改当前登录的用户密码
+ */
+export async function updatePassword (data) {
+  const res = await request.put('/auth/password', data);
+  if (res.data.code === 0) {
+    return res.data.message ?? '修改成功';
+  }
+  return Promise.reject(new Error(res.data.message));
+}
+
+/**
+ * 查询未读通知
+ */
+export async function getUnreadNotice () {
+  return {
+    notice: [
+      {
+        color: '#60B2FC',
+        icon: 'el-icon-s-comment',
+        title: '你收到了一封14份新周报',
+        time: '2020-07-27 18:30:18'
+      },
+      {
+        color: '#F5686F',
+        icon: 'el-icon-s-check',
+        title: '许经理同意了你的请假申请',
+        time: '2020-07-27 09:08:36'
+      },
+      {
+        color: '#7CD734',
+        icon: 'el-icon-video-camera',
+        title: '陈总邀请你参加视频会议',
+        time: '2020-07-26 18:30:01'
+      },
+      {
+        color: '#FAAD14',
+        icon: 'el-icon-s-claim',
+        title: '你推荐的刘诗雨已通过第三轮面试',
+        time: '2020-07-25 16:38:46'
+      },
+      {
+        color: '#2BCACD',
+        icon: 'el-icon-message-solid',
+        title: '你的6月加班奖金已发放',
+        time: '2020-07-25 11:03:31'
+      }
+    ],
+    letter: [
+      {
+        avatar:
+          'https://cdn.eleadmin.com/20200609/c184eef391ae48dba87e3057e70238fb.jpg',
+        title: 'SunSmile 评论了你的日志',
+        content: '写的不错, 以后多多向你学习~',
+        time: '2020-07-27 18:30:18'
+      },
+      {
+        avatar:
+          'https://cdn.eleadmin.com/20200609/948344a2a77c47a7a7b332fe12ff749a.jpg',
+        title: '刘诗雨 点赞了你的日志',
+        content: '写的不错, 以后多多向你学习~',
+        time: '2020-07-27 09:08:36'
+      },
+      {
+        avatar:
+          'https://cdn.eleadmin.com/20200609/2d98970a51b34b6b859339c96b240dcd.jpg',
+        title: '酷酷的大叔 评论了你的周报',
+        content: '写的不错, 以后多多向你学习~',
+        time: '2020-07-26 18:30:01'
+      },
+      {
+        avatar:
+          'https://cdn.eleadmin.com/20200609/f6bc05af944a4f738b54128717952107.jpg',
+        title: 'Jasmine 点赞了你的周报',
+        content: '写的不错, 以后多多向你学习~',
+        time: '2020-07-25 11:03:31'
+      }
+    ],
+    todo: [
+      {
+        status: 0,
+        title: '刘诗雨的请假审批',
+        description: '刘诗雨在 07-27 18:30 提交的请假申请'
+      },
+      {
+        status: 1,
+        title: '第三方代码紧急变更',
+        description: '需要在 2020-07-27 之前完成'
+      },
+      {
+        status: 2,
+        title: '信息安全考试',
+        description: '需要在 2020-07-26 18:30 前完成'
+      },
+      {
+        status: 2,
+        title: 'EleAdmin发布新版本',
+        description: '需要在 2020-07-25 11:03 前完成'
+      }
+    ]
+  };
+}

+ 6 - 1
src/enum/dict.js

@@ -8,7 +8,12 @@ export default {
   生命周期: 'life_cycle',
   网络状态: 'network_status',
   金额单位: 'money_unit',
-  时间单位: 'time_unit'
+  时间单位: 'time_unit',
+  订单来源: 'order_source',
+  订单类型 :'order_type',
+  生产状态: 'production_status',
+  按单按库: 'order_library',
+  紧急程度: 'urgent_type',
 };
 
 export const numberList = ['patrol_cycle'];

+ 297 - 0
src/views/saleOrder/components/EquipmentDialog.vue

@@ -0,0 +1,297 @@
+<template>
+  <el-dialog
+    title="选择产品"
+    :visible.sync="equipmentdialog"
+    :before-close="handleClose"
+    :close-on-click-modal="false"
+    :close-on-press-escape="false"
+    append-to-body
+    width="60%"
+  >
+    <div>
+      <el-row>
+		<el-col :span="24" class="topsearch">
+			<el-form >
+			  <el-row>
+          <el-col :span="6">
+            <el-input
+              v-model="searchKey"
+              placeholder="输入设备编码或名称"
+              size="small"
+            ></el-input>
+          </el-col>
+          <el-col :span="6" style="margin-left:10px">
+             <el-button type="primary" size="small" @click="searchByKeyWords">搜索</el-button>
+             <el-button size="small" @click="reset">重置</el-button>
+          </el-col>
+			  </el-row>
+			</el-form>
+		</el-col>
+        <el-col :span="6" class="tree_col">
+          <AssetTree
+            @handleNodeClick="handleNodeClick"
+            @setRootId="setRootId"
+            :type="'5'"
+            :paramsType="'type'"
+            ref="treeList"
+          />
+        </el-col>
+        <el-col :span="18" class="table_col">
+          <el-table
+            :data="tableData"
+            height="450"
+            highlight-current-row
+            @current-change="handleCurrentChange"
+          >
+            <el-table-column label="物品编码" prop="code" width="200"></el-table-column>
+            <el-table-column label="物品名称" prop="name"></el-table-column>
+            <el-table-column label="牌号" prop="classificationUrl"></el-table-column>
+            <el-table-column label="型号" prop="specification">>
+            </el-table-column>
+            <el-table-column type='selection' width="55"></el-table-column>
+          </el-table>
+          <div class="pagination">
+            <el-pagination
+              background
+              layout="total, sizes, prev, pager, next, jumper"
+              :total="pagination.total"
+              :page-sizes="[5, 10, 20, 50, 100]"
+              :page-size="pagination.size"
+              :current-page.sync="pagination.page"
+              @current-change="handleCurrent"
+              @size-change="handleSize"
+            >
+            </el-pagination>
+          </div>
+        </el-col>
+      </el-row>
+    </div>
+    <div class="btns">
+      <el-button type="primary" size="small" @click="selected">选择</el-button>
+      <el-button size="small" @click="handleClose">关闭</el-button>
+    </div>
+  </el-dialog>
+</template>
+
+<script>
+  import AssetTree from '@/components/AssetTree';
+export default {
+  components: {
+    AssetTree
+  },
+  data () {
+    return {
+      equipmentdialog: false,
+      defaultExpandedKeys: [],
+      tableData: [],
+      currentTreeData: {},
+      params: {},
+      selectedRow: {},
+      pagination: {
+        page: 1,
+        size: 10,
+        total: 0
+      },
+	    searchKey:null,
+      ids:[],
+      treeData:[],
+      requestApi: null,
+	  
+	  current:null,
+	  rootId:null
+    }
+  },
+  // components: { vTreeList },
+  watch: {
+    // equipmentdialog (val) {
+    //   if (val) {
+    //     this.$nextTick(() => {
+    //       const treeList = this.$refs.commonTree.treeList
+    //       this.defaultExpandedKeys = [treeList[0].id]
+    //       this.handleNodeClick(treeList[0])
+    //     })
+    //   }
+    // }
+  },
+  methods: {
+	open(){
+		this.equipmentdialog = true
+	},
+	handleNodeClick (info) {
+	  this.current = info
+	},
+	// 获取根节点id
+	setRootId(id){
+	  this.rootId = id
+	},
+	
+	
+    handleClose () {
+      this.equipmentdialog = false
+    },
+
+    handleCurrent (page) {
+      this.pagination.page = page
+      this._getList(this.params)
+    },
+    handleSize (size) {
+      this.pagination.page = 1
+      this.pagination.size = size
+      this._getList(this.params)
+    },
+
+    // 树点击事件
+    // handleNodeClick (data, node) {
+    //   // 只点击叶子节点请求表格数据
+    //   if (data.id === this.currentTreeData.id) return
+    //   if(data.children){
+    //      this.ids = []
+    //      this.treeData = []
+    //      this._getTreeDataId(data)
+    //   }else{
+    //     this.ids = [data.id]
+    //   }
+    //   // if (this.currentTreeData.id === data.id || data.children) return
+    //   // this.params = { classificationIdList: [data.id] }
+    //   this.currentTreeData = data
+    //   this.params = { classificationId: parseInt(this.currentTreeData.id)  }
+    //   this._getList(this.params)
+    // },
+
+    // 封装递归获取树id
+    _getTreeDataId (tree) {
+      let data = tree
+      data.children.map(item => {
+        if (item.children) {
+          let tempChildren = []
+          tempChildren = Array.from(item.children)
+          this.treeData.push(data, ...tempChildren)
+        }
+        if (!item.children) {
+          this.treeData.push(data, item)
+        }
+      })
+      for (let i = 0; i < this.treeData.length; i++) {
+        if (this.treeData[i].id) {
+          this.ids.push(this.treeData[i].id)
+        }
+      }
+      this.ids = [...new Set(this.ids)]
+    },
+
+
+    // 封装 - 获取设备列表数据
+     async _getList (params) {
+         const pageParams = {
+           page: this.pagination.page,
+           size: this.pagination.size
+         }
+         let res = await getAssetsList(pageParams, params)
+         // console.log(res)
+         this.tableLoading = false
+         if (res.success) {
+             this.tableData = res.data.records
+             this.pagination.total = res.data.total
+         } else {
+           this.$message.error(res.code)
+         }
+        // switch (this.currentTreeData.parentName) {
+        //   case '生产设备':
+        //     this.requestApi = getList
+        //     break;
+        //   case '舟皿':
+        //     this.requestApi = getBoatList
+        //     break;
+        //   case '周转车':
+        //     this.requestApi = getTurnoverCarList
+        //     break;
+        //   case '模具':
+        //     this.requestApi = getMouldList
+        //     break;
+        // }
+        // this.handleList(params, this.requestApi)
+    },
+
+    async handleList (params, requestApi) {
+      try {
+        const pageParams = {
+          page: this.pagination.page,
+          size: this.pagination.size
+        }
+        let res = await requestApi(pageParams, params)
+        // console.log(res)
+        this.tableLoading = false
+        if (res.success) {
+            this.tableData = res.data.records
+            this.pagination.total = res.data.total
+        } else {
+          this.$message.error(res.code)
+        }
+      } catch (error) {
+        this.tableLoading = false
+      }
+    },
+
+    // 表格选中行
+    handleCurrentChange (row) {
+      if(row){
+        this.selectedRow = row
+        this.selectedRow.equiTypeId = this.currentTreeData.id
+        this.selectedRow.equiTypeName = this.currentTreeData.name
+      }
+    },
+
+    // 选择的设备行
+    selected () {
+      this.selectedRow.parentName = this.currentTreeData.parentName
+      this.$emit('submit', this.selectedRow)
+      this.handleClose()
+    },
+    // 弹窗 - 按关键字搜索
+    searchByKeyWords () {
+      // console.log(this.searchMsg)
+      if(!this.currentTreeData){
+        this.$message.warning('请先选择设备!')
+        return
+      }
+      this.pagination.page = 1
+      this.params = { searchKey: this.searchKey , classificationId: parseInt(this.currentTreeData.id)  }
+      this._getList(this.params)
+    },
+    // 重置
+    reset(){
+       this.pagination.page = 1
+       this.searchKey = ''
+       this.params = { searchKey:this.searchKey , classificationId: parseInt(this.currentTreeData.id) }
+       this._getList(this.params)
+    }
+  }
+}
+</script>
+
+<style lang="scss" scoped>
+.tree_col {
+  border: 1px solid #eee;
+  padding: 10px 0;
+  box-sizing: border-box;
+  height: 500px;
+  overflow: auto;
+}
+.table_col {
+  padding-left: 10px;
+  ::v-deep .el-table th.el-table__cell {
+    background: #f2f2f2;
+  }
+}
+.pagination {
+  text-align: right;
+  padding: 10px 0;
+}
+.btns {
+  text-align: center;
+  padding: 10px 0;
+}
+.topsearch{
+	margin-bottom:15px;
+}
+</style>

+ 212 - 0
src/views/saleOrder/components/create-order.vue

@@ -0,0 +1,212 @@
+<template>
+  <ele-modal
+    :visible.sync="visible"
+    title="创建订单"
+    width="70vw"
+    append-to-body
+  >
+    <el-form ref="form" :model="form" :rules="rules" label-width="90px">
+		<el-row :gutter="15">
+			<el-col v-bind="styleResponsive ? { lg: 6, md: 12 } : { span: 6 }">
+			  <el-form-item label="销售订单号:">
+			     <el-input clearable :maxlength="20" v-model="form.ddh" disabled/>
+			  </el-form-item>
+			</el-col>
+			<el-col v-bind="styleResponsive ? { lg: 6, md: 12 } : { span: 6 }">
+			  <el-form-item label="交付要求:">
+			     <DictSelection dictName="紧急程度" clearable v-model="form.staus">
+			     </DictSelection>
+			  </el-form-item>
+			</el-col>
+			<el-col v-bind="styleResponsive ? { lg: 6, md: 12 } : { span: 6 }">
+			  <el-form-item label="订单类型:">
+					<DictSelection dictName="订单类型" clearable v-model="form.staus">
+					</DictSelection>
+			  </el-form-item>
+			</el-col>
+			<el-col v-bind="styleResponsive ? { lg: 6, md: 12 } : { span: 6 }">
+			  <el-form-item label="按单按库:">
+			  	<DictSelection dictName="按单按库" clearable v-model="form.staus">
+			  	</DictSelection>
+			  </el-form-item>
+			</el-col>
+			<el-col v-bind="styleResponsive ? { lg: 12, md: 12 } : { span: 12 }">
+			  <el-form-item label="客户名称:">
+			     <el-input clearable v-model="form.ddh"/>
+			  </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.ddh"/>
+			  </el-form-item>
+			</el-col>
+			<el-col v-bind="styleResponsive ? { lg: 6, md: 12 } : { span: 6 }">
+			  <el-form-item label="交付日期:" prop="date">
+			    <el-date-picker
+				   style="width: 100%;"
+				   v-model="form.date"
+				   type="date"
+				   placeholder="选择日期"
+				   value-format="yyyy-MM-dd">
+				 </el-date-picker>
+			  </el-form-item>
+			</el-col>
+			<el-col v-bind="styleResponsive ? { lg: 24, md: 24 } : { span: 24 }">
+			  <el-form-item label="备注:">
+			     <el-input clearable v-model="form.remrk"/>
+			  </el-form-item>
+			</el-col>
+		</el-row>
+		<el-table
+		  :data="form.tableList"
+		  border
+		>
+		  <el-table-column label="序号" align="center" width="60">
+		    <template slot-scope="scope">
+		      <span>{{ scope.$index + 1 }}</span>
+		    </template>
+		  </el-table-column>
+		  <el-table-column label="行号" align="center" prop="name">
+		  </el-table-column>
+		  <el-table-column label="产品名称" align="center" prop="model">
+		  </el-table-column>
+		  <el-table-column label="产品编号" align="center" prop="model">
+		  </el-table-column>
+		  <el-table-column label="牌号" align="center" prop="model">
+		  </el-table-column>
+		  <el-table-column label="型号" align="center" prop="model">
+		  </el-table-column>
+		  <el-table-column label="单重" align="center" prop="model">
+		  </el-table-column>
+		  <el-table-column label="交付数量" align="center" prop="num">
+		    <template slot-scope="scope">
+		      <el-form-item
+		          label-width="0px"
+		         :prop="'tableList.'+ scope.$index + '.num'"
+		         :rules="{
+		           required: true,
+		           message: '请输入交付数量',
+		           trigger: 'blur'
+		         }"
+		       >
+		         <el-input
+		            v-model.number="scope.row.num"
+		            size="small"
+		            oninput="value=value.replace(/[^\d]/g,'')"
+		            style="width: 100%"
+		            placeholder="输入数量"
+		          ></el-input>
+		      </el-form-item>
+		    </template>
+		  </el-table-column>
+		  <el-table-column label="交付重量" align="center" prop="measuringUnit">
+		  </el-table-column>
+		  <el-table-column label="操作" align="center" width="70">
+		    <template slot-scope="scope">
+		      <el-button
+		        type="text"
+		        @click="handleDeleteItem(scope.$index)"
+		        >删除</el-button
+		      >
+		    </template>
+		  </el-table-column>
+		</el-table>
+		<div class="add-product" @click='addEquipment'>
+			<i class="el-icon-circle-plus-outline"></i>
+		</div>
+    </el-form>
+    <template v-slot:footer>
+      <el-button @click="cancel">取消</el-button>
+      <el-button type="primary" @click="save" :loading="loading">
+        确定
+      </el-button>
+    </template>
+	
+	<!-- 选择产品 -->
+	<EquipmentDialog ref="equipmentRefs"> </EquipmentDialog>
+  </ele-modal>
+</template>
+
+<script>
+	import EquipmentDialog from '../components/EquipmentDialog.vue'
+	export default {
+		components: {
+		  EquipmentDialog
+		},
+    data() {
+      return {
+        visible: false,
+		tableList:[],
+		loading:false,
+		form:{
+			tableList:[
+				{name:'122',model:'型号1'},
+				{name:'222',model:'型号2'}
+			]
+		},
+		// 表单验证规则
+		rules: {
+		  date: [
+		    {
+		      required: true,
+		      message: '请选择交付日期',
+		      trigger: 'change'
+		    }
+		  ]
+		},
+      };
+    },
+    computed: {
+      // 是否开启响应式布局
+      styleResponsive() {
+        return this.$store.state.theme.styleResponsive;
+      }
+    },
+    created(){
+    },
+    methods: {
+	  open () {
+	    this.visible = true;
+	  },
+      cancel () {
+		this.form = {
+			tableList:[]
+		}
+		this.$refs.form.clearValidate();
+        this.visible = false;
+      },
+	  // 删除产品
+	  handleDeleteItem (index) {
+	    this.form.tableList.splice(index, 1)
+	  },
+	  addEquipment(){
+		  this.$refs.equipmentRefs.open()
+	  }, 
+	  /* 保存编辑 */
+	  save() {
+	    this.$refs.form.validate((valid) => {
+	      if (!valid) {
+	        return false;
+	      }
+	    });
+	  },
+	  
+    }
+  };
+</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
+;
+  }
+</style>

+ 61 - 0
src/views/saleOrder/components/import-exception.vue

@@ -0,0 +1,61 @@
+<template>
+  <el-dialog
+    :visible.sync="visible"
+    title="导入异常"
+    width="60vw"
+    append-to-body
+  >
+    <div class="main_container">
+		<el-table
+		  :data="tableList"
+		  style="width: 100%"
+		  border
+		>
+			  <el-table-column label="序号" type="index" align="center" width="70">
+			  </el-table-column>
+			  <el-table-column label="首行标识" align="center">
+				<template slot-scope="scope">
+				</template>
+			  </el-table-column>
+			  <el-table-column label="行数" align="center">
+			  </el-table-column>
+			  <el-table-column label="异常说明" align="center">
+			  </el-table-column>
+		</el-table>
+	</div>
+    <div slot="footer" class="footer">
+      <div>
+        <el-button @click="cancel">确定</el-button>
+      </div>
+    </div>
+  </el-dialog>
+</template>
+
+<script>
+	export default {
+    data() {
+      return {
+        visible: false,
+		tableList:[]
+      };
+    },
+    computed: {
+      
+    },
+    created(){
+    },
+    methods: {
+	  open () {
+	    this.visible = true;
+	  },
+      cancel () {
+        this.visible = false;
+      },
+    }
+  };
+</script>
+<style lang="scss" scoped>
+  .basic-details-title{
+	  margin:10px 0
+  }
+</style>

+ 233 - 0
src/views/saleOrder/components/order-detail.vue

@@ -0,0 +1,233 @@
+<template>
+  <el-dialog
+    :visible.sync="visible"
+    title="销售订单详情"
+    width="80vw"
+    append-to-body
+  >
+    <div class="main_container">
+		<div class="basic-details-title border-none">
+		  <span class="border-span">基本信息</span>
+		</div>
+		<el-descriptions title="" :column="6" size="medium" border>
+		  <el-descriptions-item>
+			<template slot="label"> 销售订单号 </template>
+			2100034996
+		  </el-descriptions-item>
+		  <el-descriptions-item>
+			<template slot="label"> 下达时间 </template>
+			2023/08/05 18:45:36
+		  </el-descriptions-item>
+		  <el-descriptions-item>
+			<template slot="label"> 合同数量</template>
+		  </el-descriptions-item>
+		  <el-descriptions-item>
+			<template slot="label"> 已交货数量 </template>
+		  </el-descriptions-item>
+		  <el-descriptions-item>
+			<template slot="label"> 欠交货数量 </template>
+		  </el-descriptions-item>
+		  <el-descriptions-item>
+		  	<template slot="label"> 订单来源 </template>
+		  </el-descriptions-item>
+		  <el-descriptions-item>
+		  	<template slot="label"> 订单类型 </template>
+		  </el-descriptions-item>
+		  <el-descriptions-item>
+		  	<template slot="label"> 交付时间 </template>
+		  </el-descriptions-item>
+		  <el-descriptions-item>
+		  	<template slot="label"> 合同重量 </template>
+		  </el-descriptions-item>
+		  <el-descriptions-item>
+		  	<template slot="label"> 已交货重量 </template>
+		  </el-descriptions-item>
+		  <el-descriptions-item>
+		  	<template slot="label"> 欠交货重量 </template>
+		  </el-descriptions-item>
+		  <el-descriptions-item>
+		  	<template slot="label"> 交付要求 </template>
+		  </el-descriptions-item>
+		  <el-descriptions-item>
+		  	<template slot="label"> 按单按库 </template>
+		  </el-descriptions-item>
+		  <el-descriptions-item>
+		  	<template slot="label"> 交货工厂 </template>
+		  </el-descriptions-item>
+		  <el-descriptions-item>
+		  	<template slot="label"> 计划单号 </template>
+		  </el-descriptions-item>
+		  <el-descriptions-item>
+		  	<template slot="label"> 交货状态 </template>
+		  </el-descriptions-item>
+		  <el-descriptions-item>
+		  	<template slot="label"> 更新时间 </template>
+		  </el-descriptions-item>
+		  <el-descriptions-item>
+		  	<template slot="label"> 创建人 </template>
+		  </el-descriptions-item>
+		  <el-descriptions-item>
+		  	<template slot="label"> 生产状态 </template>
+		  </el-descriptions-item>
+		</el-descriptions>
+		<div class="basic-details-title border-none">
+		  <span class="border-span">产品规格需求</span>
+		</div>
+		<el-descriptions title="" :column="6" size="medium" border>
+		  <el-descriptions-item>
+			<template slot="label"> 行号 </template>
+			30
+		  </el-descriptions-item>
+		  <el-descriptions-item>
+			<template slot="label"> 产品编编码 </template>
+		  </el-descriptions-item>
+		  <el-descriptions-item>
+			<template slot="label"> 牌号 </template>
+		  </el-descriptions-item>
+		  <el-descriptions-item>
+			<template slot="label"> 型号 </template>
+		  </el-descriptions-item>
+		  <el-descriptions-item>
+			<template slot="label"> 单重 </template>
+		  </el-descriptions-item>
+		  <el-descriptions-item>
+			<template slot="label"> 重量单位 </template>
+		  </el-descriptions-item>
+		  <el-descriptions-item>
+			<template slot="label"> 单位 </template>
+		  </el-descriptions-item>
+		  <el-descriptions-item>
+		  	<template slot="label"> 产品层次4 </template>
+		  </el-descriptions-item>
+		  <el-descriptions-item>
+		  	<template slot="label"> 产品层次5 </template>
+		  </el-descriptions-item>
+		  <el-descriptions-item>
+		  	<template slot="label"> 包装要求 </template>
+		  </el-descriptions-item>
+		  <el-descriptions-item :span='2'>
+		  	<template slot="label"> 物料描述 </template>
+		  </el-descriptions-item>
+		  <el-descriptions-item :span='2'>
+		  	<template slot="label"> 技术要求 </template>
+		  </el-descriptions-item>
+		  <el-descriptions-item :span='2'>
+		  	<template slot="label"> 印字要求 </template>
+		  </el-descriptions-item>
+		  <el-descriptions-item :span='2'>
+		  	<template slot="label"> 质量证书要求 </template>
+		  </el-descriptions-item>
+		</el-descriptions>
+		<div class="basic-details-title border-none">
+		  <span class="border-span">业务信息</span>
+		</div>
+		<el-descriptions title="" :column="6" size="medium" border>
+		  <el-descriptions-item :span='2'>
+		  	<template slot="label"> 客户名称 </template>
+		  </el-descriptions-item>
+		  <el-descriptions-item>
+			<template slot="label"> 客户代码 </template>
+		  </el-descriptions-item>
+		  <el-descriptions-item>
+			<template slot="label"> 客户参考 </template>
+		  </el-descriptions-item>
+		  <el-descriptions-item>
+			<template slot="label"> 业务员 </template>			
+		  </el-descriptions-item>
+		  <el-descriptions-item>
+			<template slot="label"> 销售业务员 </template>
+		  </el-descriptions-item>
+		  <el-descriptions-item>
+			<template slot="label" > 销售组织 </template>
+		  </el-descriptions-item>
+		  <el-descriptions-item>
+		  	<template slot="label"> 销售组 </template>
+		  </el-descriptions-item>
+		  <el-descriptions-item :span='2'>
+		  	<template slot="label"> 销售要求 </template>			
+		  </el-descriptions-item>
+		  <el-descriptions-item :span='2'>
+		  	<template slot="label"> 销售组织描述 </template>
+		  </el-descriptions-item>
+		  <el-descriptions-item :span='2'>
+		  	<template slot="label" > 销售组名称 </template>
+		  </el-descriptions-item>
+		</el-descriptions>
+		<div class="basic-details-title border-none">
+		  <span class="border-span">当前订单所有产品</span>
+		</div>
+		<el-table
+		  :data="tableList"
+		  style="width: 100%"
+		  border
+		>
+			  <el-table-column label="行号" align="center">
+			  </el-table-column>
+			  <el-table-column label="产品编码" align="center">
+				<template slot-scope="scope">
+				</template>
+			  </el-table-column>
+			  <el-table-column label="牌号" align="center">
+			  </el-table-column>
+			  <el-table-column label="型号" align="center">
+			  </el-table-column>
+			  <el-table-column label="合同数量" align="center">
+			  </el-table-column>
+			  <el-table-column label="计划单号" align="center">
+			  </el-table-column>
+			  <el-table-column label="计划生产数量" align="center" width="120">
+			  </el-table-column>
+			  <el-table-column label="要求成型数量" align="center" width="120">
+			  </el-table-column>
+			  <el-table-column label="未成型数量" align="center" width="120">
+			  </el-table-column>
+			  <el-table-column label="已成型数量" align="center" width="120">
+			  </el-table-column>
+			  <el-table-column label="已交付量" align="center">
+			  </el-table-column>
+			  <el-table-column label="已出库数量" align="center" width="120">
+			  </el-table-column>
+			  <el-table-column label="下达日期" align="center">
+			  </el-table-column>
+			  <el-table-column label="交付日期" align="center">
+			  </el-table-column>
+			  <el-table-column label="状态" align="center">
+			  </el-table-column>
+		</el-table>
+	</div>
+    <div slot="footer" class="footer">
+      <div>
+        <el-button @click="cancel">关闭</el-button>
+      </div>
+    </div>
+  </el-dialog>
+</template>
+
+<script>
+	export default {
+    data() {
+      return {
+        visible: false,
+		tableList:[]
+      };
+    },
+    computed: {
+      
+    },
+    created(){
+    },
+    methods: {
+	  open () {
+	    this.visible = true;
+	  },
+      cancel () {
+        this.visible = false;
+      },
+    }
+  };
+</script>
+<style lang="scss" scoped>
+  .basic-details-title{
+	  margin:10px 0
+  }
+</style>

+ 188 - 0
src/views/saleOrder/components/order-search.vue

@@ -0,0 +1,188 @@
+<!-- 搜索表单 -->
+<template>
+  <el-form
+    label-width="90px"
+    class="ele-form-search"
+    @keyup.enter.native="search"
+    @submit.native.prevent
+  >
+    <el-row :gutter="15">
+      <el-col v-bind="styleResponsive ? { lg: 6, md: 12 } : { span: 6 }">
+        <el-form-item label="销售订单号:">
+          <el-input v-model="where.ddh" placeholder="请输入"></el-input>
+        </el-form-item>
+      </el-col>
+      <el-col v-bind="styleResponsive ? { lg: 6, md: 12 } : { span: 6 }">
+        <el-form-item label="产品编码:">
+					<el-input v-model="where.ddh" placeholder="请输入"></el-input>
+        </el-form-item>
+      </el-col>
+	<el-col v-bind="styleResponsive ? { lg: 6, md: 12 } : { span: 6 }">
+	  <el-form-item label="行号:">
+			<el-input v-model="where.ddh" placeholder="请输入"></el-input>
+	  </el-form-item>
+	</el-col>
+	<el-col v-bind="styleResponsive ? { lg: 6, md: 12 } : { span: 6 }">
+	  <el-form-item label="牌号:">
+			<el-input v-model="where.ddh" placeholder="请输入"></el-input>
+	  </el-form-item>
+	</el-col>
+	<el-col v-bind="styleResponsive ? { lg: 6, md: 12 } : { span: 6 }">
+	  <el-form-item label="型号:">
+			<el-input v-model="where.ddh" placeholder="请输入"></el-input>
+	  </el-form-item>
+	</el-col>
+	<el-col v-bind="styleResponsive ? { lg: 6, md: 12 } : { span: 6 }">
+	  <el-form-item label="订单来源:">
+		 <DictSelection dictName="订单来源" clearable v-model="where.staus">
+		 </DictSelection>
+	  </el-form-item>
+	</el-col>
+	<el-col v-bind="styleResponsive ? { lg: 6, md: 12 } : { span: 6 }">
+	  <el-form-item label="客户名称:">
+			<el-input v-model="where.ddh" placeholder="请输入"></el-input>
+	  </el-form-item>
+	</el-col>
+	<el-col v-bind="styleResponsive ? { lg: 6, md: 12 } : { span: 6 }">
+	  <el-form-item label="订单类型:">
+			<DictSelection dictName="订单类型" clearable v-model="where.staus">
+			</DictSelection>
+	  </el-form-item>
+	</el-col>
+	<el-col v-bind="styleResponsive ? { lg: 6, md: 12 } : { span: 6 }">
+	  <el-form-item label="生产状态:">
+			<DictSelection dictName="生产状态" clearable v-model="where.staus">
+			</DictSelection>
+	  </el-form-item>
+	</el-col>
+	  <el-col v-bind="styleResponsive ? { lg: 6, md: 12 } : { span: 6 }">
+	    <el-form-item label="按单按库:">
+	  		<DictSelection dictName="按单按库" clearable v-model="where.staus">
+	  		</DictSelection>
+	    </el-form-item>
+	  </el-col>
+	  <el-col v-bind="styleResponsive ? { lg: 6, md: 12 } : { span: 6 }">
+	    <el-form-item label="业务员:">
+	  		<el-input v-model="where.ddh" placeholder="请输入"></el-input>
+	    </el-form-item>
+	  </el-col>
+	  <el-col v-bind="styleResponsive ? { lg: 6, md: 12 } : { span: 6 }">
+	    <el-form-item label="组合编码:">
+	  		<el-input v-model="where.ddh" placeholder="请输入"></el-input>
+	    </el-form-item>
+	  </el-col>
+	  <el-col v-bind="styleResponsive ? { lg: 12, md: 12 } : { span: 12 }">
+	  		  <el-form-item label="交货日期:">
+	  			<el-date-picker
+	  			    style="width: 100%;"
+	  				v-model="time"
+	  				type="daterange"
+	  				range-separator="至"
+	  				start-placeholder="开始日期"
+	  				end-placeholder="结束日期"
+	  				value-format="yyyy-MM-dd HH:mm:ss"
+	  				:default-time="['00:00:00', '23:59:59']"
+	  				>
+	  			</el-date-picker>
+	  		  </el-form-item>
+	    </el-col>
+      <el-col v-bind="styleResponsive ? { lg: 12, md: 12 } : { span: 12 }">
+		<div class="ele-form-actions">
+			<el-button
+				type="primary"
+				icon="el-icon-search"
+				class="ele-btn-icon"
+				@click="search"
+				size="small"
+			>
+				查询
+			</el-button>
+			 <el-button @click="reset"
+				 icon="el-icon-refresh-left"
+				 size="small"
+				 type="primary"
+			 >重置</el-button>
+		</div>
+      </el-col>
+	  <el-col v-bind="styleResponsive ? { lg: 24, md: 24 } : { span: 24 }">
+		  <el-form-item label-width="0px">
+			  <el-button>转生产计划</el-button>
+			  <el-button type="primary">订单刷新</el-button>
+			  <el-button type="success" @click="toCreate">创建订单</el-button>
+			  <el-button type="info">订单组合</el-button>
+			  <el-button type="warning" @click="toImport">批量导入</el-button>
+			  <el-button type="danger">批量删除</el-button>
+		  </el-form-item>			  
+	  </el-col>
+    </el-row>
+		
+		<!-- 导入异常 -->
+		<import-exception ref="importDialog"> </import-exception>
+		<!-- 创建订单 -->
+		<create-order ref="createDialog"> </create-order>
+  </el-form>
+</template>
+
+<script>
+	import ImportException from '../components/import-exception.vue'
+	import CreateOrder from '../components/create-order.vue'
+	export default {
+		components: {
+		  ImportException,
+		  CreateOrder
+		},
+    data() {
+      // 默认表单数据
+      const defaultWhere = {
+		name:'',
+        ruleName: '',
+        code: '',
+        groupId:'',
+        status:'',
+		categoryLevelId:''
+      };
+      return {
+        // 表单数据
+        where: { ...defaultWhere },
+        time:[]
+      };
+    },
+    computed: {
+      // 是否开启响应式布局
+      styleResponsive() {
+        return this.$store.state.theme.styleResponsive;
+      }
+    },
+    created(){
+    },
+    methods: {
+      /* 搜索 */
+      search() {
+        if(this.time.length){
+        	this.where.startTime = this.time[0]
+        	this.where.endTime = this.time[1]
+        }
+        this.$emit('search', this.where);
+      },
+      /*  重置 */
+      reset() {
+		this.time = []
+        this.where = { ...this.defaultWhere };
+        this.search();
+      },
+	  toImport(){
+		  this.$refs.importDialog.open()
+	  },
+	  toCreate(){
+		  this.$refs.createDialog.open()
+	  }
+    }
+  };
+</script>
+<style lang="scss" scoped>
+    .ele-form-actions{
+		display:flex;
+		align-items: center;
+		justify-content: flex-end;
+	}
+</style>

+ 266 - 1
src/views/saleOrder/index.vue

@@ -1 +1,266 @@
-<template></template>
+<template>
+  <div class="ele-body">
+    <el-card shadow="never" v-loading="loading">
+      <order-search @search="reload"> </order-search>
+      <!-- 数据表格 -->
+      <ele-pro-table
+        ref="table"
+        :columns="columns"
+        :datasource="datasource"
+        cache-key="systemRoleTable"
+      >
+        <template v-slot:toolbar>
+			  <el-tabs v-model="activeName" type="card" @tab-click="handleClick">
+			    <el-tab-pane label="待排产" name="first"></el-tab-pane>
+			    <el-tab-pane label="已排产" name="second"></el-tab-pane>
+			  </el-tabs>
+        </template>
+		<template v-slot:name='{row}'>
+			<el-link :underline="false" @click="openDetails(row)">
+			  {{ row.name }}
+			</el-link>
+		</template>
+		<!-- 操作列 -->
+		<template v-slot:action="{ row }">
+		  <el-link
+		    type="primary"
+		    :underline="false"
+		    icon="el-icon-edit"
+		    @click="toUpdate(row)"
+		  >
+		    修改
+		  </el-link>
+		  <el-popconfirm
+		    class="ele-action"
+		    title="确定要删除此销售订单吗?"
+		    @confirm="remove(row)"
+		  >
+		    <template v-slot:reference>
+		      <el-link type="danger" :underline="false" icon="el-icon-delete">
+		        删除
+		      </el-link>
+		    </template>
+		  </el-popconfirm>
+		</template>
+      </ele-pro-table>
+    </el-card>
+	<!-- 详情弹窗 -->
+	<order-detail @refresh="reload" ref="detailDialog"> </order-detail>
+
+  </div>
+</template>
+
+<script>
+  import OrderSearch from './components/order-search.vue';
+  import OrderDetail from './components/order-detail.vue';
+  import { getResourcesTree } from '@/api/saleOrder';
+  import dictMixins from '@/mixins/dictMixins';
+  export default {
+    mixins: [dictMixins],
+    components: {
+      OrderSearch,
+	  OrderDetail
+    },
+    data () {
+      return {
+        // 表格列配置
+        columns: [
+		  {
+		    width: 45,
+		    type: 'selection',
+		    columnKey: 'selection',
+		    align: 'center'
+		  },
+          {
+            columnKey: 'index',
+            label: '序号',
+            type: 'index',
+            width: 55,
+            align: 'center',
+            showOverflowTooltip: true,
+            fixed: 'left'
+          },
+          {
+            prop: 'code',
+            label: '销售订单号',
+            align: 'center',
+            showOverflowTooltip: true,
+            minWidth: 110,
+            slot: 'code'
+          },
+          {
+            prop: 'name',
+            label: '行号',
+            align: 'center',
+            showOverflowTooltip: true,
+            minWidth: 110,
+			slot: 'name'
+          },
+          {
+            prop: 'groupName',
+            label: '产品编码',
+            align: 'center',
+            showOverflowTooltip: true,
+            minWidth: 110
+          },
+          {
+            prop: 'categoryName',
+            label: '牌号',
+            align: 'center',
+            showOverflowTooltip: true,
+            minWidth: 110
+          },
+          {
+            prop: 'ruleName',
+            label: '型号',
+            align: 'center',
+            showOverflowTooltip: true,
+            minWidth: 110
+          },
+          {
+            prop: 'autoOrder',
+            label: '合同数量',
+            align: 'center',
+            showOverflowTooltip: true,
+            minWidth: 110
+          },
+          {
+            prop: 'qjsl',
+            label: '欠交数量',
+            align: 'center',
+            showOverflowTooltip: true,
+            minWidth: 110
+          },
+		  {
+		    prop: 'ankad',
+		    label: '按单按库',
+		    align: 'center',
+		    showOverflowTooltip: true,
+		    minWidth: 110
+		  },
+		  {
+		    prop: 'jfyq',
+		    label: '交付要求',
+		    align: 'center',
+		    showOverflowTooltip: true,
+		    minWidth: 110
+		  },
+		  {
+		    prop: 'ddlx',
+		    label: '订单类型',
+		    align: 'center',
+		    showOverflowTooltip: true,
+		    minWidth: 110
+		  },
+		  {
+		    prop: 'ddly',
+		    label: '订单来源',
+		    align: 'center',
+		    showOverflowTooltip: true,
+		    minWidth: 110
+		  },
+		  {
+		    prop: 'sczt',
+		    label: '生产状态',
+		    align: 'center',
+		    showOverflowTooltip: true,
+		    minWidth: 110
+		  },
+		  {
+		    prop: 'xdsj',
+		    label: '下达时间',
+		    align: 'center',
+		    showOverflowTooltip: true,
+		    minWidth: 110
+		  },
+		  {
+		    prop: 'jfrq',
+		    label: '交付日期',
+		    align: 'center',
+		    showOverflowTooltip: true,
+		    minWidth: 110
+		  },
+		  {
+		    prop: 'khmc',
+		    label: '客户名称',
+		    align: 'center',
+		    showOverflowTooltip: true,
+		    minWidth: 110
+		  },
+		  {
+		    prop: 'ywy',
+		    label: '业务员',
+		    align: 'center',
+		    showOverflowTooltip: true,
+		    minWidth: 110
+		  },
+		  {
+		    prop: 'zhbm',
+		    label: '组合编码',
+		    align: 'center',
+		    showOverflowTooltip: true,
+		    minWidth: 110
+		  },
+		  {
+		    prop: 'jhdh',
+		    label: '计划单号',
+		    align: 'center',
+		    showOverflowTooltip: true,
+		    minWidth: 110
+		  },
+		  {
+		    columnKey: 'action',
+		    label: '操作',
+		    width: 150,
+		    align: 'center',
+		    resizable: false,
+		    slot: 'action',
+		    showOverflowTooltip: true,
+			fixed:'right'
+		  }
+        ],
+        // 加载状态
+        loading: false,
+		activeName:"first"
+      };
+    },
+    computed: {},
+    created () {
+      this.requestDict('规则状态');
+    },
+    methods: {
+	
+      /* 表格数据源 */
+      datasource ({ page, limit, where, order }) {
+        return getResourcesTree({
+          pageNum: page,
+          size: limit,
+          ...where
+        });
+      },
+
+      /* 刷新表格 */
+      reload (where) {
+        this.$refs.table.reload({ page: 1, where, ruleType: 2 });
+      },
+	  
+	  handleClick(tab, event) {
+		  console.log('activeName',this.activeName);
+	  },
+	  openDetails(row){
+		  this.$refs.detailDialog.open()
+	  },
+	  toUpdate(row){
+		  
+	  },
+	  remove(row){
+		  
+	  }
+    }
+  };
+</script>
+
+<style lang="scss" scoped>
+
+</style>
+