Forráskód Böngészése

Merge branch 'master' into Branch_qinhb

qinhb 1 éve
szülő
commit
9636f61e70

+ 18 - 0
src/api/system/skill/index.ts

@@ -0,0 +1,18 @@
+import request from "@/utils/request";
+import { AxiosPromise } from "axios";
+
+
+
+/**
+ * 批量插入技能
+ *
+ * @param id
+ * @param data
+ */
+export function addPostSkill(data: any) {
+  return request({
+    url: "/api/v1/sys/postSkill/add",
+    method: "post",
+    data: data,
+  });
+}

+ 3 - 0
src/common/configs/dictDataUtil.ts

@@ -4,6 +4,9 @@ const DictDataUtil = {
   request_url:
     import.meta.env.VITE_APP_BASE_API + "/api/v1/sys/dictData/queryByType/",
   dept_tree_url: import.meta.env.VITE_APP_BASE_API + "/api/v1/sys/dept/orgTree",
+  dept_list_url:import.meta.env.VITE_APP_BASE_API+"/api/v1/sys/dept/parent/list",
+  post_list_url:import.meta.env.VITE_APP_BASE_API+"/api/v1/sys/post/list",
+
   TYPE_CODE: {
     //订单类型
     plan_order_type: "plan_order_type",

+ 42 - 1
src/components/CommonTable/configs/tableConfig.ts

@@ -1,6 +1,6 @@
 import { useDictionaryStoreHook } from "@/store";
 const { dicts } = useDictionaryStoreHook();
-
+import dictDataUtil from "@/common/configs/dictDataUtil";
 export const tableConfig = {
   MARTERIAL: {
     url: "/api/v1/base/material",
@@ -412,4 +412,45 @@ export const tableConfig = {
     ],
   },
 
+  USERS: {
+    url: "/api/v1/sys/employeeSkill/users",
+    column: [
+      {
+        label: "员工编码",
+        prop: "employeeCode",
+        search: true,
+      },
+      {
+        label: "用户id",
+        prop: "id",
+        /*display:false,*/
+      },
+      {
+        label: "用户名",
+        prop: "userName",
+        search: true,
+        width: '120',
+      },
+      {
+        label: "用户电话",
+        prop: "phone",
+        search: true,
+      },
+
+      { label: "部门", prop: "deptName", overHidden: true,
+        disabled:true, },
+      { label: "所属机构", prop: "institution", width: 130,overHidden: true,search: true ,
+        search: true,
+        filterable: true,
+        type: "select",
+        width: 100,overHidden: true,
+        dicUrl:dictDataUtil.dept_list_url,
+        dicMethod:"post",
+        props: { label: "deptName", value: "id" },
+        disabled:true,
+
+      },
+    ],
+  },
+
 };

+ 2 - 1
src/hooks/userCrud.ts

@@ -61,6 +61,7 @@ export const useCrud = (config?: UseCrudConfig) => {
   const save = async (config?: UseCrudConfig) => {
     try {
       const path = config?.isEdit ? "/update" : "/add";
+
       const res = (await request({
         url: `${url.value}${path}`,
         method: "post",
@@ -137,7 +138,6 @@ export const useCrud = (config?: UseCrudConfig) => {
         for (let i = 0; i < data.value.length; i++) {
           data.value[i].$cellEdit = true;
         }
-        console.info(data);
         config?.done && config?.done();
       } catch (err) {
         config?.loading && config?.loading();
@@ -146,6 +146,7 @@ export const useCrud = (config?: UseCrudConfig) => {
       }
     },
     createRow: (row: any, done: () => void, loading: () => void) => {
+      console.info(row);
       save({ row: row, done: done, loading: loading });
     },
 

+ 231 - 0
src/views/base/materials/components/drawing-page.vue

@@ -0,0 +1,231 @@
+<template>
+
+
+  <div class="mainContentBox">
+    <avue-form
+      ref="formRef"
+      v-model="form"
+      :option="option"
+      @submit="rowSave"
+    >
+      <template #drawingPath="scope">
+        <single-upload v-model="form.drawingPath" />
+      </template>
+    </avue-form>
+    <avue-crud
+      ref="crudRef"
+      v-model:search="search"
+      v-model="form"
+      :data="data"
+      :option="option"
+      v-model:page="page"
+      @row-save="createRow"
+      @row-update="updateRow"
+      @row-del="deleteRow"
+      @search-change="searchChange"
+      @search-reset="resetChange"
+      @size-change="dataList"
+      @current-change="dataList"
+      @selection-change="selectionChange"
+      search-option="false"
+    >
+
+      <template #menu-left="{ size }">
+        <el-button
+          :disabled="toDeleteIds.length < 1"
+          type="danger"
+          icon="el-icon-delete"
+          :size="size"
+          @click="multipleDelete"
+        >删除</el-button
+        >
+      </template>
+
+    </avue-crud>
+    <CommonTable
+      ref="ctableRef"
+      tableTitle="物料列表"
+      tableType="MARTERIAL"
+      @selected-sure="onSelectedFinish"
+    />
+  </div>
+
+</template>
+<script setup>
+  import { ref, getCurrentInstance } from "vue";
+  import { useCrud } from "@/hooks/userCrud";
+  import ButtonPermKeys from "@/common/configs/buttonPermission";
+  import { useCommonStoreHook } from "@/store";
+
+  const { isShowTable, tableType } = toRefs(useCommonStoreHook());
+  import { useDictionaryStoreHook } from "@/store";
+  import {
+    addStationDevice,
+  } from "@/api/station";
+  const test = () => {
+    isShowTable.value = true;
+    tableType.value = tableType.value == 1 ? 2 : 1;
+  };
+
+  // 传入一个url,后面不带/
+  const { form, data, option, search, page, toDeleteIds, Methords, Utils } =
+    useCrud({
+      src: "/api/v1/base/drawing",
+    });
+  const { dataList, createRow, updateRow, deleteRow, searchChange, resetChange } =
+    Methords; //增删改查
+  const { selectionChange, multipleDelete } = Methords; //选中和批量删除事件
+  const { checkBtnPerm, downloadTemplate, exportData } = Utils; //按钮权限等工具
+  // checkBtnPerm(ButtonPermKeys.PLAN.BTNS.order_add) :permission="permission"
+  // const permission = reactive({
+  //   delBtn: checkPerm(buttonPermission.PLAN.BTNS.order_del),
+  //   addBtn: checkPerm(buttonPermission.PLAN.BTNS.order_add),
+  //   editBtn: checkPerm(buttonPermission.PLAN.BTNS.order_edit),
+  //   menu: true,
+  // });
+  function rowSave(form2,done,loading) {
+    form.value.associationCode=props.materialCode;
+    createRow(form,done,loading);
+
+  }
+
+
+
+  const crudRef = ref(null); //crudRef.value 获取avue-crud对象
+
+  onMounted(() => {
+    // console.log("crudRef", crudRef)
+    search.value.materialCode=props.materialCode;
+    dataList();
+  });
+
+  /**
+   * 上传excel相关
+   */
+  const uploadRef = ref(null);
+  const uploadFinished = () => {
+    // 上传完成后的刷新操作
+    page.currentPage = 1;
+    dataList();
+  };
+  const importExcelData = () => {
+    if (uploadRef.value) {
+      uploadRef.value.show("/api/v1/base/stationDevice");
+    }
+  };
+  const ctableRef=ref(null);
+  const deviceList=()=>{
+    ctableRef.value.startSelect();
+  }
+
+  // 设置表格列或者其他自定义的option
+  option.value = Object.assign(option.value, {
+    selection: true,
+    column: [
+      {
+        label: "物料编号",
+        prop: "associationCode",
+        hide:true,
+        display:false,
+      },
+
+
+      {
+      label: "图纸编号",
+      prop: "drawingCode",
+      rules: [{
+        required: true,
+        message: "图纸编号不能为空",
+        trigger: "blur"
+      }]
+    },
+      {
+        label: "图纸标题",
+        prop: "drawingTitle",
+        rules: [{
+          required: true,
+          message: "图纸名称不能为空",
+          trigger: "blur"
+        }],
+      },
+
+
+      {
+        label: "图纸类型",
+        prop: "drawingDictValue",
+        value:"material",
+        display: false,
+        hide:true,
+      },
+      {
+        label: "排序",
+        prop: "sort",
+        type:"number",
+
+      },
+      {
+        label: "版本",
+        prop: "drawingVersion",
+        type:"number",
+        precision:1,
+        rules: [{
+          required: true,
+          message: "版本号不能为空",
+          trigger: "blur"
+        }]
+
+
+      },
+      {
+        label: "图纸上传",
+        prop: "drawingPath",
+        span: 24,
+        slot: true,
+        hide:true,
+        /*formatter: (row, column, cellValue, index) => {
+          return `<img src="${row.drawingPath}" alt="${row.drawingPath}" width="50" height="50">`;
+        }
+*/
+      },
+      {
+        label: "图纸",
+        prop: "drawing",
+        type: 'img',
+        span: 24,
+        display:false,
+        slot: true,
+        formatter: (row, column, cellValue, index) => {
+        return `${row.drawingPath}`;
+    }
+  },
+      ],
+    delBtn: false,
+    editBtn: false,
+    viewBtn: false,
+    addBtn:false,
+    menu: false,
+  });
+  const props = defineProps({
+    materialCode: {
+      type: String,
+      default: () => {
+        return 0;
+      }
+    },
+    dialog:{
+      type:Object,
+      default:()=>{
+        return {};
+      }
+    }
+  })
+
+  const onSelectedFinish=(selectedValue)=>{
+
+    form.value.materialCode=selectedValue.materialCode;
+    form.value.materialName=selectedValue.materialName;
+
+    form.value.productionLineId=props.productionLineId;
+  }
+</script>
+

+ 23 - 2
src/views/base/materials/index.vue

@@ -31,9 +31,13 @@
                      text
                      type="primary"
           >BOM</el-button>
+          <el-button @click="drawing(row)"
+                     icon="el-icon-link"
+                     text
+                     type="primary"
+          >图纸</el-button>
         </template>
 
-
       <template #menu-right="{}">
         <el-dropdown split-button
           >导入
@@ -58,6 +62,15 @@
         </el-button>
       </template>
     </avue-crud>
+
+      <el-dialog
+      v-model="dialog.visible"
+      :title="dialog.title"
+      width="900px"
+      @close="dialog.visible = false"
+    >
+      <drawing-page  :materialCode="drawingDetail.materialCode" :dialog="dialog"/>
+    </el-dialog>
     <ExcelUpload ref="uploadRef" @finished="uploadFinished" />
   </div>
 </template>
@@ -75,7 +88,15 @@ const test = () => {
   isShowTable.value = true;
   tableType.value = tableType.value == 1 ? 2 : 1;
 };
-
+const dialog = reactive({
+  title: "图纸",
+  visible: false,
+});
+const drawingDetail=ref(null);
+const drawing=(row)=>{
+   drawingDetail.value=row;
+   dialog.visible=true;
+}
 // 传入一个url,后面不带/
 const { form, data, option, search, page, toDeleteIds, Methords, Utils } =
   useCrud({

+ 12 - 1
src/views/base/modeling/station/components/station-page.vue

@@ -133,11 +133,20 @@
     }
   );
   const onSelectedFinish=(selectedValue)=>{
+    for(let i=0;i<data.value.length;i++){
+      if(data.value[i].deviceNo===selectedValue.deviceNo){
+        ElMessage({
+          message: "设备已绑定过,无需再次绑定",
+          type: "error",
+        });
+        return;
+      }
+    }
     const selectDevice=ref({
       deviceNo: selectedValue.deviceNo,
       stationId:props.stationId,
   });
-    console.info(selectDevice);
+
     addStationDevice(selectDevice.value).then(
       (data:any)=>{
         if(data.code==="200") {
@@ -145,6 +154,8 @@
             message: data.msg,
             type: "success",
           });
+          search.value.stationId = props.stationId;
+          dataList()
         }
         else {
           ElMessage({

+ 238 - 0
src/views/base/skill/components/user-skill.vue

@@ -0,0 +1,238 @@
+<template>
+  <div class="mainContentBox">
+    <avue-form
+      ref="formRef"
+      v-model:search="search"
+      v-model="form"
+      :data="data"
+      :option="option2"
+      v-model:page="page"
+      @row-save="createRow"
+      @row-update="updateRow"
+      @row-del="deleteRow"
+      @search-change="searchChange"
+      @size-change="dataList"
+      @current-change="dataList"
+      @selection-change="selectionChange"
+    >
+    </avue-form>
+    <avue-crud
+      ref="crudRef"
+      v-model="form"
+      :data="data"
+      :option="option"
+      v-model:page="page"
+      @row-save="createRow"
+      @row-update="updateRow"
+      @row-del="deleteRow"
+    >
+      <template #menu-left="{ size }">
+        <el-button
+          type="primary"
+          icon="el-icon-plus"
+          circle
+          @click="addSkill"
+        ></el-button
+        ></template>
+    </avue-crud>
+    <CommonTable
+      ref="ctableRef"
+      tableTitle="员工选择"
+      tableType="USERS"
+      @selected-sure="onSelectedFinish"
+    />
+  </div>
+</template>
+<script setup>
+import { ref, getCurrentInstance } from "vue";
+import { useCrud } from "@/hooks/userCrud";
+import ButtonPermKeys from "@/common/configs/buttonPermission";
+import { useCommonStoreHook, useDictionaryStoreHook } from "@/store";
+import dictDataUtil from "@/common/configs/dictDataUtil";
+import SingleUpload from "@/components/Upload/SingleUpload.vue";
+const { isShowTable, tableType } = toRefs(useCommonStoreHook());
+// 数据字典相关
+const { dicts } = useDictionaryStoreHook();
+
+const test = () => {
+  isShowTable.value = true;
+  tableType.value = tableType.value == 1 ? 2 : 1;
+};
+const data2=ref(null);
+// 传入一个url,后面不带/
+const { form, data, option, search, page, toDeleteIds, Methords, Utils } =
+  useCrud({
+    src: "/api/v1/sys/skillScore",
+  });
+const { dataList, createRow, updateRow, deleteRow, searchChange, dataNoPageList } =
+  Methords; //增删改查
+const { selectionChange, multipleDelete } = Methords; //选中和批量删除事件
+const { checkBtnPerm, downloadTemplate, exportData } = Utils; //按钮权限等工具
+// checkBtnPerm(ButtonPermKeys.PLAN.BTNS.order_add) :permission="permission"
+// const permission = reactive({
+//   delBtn: checkPerm(buttonPermission.PLAN.BTNS.order_del),
+//   addBtn: checkPerm(buttonPermission.PLAN.BTNS.order_add),
+//   editBtn: checkPerm(buttonPermission.PLAN.BTNS.order_edit),
+//   menu: true,
+// });
+const option2=ref(null);
+const ctableRef = ref(null); //crudRef.value 获取avue-crud对象
+const router = useRouter();
+const binding = (row) => {
+  router.push(`/base/bom/${row.materialCode}`);
+};
+onMounted(() => {
+  // console.log("crudRef", crudRef)
+  dataNoPageList();
+
+});
+
+const addSkill = () => {
+  const bom=ref({
+    $cellEdit:true,
+  });
+  data.value.push(bom.value);
+};
+
+/**
+ * 上传excel相关
+ */
+const uploadRef = ref(null);
+const uploadFinished = () => {
+  // 上传完成后的刷新操作
+  page.currentPage = 1;
+  dataList();
+};
+const importExcelData = () => {
+  if (uploadRef.value) {
+    uploadRef.value.show("/api/v1/plan/order/import");
+  }
+};
+
+// 设置表格列或者其他自定义的option
+option2.value = {
+  selection: true,
+  submitBtn:false,
+  clearAbleBtn:false,
+  emptyBtn:false,
+  column: [
+
+    { label: "用户id", prop: "userId", width: 130,overHidden: true,search: true ,
+      filterable: true,
+      width: 100,overHidden: true,
+      disabled:true,
+      display:false,
+
+    },
+    { label: "用户名", prop: "userName", width: 140,overHidden: true,search: true ,rules: [{
+        required: true,
+        search: true,
+        message: "请选择员工姓名",
+        trigger: "blur"
+      }],
+      click: ({ value, column }) => {
+        ctableRef.value.startSelect();
+      },},
+    { label: "所属机构", prop: "institution", width: 130,overHidden: true,search: true ,
+      filterable: true,
+      width: 100,overHidden: true,
+      disabled:true,
+
+    },
+    {
+      label: "员工编号",
+      prop: "employeeCode",
+      search: true,
+      disabled:true,
+    },
+    { label: "岗位", prop: "postId", overHidden: true,search: true ,
+      search: true,
+      filterable: true,
+      type: "select",
+      overHidden: true,
+      dicUrl:dictDataUtil.post_list_url,
+      dicMethod:"post",
+      change:({ value, column })=>{
+
+      },
+      props: { label: "postName", value: "id" },
+
+    },
+    { label: "部门", prop: "deptName", overHidden: true,
+      disabled:true, },
+
+  ],
+};
+// 设置表格列或者其他自定义的option
+option.value = Object.assign(option.value,{
+  selection: false,
+  addBtn: false,
+  viewBtn: false,
+  editBtn:false,
+  saveBtn:false,
+
+  cellBtn: true,
+  column: [{
+    label: "技能",
+    prop: "skillDictValue",
+    align: 'center',
+    headerAlign: 'center',
+    cell: true,
+    span:24,
+    type: 'select',
+    /*dicUrl: `${baseUrl}/getProvince?id={{key}}`,*/
+    dicData:dicts.skill_type,
+    props: {
+      label: "dictLabel", // 下拉菜单显示的字段
+      value: "dictValue" // 下拉菜单值的字
+    },
+  },
+    {
+      label: "分数",
+      prop: "score",
+      align: 'center',
+      headerAlign: 'center',
+      cell: true,
+      span:24,
+      dicData:dicts.skill_type,
+      props: {
+        label: "dictLabel", // 下拉菜单显示的字段
+        value: "dictValue" // 下拉菜单值的字
+      },
+    },],
+});
+const onSelectedFinish=(selectedValue)=>{
+  form.value.userId=selectedValue.id;
+
+  form.value.userName=selectedValue.userName;
+  form.value.deptName=selectedValue.deptName;
+  form.value.employeeCode=selectedValue.employeeCode;
+  form.value.institution=selectedValue.institution;
+
+}
+
+</script>
+<style type="text/css">
+  .title-detail{
+    width: 30%;
+    height: 50px;
+    line-height: 50px;
+    margin: 25px 20px 25px 0;
+    float: left;
+  }
+  .detail{
+    margin: 0 auto;
+    width: 100%;
+  }
+  .avue-crud{
+    float: left;
+  }
+  .detail-footer{
+    float: right;
+    margin-top:15px;
+  }
+  .el-select__selection{
+    width: 150px;
+  }
+
+</style>

+ 173 - 0
src/views/base/skill/index.vue

@@ -0,0 +1,173 @@
+<template>
+  <div class="mainContentBox">
+    <avue-crud
+      ref="crudRef"
+      v-model:search="search"
+      v-model="form"
+      :data="data"
+      :option="option"
+      v-model:page="page"
+      @row-update="updateRow"
+      @row-del="deleteRow"
+      @search-change="searchChange"
+      @search-reset="resetChange"
+      @size-change="dataList"
+      @current-change="dataList"
+      @selection-change="selectionChange"
+    >
+      <template #menu-left="{ size }">
+        <el-button
+          type="primary"
+          icon="el-icon-plus"
+          :size="size"
+          @click="addRow"
+        >新增</el-button
+        >
+        <el-button
+          :disabled="toDeleteIds.length < 1"
+          type="danger"
+          icon="el-icon-delete"
+          :size="size"
+          @click="multipleDelete"
+          >删除</el-button
+        ></template>
+        <template #menu="{row,index,type}">
+          <el-button @click="binding(row)"
+                     icon="el-icon-link"
+                     text
+                     type="primary"
+          >BOM</el-button>
+        </template>
+
+    </avue-crud>
+    <el-dialog
+      v-model="dialog.visible"
+      :title="dialog.title"
+      width="800px"
+      @close="dialog.visible = false"
+    >
+      <user-skill   :dialog="dialog"/>
+    </el-dialog>
+  </div>
+</template>
+<script setup>
+import { ref, getCurrentInstance } from "vue";
+import { useCrud } from "@/hooks/userCrud";
+import ButtonPermKeys from "@/common/configs/buttonPermission";
+import { useCommonStoreHook, useDictionaryStoreHook } from "@/store";
+import dictDataUtil from "@/common/configs/dictDataUtil";
+const { isShowTable, tableType } = toRefs(useCommonStoreHook());
+// 数据字典相关
+const { dicts } = useDictionaryStoreHook();
+
+const test = () => {
+  isShowTable.value = true;
+  tableType.value = tableType.value == 1 ? 2 : 1;
+};
+const dialog = reactive({
+  title: "员工技能",
+  visible: false,
+});
+
+const addRow=()=>{
+  dialog.visible=true;
+}
+// 传入一个url,后面不带/
+const { form, data, option, search, page, toDeleteIds, Methords, Utils } =
+  useCrud({
+    src: "/api/v1/sys/employeeSkill",
+  });
+const { dataList, createRow, updateRow, deleteRow, searchChange, resetChange } =
+  Methords; //增删改查
+const { selectionChange, multipleDelete } = Methords; //选中和批量删除事件
+const { checkBtnPerm, downloadTemplate, exportData } = Utils; //按钮权限等工具
+// checkBtnPerm(ButtonPermKeys.PLAN.BTNS.order_add) :permission="permission"
+// const permission = reactive({
+//   delBtn: checkPerm(buttonPermission.PLAN.BTNS.order_del),
+//   addBtn: checkPerm(buttonPermission.PLAN.BTNS.order_add),
+//   editBtn: checkPerm(buttonPermission.PLAN.BTNS.order_edit),
+//   menu: true,
+// });
+
+const ctableRef = ref(null); //crudRef.value 获取avue-crud对象
+const router = useRouter();
+const binding = (row) => {
+  router.push(`/base/bom/${row.materialCode}`);
+};
+onMounted(() => {
+  // console.log("crudRef", crudRef)
+  dataList();
+});
+
+
+
+/**
+ * 上传excel相关
+ */
+const uploadRef = ref(null);
+const uploadFinished = () => {
+  // 上传完成后的刷新操作
+  page.currentPage = 1;
+  dataList();
+};
+const importExcelData = () => {
+  if (uploadRef.value) {
+    uploadRef.value.show("/api/v1/plan/order/import");
+  }
+};
+
+// 设置表格列或者其他自定义的option
+option.value = Object.assign(option.value, {
+  selection: true,
+  addBtn:false,
+  column: [
+
+
+    { label: "所属机构", prop: "institution", width: 130,overHidden: true,search: true ,
+      search: true,
+      filterable: true,
+      type: "select",
+      width: 100,overHidden: true,
+      dicUrl:dictDataUtil.dept_list_url,
+      dicMethod:"post",
+      props: { label: "deptName", value: "id" },
+      disabled:true,
+
+    },
+    { label: "员工姓名", prop: "userName", width: 140,overHidden: true,search: true ,rules: [{
+        required: true,
+        search: true,
+        message: "请选择员工姓名",
+        trigger: "blur"
+      }],
+    },
+    {
+      label: "员工编号",
+      prop: "employeeCode",
+      search: true,
+      disabled:true,
+    },
+    { label: "岗位", prop: "postId", overHidden: true,search: true ,
+      search: true,
+      filterable: true,
+      type: "select",
+      overHidden: true,
+      dicUrl:dictDataUtil.post_list_url,
+      dicMethod:"post",
+      props: { label: "postName", value: "id" },
+
+    },
+    { label: "部门", prop: "deptName", overHidden: true,
+      disabled:true, },
+    {
+      label: "分数",
+      prop: "scopes",
+      filterable: true,
+    },
+  ],
+});
+const onSelectedFinish=()=>{
+
+}
+
+</script>

+ 173 - 130
src/views/system/post/components/post-skill.vue

@@ -1,123 +1,109 @@
-<!--<template>
+<template>
+  <div class="mainContentBox">
+    <!--{{dataDetail}}-->
+    <!--{{dicts}}-->
+    <avue-crud
+      ref="crudRef"
+      v-model:search="search"
+      v-model="form"
+      :data="data"
+      :option="option"
+      @row-update="updateRow"
+      @row-del="deleteRow"
+      @search-change="searchChange"
+      @search-reset="resetChange"
+      @selection-change="selectionChange"
+    >
+      <template #menu-left="{ size }">
+        <el-button
+          type="primary"
+          icon="el-icon-plus"
+          circle
+          @click="addSkill"
+        ></el-button
+        ></template>
 
-  <avue-form :option="option"
-             v-model="form">
-    <template #input="{row}">
+      <template #footer>
+        <div class="detail-footer">
+          <el-button type="primary" @click="addList"> 保存 </el-button>
+          <el-button @click="cancel">取消</el-button>
 
-    </template>
-  </avue-form>
-</template>
-<script ssetup lang="ts">
-  export default {
-    data () {
-      return {
-        form: {
-          dynamic: [{
-            input: 1,
-            select: 1
-          }, {
-            input: 2,
-            select: 2
-          }]
-        },
-        option: {
-          column: [
-            {
-              label: '技能',
-              prop: 'dynamic',
-              type: 'dynamic',
-              span: 24,
-              children: {
-                align: 'center',
-                headerAlign: 'center',
-                rowAdd: (done) => {
-                  this.$message.success('新增回调');
-                  done({
-                    input: '默认值'
-                  });
-                },
-                rowDel: (row, done) => {
-                  this.$message.success('删除回调' + JSON.stringify(row));
-                  done();
-                },
-                column: [{
-                  label: '选择框',
-                  prop: "select",
-                  type: 'select',
-                  dicData: [{
-                    label: '测试1',
-                    value: 1
-                  }, {
-                    label: '测试2',
-                    value: 2
-                  }]
-                }]
-              }
-            },
+        </div>
+      </template>
+    </avue-crud>
 
-          ]
-        }
-      }
-    },
-    methods: {
-      addAll () {
-        for (let i = 0; i < 10; i++) {
-          this.form.dynamic.push({
-            input: 1,
-            select: 1
-          })
-        }
-      }
-    }
-  }
-</script>-->
-
-<template>
-<avue-form :option="option"
-           v-model="form">
-  <template #input="{row}">
-
-  </template>
-</avue-form>
+  </div>
 </template>
 <script setup lang="ts">
   import { ref, getCurrentInstance } from "vue";
   import { useCrud } from "@/hooks/userCrud";
   import ButtonPermKeys from "@/common/configs/buttonPermission";
-  import { useCommonStoreHook } from "@/store";
-
+  import { useCommonStoreHook, useDictionaryStoreHook } from "@/store/index";
+  import {addPostSkill} from "../../../../api/system/skill";
   const { isShowTable, tableType } = toRefs(useCommonStoreHook());
-  import { useDictionaryStoreHook } from "@/store";
+  // 数据字典相关
   const { dicts } = useDictionaryStoreHook();
-  import {
-    addStationDevice,
-  } from "@/api/station";
+  const router = useRouter();
+  const route = useRoute();
+
+  const dataDetail=ref({});
   const test = () => {
     isShowTable.value = true;
     tableType.value = tableType.value == 1 ? 2 : 1;
   };
-  const props = defineProps({
-    postId: {
-      type: Number,
-      default: () => {
-        return 0;
+
+  const formData=ref({});
+  const dataBomLists=()=>{
+    search.value.materialCode=route.value.materialCode;
+    dataNoPageList();
+  }
+
+
+  const dialog=ref(null);
+
+
+
+  const addList=()=>{
+    for(var i=0;i<data.value.length;i++){
+      if(data.value[i].skillDictValue==="0"||data.value[i].skillDictValue ===null){
+        ElMessage({
+          message:"技能选项存在空值",
+          type: "error",
+        });
+        return;
       }
     }
-  })
-
-  watch?.(
-    () => props.postId,
-    (newVal: string) => {
-      search.value.postId = newVal
-      dataList()
+    if(data.value.length===0){
+      ElMessage({
+        message: "没有添加记录!",
+        type: "error",
+      });
+      return;
     }
-  );
+    addPostSkill(data.value).then(
+      (data: any)=>{
+        if(data.code==="200") {
+          ElMessage({
+            message: data.msg,
+            type: "success",
+          });
+        }
+        else {
+          ElMessage({
+            message: data.msg,
+            type: "error",
+          });
+        }
+        props.dialog.visible=false;
+      }
+    );
+  }
   // 传入一个url,后面不带/
   const { form, data, option, search, page, toDeleteIds, Methords, Utils } =
     useCrud({
       src: "/api/v1/sys/postSkill",
     });
-  const { dataList, createRow, updateRow, deleteRow, searchChange, resetChange } =
+  const { dataNoPageList,createRow, updateRow, deleteRow, searchChange, resetChange } =
     Methords; //增删改查
   const { selectionChange, multipleDelete } = Methords; //选中和批量删除事件
   const { checkBtnPerm, downloadTemplate, exportData } = Utils; //按钮权限等工具
@@ -128,44 +114,101 @@
   //   editBtn: checkPerm(buttonPermission.PLAN.BTNS.order_edit),
   //   menu: true,
   // });
-  const crudRef = ref(null); //crudRef.value 获取avue-crud对象
 
+  const crudRef = ref(null); //crudRef.value 获取avue-crud对象
+  const props = defineProps({
+    postId: {
+      type: Number,
+      default: () => {
+        return 0;
+      }
+    },
+    dialog:{
+      type:Object,
+      default:()=>{
+        return {};
+      }
+    }
+  })
   onMounted(() => {
     // console.log("crudRef", crudRef)
-    dataList();
+    search.value.postId=props.postId;
+    dataNoPageList();
+
   });
- /* const form=ref({
-    dynamic: [{
-      input: 1,
-      select: 1
-    }, {
-      input: 2,
-      select: 2
-    }]
-  });*/
+   const cancel=()=>{
+     props.dialog.visible=false;
+   }
+  /**
+   * 上传excel相关
+   */
+  const uploadRef = ref(null);
+  const uploadFinished = () => {
+    // 上传完成后的刷新操作
+    dataNoPageList();
+  };
+  const importExcelData = () => {
+    if (uploadRef.value) {
+      uploadRef.value.show("/api/v1/plan/order/import");
+    }
+  };
+
   // 设置表格列或者其他自定义的option
   option.value = Object.assign(option.value, {
-    column: [
-      {label: '技能',
-      prop: 'dynamic',
-      type: 'dynamic',
-      span: 24,
-      children: {
-        align: 'center',
-        type: 'form',
-        headerAlign: 'center',
-        column: [
-          {
-            label: "技能",
-            prop: "skill_dict_value",
-            type: 'select',
-            dicData:dicts.skill_type,
-            props: { label: "dictLabel", value: "dictValue" },
-          }
-        ]
-      }
-    }
-    ],
+    selection: false,
+    addBtn: false,
+    viewBtn: false,
+    editBtn:false,
+    saveBtn:false,
+    cellBtn: true,
+    column: [{
+      label: "技能",
+      prop: "skillDictValue",
+      align: 'center',
+      headerAlign: 'center',
+      cell: true,
+      span:24,
+      type: 'select',
+      dicData:dicts.skill_type,
+      props: {
+        label: "dictLabel", // 下拉菜单显示的字段
+        value: "dictValue" // 下拉菜单值的字
+      },
+    },],
   });
+  const routeBack =()=>{
+    router.back();
+  }
+  const addSkill = () => {
+    const bom=ref({
+      postId:props.postId,
+      $cellEdit:true,
+    });
+    data.value.push(bom.value);
+  };
 
 </script>
+<style type="text/css">
+  .title-detail{
+    width: 30%;
+    height: 50px;
+    line-height: 50px;
+    margin: 25px 20px 25px 0;
+    float: left;
+  }
+  .detail{
+    margin: 0 auto;
+    width: 100%;
+  }
+  .avue-crud{
+    float: left;
+  }
+  .detail-footer{
+    float: right;
+    margin-top:15px;
+  }
+  .el-select__selection{
+    width: 400px;
+  }
+
+</style>

+ 1 - 2
src/views/system/post/index.vue

@@ -40,7 +40,7 @@
       width="800px"
       @close="dialog.visible = false"
     >
-      <post-skill  :postId="post.id"/>
+      <post-skill  :postId="post.id" :dialog="dialog"/>
     </el-dialog>
     <ExcelUpload ref="uploadRef" @finished="uploadFinished" />
   </div>
@@ -62,7 +62,6 @@ const binding=(row)=>{
   post.value=row;
   dialog.visible=true;
 }
-
 // 传入一个url,后面不带/
 const { form, data, option, search, page, toDeleteIds, Methords, Utils } =
   useCrud({