yuansh 3 недель назад
Родитель
Сommit
755a047f67

+ 14 - 3
src/views/afterCode/AfterComplaint/components/AfterComplaintForm.vue

@@ -17,22 +17,32 @@
 						</a-col>
 						
 						<a-col :span="12">
-							<a-form-item label="订单编号(order number)" v-bind="validateInfos.orderNumber" id="AfterComplaintForm-orderNumber" name="orderNumber">
+							<a-form-item label="订单编号(sale num)" v-bind="validateInfos.orderNumber" id="AfterComplaintForm-orderNumber" name="orderNumber">
 								<!-- <a-input v-model:value="formData.orderNumber" placeholder="请输入订单编号(order number)"  allow-clear ></a-input> -->
 								<a-input-search
 								  v-model:value="formData.orderNumber"
-								  placeholder="请输入订单编号(order number)"
+								  placeholder="请输入订单编号(sale num)"
 								  allow-clear
 								  enter-button="Check"
 								  @search="onSearchOrderNumber"
 								/>
 							</a-form-item>
 						</a-col>
+						
 						<a-col :span="12">
 							<a-form-item label="项目(project)" v-bind="validateInfos.projectName" id="AfterComplaintForm-projectName" name="projectName">
 								<a-input v-model:value="formData.projectName" placeholder="请输入项目(project)" disabled allow-clear ></a-input>
 							</a-form-item>
 						</a-col>
+						<a-col :span="12">
+							<a-form-item label="采购编号(purchase num)" v-bind="validateInfos.purNumber" id="AfterComplaintForm-purNumber" name="purNumber">
+								<a-input
+								  v-model:value="formData.purNumber"
+								  placeholder="请输入订单编号(purchase num)"
+								  allow-clear
+								/>
+							</a-form-item>
+						</a-col>
 						<a-col :span="12">
 							<a-form-item label="订单金额(order money)" v-bind="validateInfos.orderMoney" id="AfterComplaintForm-orderMoney" name="orderMoney">
 								<a-input-number v-model:value="formData.orderMoney" placeholder="请输入订单金额(order money)" style="width: 100%" />
@@ -198,7 +208,7 @@
       JDictSelectTag,
       JUpload,
       JVxeTable,
-	  JFormContainer,
+	    JFormContainer,
       JSelectInput,
       JSelectMultiple,
       SelectShipSModal,
@@ -245,6 +255,7 @@
         project: '',   
         projectName: '',   
         orderNumber: '',   
+        purNumber: '',   
         orderMoney: 0,
         deliveryDate: '',   
         warrantyPeriod: '',   

+ 6 - 0
src/views/afterCode/AfterComplaint/components/AfterComplaintFormDeal.vue

@@ -32,6 +32,11 @@
 								<a-textarea v-model:value="formData.reason" disabled :rows="4" placeholder="请输入投诉原因(reason)" />
 							</a-form-item>
 						</a-col>
+						<a-col :span="12">
+							<a-form-item label="采购编号(purchase num)" v-bind="validateInfos.purNumber" id="AfterComplaintForm-purNumber" name="purNumber">
+								<a-input v-model:value="formData.purNumber" placeholder="" disabled allow-clear ></a-input>
+							</a-form-item>
+						</a-col>
 						
 		  </a-row>
 			<a-divider style="border-color: #7cb305" dashed ></a-divider>
@@ -239,6 +244,7 @@
         project: '',   
         projectName: '',   
         orderNumber: '',   
+        purNumber: '',   
         orderMoney: 0,
         deliveryDate: '',   
         warrantyPeriod: '',   

+ 72 - 0
src/views/otherCode/suggestedPrice/PurSuggestedPrice.api.ts

@@ -0,0 +1,72 @@
+import { defHttp } from '/@/utils/http/axios';
+import { useMessage } from "/@/hooks/web/useMessage";
+
+const { createConfirm } = useMessage();
+
+enum Api {
+  list = '/otherCode/purSuggestedPrice/list',
+  save='/otherCode/purSuggestedPrice/add',
+  edit='/otherCode/purSuggestedPrice/edit',
+  deleteOne = '/otherCode/purSuggestedPrice/delete',
+  deleteBatch = '/otherCode/purSuggestedPrice/deleteBatch',
+  importExcel = '/otherCode/purSuggestedPrice/importExcel',
+  exportXls = '/otherCode/purSuggestedPrice/exportXls',
+}
+
+/**
+ * 导出api
+ * @param params
+ */
+export const getExportUrl = Api.exportXls;
+
+/**
+ * 导入api
+ */
+export const getImportUrl = Api.importExcel;
+
+/**
+ * 列表接口
+ * @param params
+ */
+export const list = (params) => defHttp.get({ url: Api.list, params });
+
+/**
+ * 删除单个
+ * @param params
+ * @param handleSuccess
+ */
+export const deleteOne = (params,handleSuccess) => {
+  return defHttp.delete({url: Api.deleteOne, params}, {joinParamsToUrl: true}).then(() => {
+    handleSuccess();
+  });
+}
+
+/**
+ * 批量删除
+ * @param params
+ * @param handleSuccess
+ */
+export const batchDelete = (params, handleSuccess) => {
+  createConfirm({
+    iconType: 'warning',
+    title: '确认删除',
+    content: '是否删除选中数据',
+    okText: '确认',
+    cancelText: '取消',
+    onOk: () => {
+      return defHttp.delete({url: Api.deleteBatch, data: params}, {joinParamsToUrl: true}).then(() => {
+        handleSuccess();
+      });
+    }
+  });
+}
+
+/**
+ * 保存或者更新
+ * @param params
+ * @param isUpdate
+ */
+export const saveOrUpdate = (params, isUpdate) => {
+  let url = isUpdate ? Api.edit : Api.save;
+  return defHttp.post({ url: url, params }, { isTransformResponse: false });
+}

+ 85 - 0
src/views/otherCode/suggestedPrice/PurSuggestedPrice.data.ts

@@ -0,0 +1,85 @@
+import {BasicColumn} from '/@/components/Table';
+import {FormSchema} from '/@/components/Table';
+import { rules} from '/@/utils/helper/validator';
+import { render } from '/@/utils/common/renderUtils';
+import { getWeekMonthQuarterYear } from '/@/utils';
+//列表数据
+export const columns: BasicColumn[] = [
+  {
+    title: '状态',
+    align: "center",
+    dataIndex: 'status_dictText'
+  },
+  {
+    title: '序号',
+    align: "center",
+    sorter: true,
+    dataIndex: 'serialNumber'
+  },
+  {
+    title: '物料编码',
+    align: "center",
+    dataIndex: 'materialCode'
+  },
+  {
+    title: '物料名称',
+    align: "center",
+    dataIndex: 'materialName'
+  },
+  {
+    title: '备件号',
+    align: "center",
+    dataIndex: 'sparePartNumber'
+  },
+  {
+    title: '价格',
+    align: "center",
+    dataIndex: 'price'
+  },
+  {
+    title: '年度',
+    align: "center",
+    dataIndex: 'annual'
+  },
+  {
+    title: '供应商名称',
+    align: "center",
+    dataIndex: 'supplierName'
+  },
+  {
+    title: '标题',
+    align: "center",
+    dataIndex: 'title'
+  },
+  {
+    title: '单位',
+    align: "center",
+    dataIndex: 'unit'
+  },
+  {
+    title: '版本号',
+    align: "center",
+    dataIndex: 'versionNumber'
+  },
+  {
+    title: '编码',
+    align: "center",
+    dataIndex: 'code'
+  },
+];
+
+// 高级查询数据
+export const superQuerySchema = {
+  status: {title: '状态',order: 0,view: 'number', type: 'number',dictCode: 'yes_or_no',},
+  serialNumber: {title: '序号',order: 1,view: 'number', type: 'number',},
+  materialCode: {title: '物料编码',order: 2,view: 'text', type: 'string',},
+  materialName: {title: '物料名称',order: 3,view: 'text', type: 'string',},
+  sparePartNumber: {title: '备件号',order: 4,view: 'text', type: 'string',},
+  price: {title: '价格',order: 5,view: 'number', type: 'number',},
+  annual: {title: '年度',order: 6,view: 'text', type: 'string',},
+  supplierName: {title: '供应商名称',order: 7,view: 'text', type: 'string',},
+  title: {title: '标题',order: 8,view: 'text', type: 'string',},
+  unit: {title: '单位',order: 9,view: 'text', type: 'string',},
+  versionNumber: {title: '版本号',order: 10,view: 'number', type: 'number',},
+  code: {title: '编码',order: 11,view: 'text', type: 'string',},
+};

+ 293 - 0
src/views/otherCode/suggestedPrice/PurSuggestedPriceList.vue

@@ -0,0 +1,293 @@
+<template>
+  <div class="p-2">
+    <!--查询区域-->
+    <div class="jeecg-basic-table-form-container">
+      <a-form ref="formRef" @keyup.enter.native="searchQuery" :model="queryParam" :label-col="labelCol" :wrapper-col="wrapperCol">
+        <a-row :gutter="24">
+          <a-col :lg="6">
+            <a-form-item name="status">
+              <template #label><span title="状态">状态</span></template>
+              <j-select-multiple placeholder="请选择状态" v-model:value="queryParam.status" dictCode="yes_or_no" allow-clear />
+            </a-form-item>
+          </a-col>
+          <a-col :lg="6">
+            <a-form-item name="materialCode">
+              <template #label><span title="物料编码">物料编码</span></template>
+              <a-input placeholder="请输入物料编码" v-model:value="queryParam.materialCode" allow-clear ></a-input>
+            </a-form-item>
+          </a-col>
+          <template v-if="toggleSearchStatus">
+            <a-col :lg="6">
+              <a-form-item name="materialName">
+                <template #label><span title="物料名称">物料名称</span></template>
+                <a-input placeholder="请输入物料名称" v-model:value="queryParam.materialName" allow-clear ></a-input>
+              </a-form-item>
+            </a-col>
+            <a-col :lg="6">
+              <a-form-item name="sparePartNumber">
+                <template #label><span title="备件号">备件号</span></template>
+                <a-input placeholder="请输入备件号" v-model:value="queryParam.sparePartNumber" allow-clear ></a-input>
+              </a-form-item>
+            </a-col>
+            <a-col :lg="6">
+              <a-form-item name="annual">
+                <template #label><span title="年度">年度</span></template>
+                <a-input placeholder="请输入年度" v-model:value="queryParam.annual" allow-clear ></a-input>
+              </a-form-item>
+            </a-col>
+            <a-col :lg="6">
+              <a-form-item name="supplierName">
+                <template #label><span title="供应商名称">供应商名</span></template>
+                <a-input placeholder="请输入供应商名称" v-model:value="queryParam.supplierName" allow-clear ></a-input>
+              </a-form-item>
+            </a-col>
+            <a-col :lg="6">
+              <a-form-item name="title">
+                <template #label><span title="标题">标题</span></template>
+                <a-input placeholder="请输入标题" v-model:value="queryParam.title" allow-clear ></a-input>
+              </a-form-item>
+            </a-col>
+          </template>
+          <a-col :xl="6" :lg="7" :md="8" :sm="24">
+            <span style="float: left; overflow: hidden" class="table-page-search-submitButtons">
+              <a-col :lg="6">
+                <a-button type="primary" preIcon="ant-design:search-outlined" @click="searchQuery">查询</a-button>
+                <a-button type="primary" preIcon="ant-design:reload-outlined" @click="searchReset" style="margin-left: 8px">重置</a-button>
+                <a @click="toggleSearchStatus = !toggleSearchStatus" style="margin-left: 8px">
+                  {{ toggleSearchStatus ? '收起' : '展开' }}
+                  <Icon :icon="toggleSearchStatus ? 'ant-design:up-outlined' : 'ant-design:down-outlined'" />
+                </a>
+              </a-col>
+            </span>
+          </a-col>
+        </a-row>
+      </a-form>
+    </div>
+    <!--引用表格-->
+    <BasicTable @register="registerTable" :rowSelection="rowSelection">
+      <!--插槽:table标题-->
+      <template #tableTitle>
+        <a-button type="primary" v-auth="'otherCode:pur_suggested_price:add'"  @click="handleAdd" preIcon="ant-design:plus-outlined"> 新增</a-button>
+        <a-button  type="primary" v-auth="'otherCode:pur_suggested_price:exportXls'" preIcon="ant-design:export-outlined" @click="onExportXls"> 导出</a-button>
+        <j-upload-button  type="primary" v-auth="'otherCode:pur_suggested_price:importExcel'"  preIcon="ant-design:import-outlined" @click="onImportXls">导入</j-upload-button>
+        <a-dropdown v-if="selectedRowKeys.length > 0">
+          <template #overlay>
+            <a-menu>
+              <a-menu-item key="1" @click="batchHandleDelete">
+                <Icon icon="ant-design:delete-outlined"></Icon>
+                删除
+              </a-menu-item>
+            </a-menu>
+          </template>
+          <a-button v-auth="'otherCode:pur_suggested_price:deleteBatch'">批量操作
+            <Icon icon="mdi:chevron-down"></Icon>
+          </a-button>
+        </a-dropdown>
+        <!-- 高级查询 -->
+        <!-- <super-query :config="superQueryConfig" @search="handleSuperQuery" /> -->
+      </template>
+      <!--操作栏-->
+      <template #action="{ record }">
+        <TableAction :actions="getTableAction(record)" :dropDownActions="getDropDownAction(record)"/>
+      </template>
+      <template v-slot:bodyCell="{ column, record, index, text }">
+      </template>
+    </BasicTable>
+    <!-- 表单区域 -->
+    <PurSuggestedPriceModal ref="registerModal" @success="handleSuccess"></PurSuggestedPriceModal>
+  </div>
+</template>
+
+<script lang="ts" name="otherCode-purSuggestedPrice" setup>
+  import { ref, reactive } from 'vue';
+  import { BasicTable, useTable, TableAction } from '/@/components/Table';
+  import { useListPage } from '/@/hooks/system/useListPage';
+  import { columns, superQuerySchema } from './PurSuggestedPrice.data';
+  import { list, deleteOne, batchDelete, getImportUrl, getExportUrl } from './PurSuggestedPrice.api';
+  import { downloadFile } from '/@/utils/common/renderUtils';
+  import PurSuggestedPriceModal from './components/PurSuggestedPriceModal.vue'
+  import { useUserStore } from '/@/store/modules/user';
+  import JDictSelectTag from '/@/components/Form/src/jeecg/components/JDictSelectTag.vue';
+  import JSelectMultiple from '/@/components/Form/src/jeecg/components/JSelectMultiple.vue';
+
+  const formRef = ref();
+  const queryParam = reactive<any>({});
+  const toggleSearchStatus = ref<boolean>(false);
+  const registerModal = ref();
+  const userStore = useUserStore();
+  //注册table数据
+  const { prefixCls, tableContext, onExportXls, onImportXls } = useListPage({
+    tableProps: {
+      title: '供应商指导价',
+      api: list,
+      columns,
+      canResize:false,
+      useSearchForm: false,
+      actionColumn: {
+        width: 120,
+        fixed: 'right',
+      },
+      beforeFetch: async (params) => {
+        return Object.assign(params, queryParam);
+      },
+    },
+    exportConfig: {
+      name: "供应商指导价",
+      url: getExportUrl,
+      params: queryParam,
+    },
+	  importConfig: {
+	    url: getImportUrl,
+	    success: handleSuccess
+	  },
+  });
+  const [registerTable, { reload, collapseAll, updateTableDataRecord, findTableDataRecord, getDataSource }, { rowSelection, selectedRowKeys }] = tableContext;
+  const labelCol = reactive({
+    xs:24,
+    sm:4,
+    xl:6,
+    xxl:4
+  });
+  const wrapperCol = reactive({
+    xs: 24,
+    sm: 20,
+  });
+
+  // 高级查询配置
+  const superQueryConfig = reactive(superQuerySchema);
+
+  /**
+   * 高级查询事件
+   */
+  function handleSuperQuery(params) {
+    Object.keys(params).map((k) => {
+      queryParam[k] = params[k];
+    });
+    searchQuery();
+  }
+
+  /**
+   * 新增事件
+   */
+  function handleAdd() {
+    registerModal.value.disableSubmit = false;
+    registerModal.value.add();
+  }
+  
+  /**
+   * 编辑事件
+   */
+  function handleEdit(record: Recordable) {
+    registerModal.value.disableSubmit = false;
+    registerModal.value.edit(record);
+  }
+   
+  /**
+   * 详情
+   */
+  function handleDetail(record: Recordable) {
+    registerModal.value.disableSubmit = true;
+    registerModal.value.edit(record);
+  }
+   
+  /**
+   * 删除事件
+   */
+  async function handleDelete(record) {
+    await deleteOne({ id: record.id }, handleSuccess);
+  }
+   
+  /**
+   * 批量删除事件
+   */
+  async function batchHandleDelete() {
+    await batchDelete({ ids: selectedRowKeys.value }, handleSuccess);
+  }
+   
+  /**
+   * 成功回调
+   */
+  function handleSuccess() {
+    (selectedRowKeys.value = []) && reload();
+  }
+   
+  /**
+   * 操作栏
+   */
+  function getTableAction(record) {
+    return [
+      {
+        label: '编辑',
+        onClick: handleEdit.bind(null, record),
+        auth: 'otherCode:pur_suggested_price:edit'
+      },
+    ];
+  }
+   
+  /**
+   * 下拉操作栏
+   */
+  function getDropDownAction(record) {
+    return [
+      {
+        label: '详情',
+        onClick: handleDetail.bind(null, record),
+      }, {
+        label: '删除',
+        popConfirm: {
+          title: '是否确认删除',
+          confirm: handleDelete.bind(null, record),
+          placement: 'topLeft',
+        },
+        auth: 'otherCode:pur_suggested_price:delete'
+      }
+    ]
+  }
+
+  /**
+   * 查询
+   */
+  function searchQuery() {
+    reload();
+  }
+  
+  /**
+   * 重置
+   */
+  function searchReset() {
+    formRef.value.resetFields();
+    selectedRowKeys.value = [];
+    //刷新数据
+    reload();
+  }
+  
+
+
+
+</script>
+
+<style lang="less" scoped>
+  .jeecg-basic-table-form-container {
+    padding: 0;
+    .table-page-search-submitButtons {
+      display: block;
+      margin-bottom: 24px;
+      white-space: nowrap;
+    }
+    .query-group-cust{
+      min-width: 100px !important;
+    }
+    .query-group-split-cust{
+      width: 30px;
+      display: inline-block;
+      text-align: center
+    }
+    .ant-form-item:not(.ant-form-item-with-help){
+      margin-bottom: 16px;
+      height: 32px;
+    }
+    :deep(.ant-picker),:deep(.ant-input-number){
+      width: 100%;
+    }
+  }
+</style>

+ 210 - 0
src/views/otherCode/suggestedPrice/components/PurSuggestedPriceForm.vue

@@ -0,0 +1,210 @@
+<template>
+  <a-spin :spinning="confirmLoading">
+    <JFormContainer :disabled="disabled">
+      <template #detail>
+        <a-form ref="formRef" class="antd-modal-form" :labelCol="labelCol" :wrapperCol="wrapperCol" name="PurSuggestedPriceForm">
+          <a-row>
+						<a-col :span="24">
+							<a-form-item label="状态" v-bind="validateInfos.status" id="PurSuggestedPriceForm-status" name="status">
+								<j-dict-select-tag v-model:value="formData.status" dictCode="yes_or_no" placeholder="请选择状态"  allow-clear />
+							</a-form-item>
+						</a-col>
+						<a-col :span="24">
+							<a-form-item label="序号" v-bind="validateInfos.serialNumber" id="PurSuggestedPriceForm-serialNumber" name="serialNumber">
+								<a-input-number v-model:value="formData.serialNumber" placeholder="请输入序号" style="width: 100%" />
+							</a-form-item>
+						</a-col>
+						<a-col :span="24">
+							<a-form-item label="物料编码" v-bind="validateInfos.materialCode" id="PurSuggestedPriceForm-materialCode" name="materialCode">
+								<a-input v-model:value="formData.materialCode" placeholder="请输入物料编码"  allow-clear ></a-input>
+							</a-form-item>
+						</a-col>
+						<a-col :span="24">
+							<a-form-item label="物料名称" v-bind="validateInfos.materialName" id="PurSuggestedPriceForm-materialName" name="materialName">
+								<a-input v-model:value="formData.materialName" placeholder="请输入物料名称"  allow-clear ></a-input>
+							</a-form-item>
+						</a-col>
+						<a-col :span="24">
+							<a-form-item label="备件号" v-bind="validateInfos.sparePartNumber" id="PurSuggestedPriceForm-sparePartNumber" name="sparePartNumber">
+								<a-input v-model:value="formData.sparePartNumber" placeholder="请输入备件号"  allow-clear ></a-input>
+							</a-form-item>
+						</a-col>
+						<a-col :span="24">
+							<a-form-item label="价格" v-bind="validateInfos.price" id="PurSuggestedPriceForm-price" name="price">
+								<a-input-number v-model:value="formData.price" placeholder="请输入价格" style="width: 100%" />
+							</a-form-item>
+						</a-col>
+						<a-col :span="24">
+							<a-form-item label="年度" v-bind="validateInfos.annual" id="PurSuggestedPriceForm-annual" name="annual">
+								<a-input v-model:value="formData.annual" placeholder="请输入年度"  allow-clear ></a-input>
+							</a-form-item>
+						</a-col>
+						<a-col :span="24">
+							<a-form-item label="供应商名称" v-bind="validateInfos.supplierName" id="PurSuggestedPriceForm-supplierName" name="supplierName">
+								<a-input v-model:value="formData.supplierName" placeholder="请输入供应商名称"  allow-clear ></a-input>
+							</a-form-item>
+						</a-col>
+						<a-col :span="24">
+							<a-form-item label="标题" v-bind="validateInfos.title" id="PurSuggestedPriceForm-title" name="title">
+								<a-input v-model:value="formData.title" placeholder="请输入标题"  allow-clear ></a-input>
+							</a-form-item>
+						</a-col>
+						<a-col :span="24">
+							<a-form-item label="单位" v-bind="validateInfos.unit" id="PurSuggestedPriceForm-unit" name="unit">
+								<a-input v-model:value="formData.unit" placeholder="请输入单位"  allow-clear ></a-input>
+							</a-form-item>
+						</a-col>
+          </a-row>
+        </a-form>
+      </template>
+    </JFormContainer>
+  </a-spin>
+</template>
+
+<script lang="ts" setup>
+  import { ref, reactive, defineExpose, nextTick, defineProps, computed, onMounted } from 'vue';
+  import { defHttp } from '/@/utils/http/axios';
+  import { useMessage } from '/@/hooks/web/useMessage';
+  import JDictSelectTag from '/@/components/Form/src/jeecg/components/JDictSelectTag.vue';
+  import { getValueType } from '/@/utils';
+  import { saveOrUpdate } from '../PurSuggestedPrice.api';
+  import { Form } from 'ant-design-vue';
+  import JFormContainer from '/@/components/Form/src/container/JFormContainer.vue';
+  import { duplicateValidate } from '/@/utils/helper/validator'
+  const props = defineProps({
+    formDisabled: { type: Boolean, default: false },
+    formData: { type: Object, default: () => ({})},
+    formBpm: { type: Boolean, default: true }
+  });
+  const formRef = ref();
+  const useForm = Form.useForm;
+  const emit = defineEmits(['register', 'ok']);
+  const formData = reactive<Record<string, any>>({
+    id: '',
+    status: 1,
+    serialNumber: undefined,
+    materialCode: '',   
+    materialName: '',   
+    sparePartNumber: '',   
+    price: undefined,
+    annual: '',   
+    supplierName: '',   
+    title: '',   
+    unit: '',   
+  });
+  const { createMessage } = useMessage();
+  const labelCol = ref<any>({ xs: { span: 24 }, sm: { span: 5 } });
+  const wrapperCol = ref<any>({ xs: { span: 24 }, sm: { span: 16 } });
+  const confirmLoading = ref<boolean>(false);
+  //表单验证
+  const validatorRules = reactive({
+    materialName: [{ required: true, message: '请输入物料名称!'}, { validator: materialNameDuplicatevalidate }],
+    price: [{ required: true, message: '请输入价格!'}, { pattern: /^(([1-9][0-9]*)|([0]\.\d{0,2}|[1-9][0-9]*\.\d{0,2}))$/, message: '请输入正确的金额!'},],
+    annual: [{ required: true, message: '请输入年度!'},],
+    supplierName: [{ required: true, message: '请输入供应商名称!'},],
+    title: [{ required: true, message: '请输入标题!'},],
+    unit: [{ required: true, message: '请输入单位!'},],
+  });
+  const { resetFields, validate, validateInfos } = useForm(formData, validatorRules, { immediate: false });
+
+  // 表单禁用
+  const disabled = computed(()=>{
+    if(props.formBpm === true){
+      if(props.formData.disabled === false){
+        return false;
+      }else{
+        return true;
+      }
+    }
+    return props.formDisabled;
+  });
+
+  
+  /**
+   * 新增
+   */
+  function add() {
+    edit({});
+  }
+
+  /**
+   * 编辑
+   */
+  function edit(record) {
+    nextTick(() => {
+      resetFields();
+      const tmpData = {};
+      Object.keys(formData).forEach((key) => {
+        if(record.hasOwnProperty(key)){
+          tmpData[key] = record[key]
+        }
+      })
+      //赋值
+      Object.assign(formData, tmpData);
+    });
+  }
+
+  /**
+   * 提交数据
+   */
+  async function submitForm() {
+    try {
+      // 触发表单验证
+      await validate();
+    } catch ({ errorFields }) {
+      if (errorFields) {
+        const firstField = errorFields[0];
+        if (firstField) {
+          formRef.value.scrollToField(firstField.name, { behavior: 'smooth', block: 'center' });
+        }
+      }
+      return Promise.reject(errorFields);
+    }
+    confirmLoading.value = true;
+    const isUpdate = ref<boolean>(false);
+    //时间格式化
+    let model = formData;
+    if (model.id) {
+      isUpdate.value = true;
+    }
+    //循环数据
+    for (let data in model) {
+      //如果该数据是数组并且是字符串类型
+      if (model[data] instanceof Array) {
+        let valueType = getValueType(formRef.value.getProps, data);
+        //如果是字符串类型的需要变成以逗号分割的字符串
+        if (valueType === 'string') {
+          model[data] = model[data].join(',');
+        }
+      }
+    }
+    await saveOrUpdate(model, isUpdate.value)
+      .then((res) => {
+        if (res.success) {
+          createMessage.success(res.message);
+          emit('ok');
+        } else {
+          createMessage.warning(res.message);
+        }
+      })
+      .finally(() => {
+        confirmLoading.value = false;
+      });
+  }
+
+
+  async function materialNameDuplicatevalidate(_r, value) {
+    return duplicateValidate('pur_suggested_price', 'material_name', value, formData.id || '')
+  }
+  defineExpose({
+    add,
+    edit,
+    submitForm,
+  });
+</script>
+
+<style lang="less" scoped>
+  .antd-modal-form {
+    padding: 14px;
+  }
+</style>

+ 77 - 0
src/views/otherCode/suggestedPrice/components/PurSuggestedPriceModal.vue

@@ -0,0 +1,77 @@
+<template>
+  <j-modal :title="title" :width="width" :visible="visible" @ok="handleOk" :okButtonProps="{ class: { 'jee-hidden': disableSubmit } }" @cancel="handleCancel" cancelText="关闭">
+    <PurSuggestedPriceForm ref="registerForm" @ok="submitCallback" :formDisabled="disableSubmit" :formBpm="false"></PurSuggestedPriceForm>
+  </j-modal>
+</template>
+
+<script lang="ts" setup>
+  import { ref, nextTick, defineExpose } from 'vue';
+  import PurSuggestedPriceForm from './PurSuggestedPriceForm.vue'
+  import JModal from '/@/components/Modal/src/JModal/JModal.vue';
+  
+  const title = ref<string>('');
+  const width = ref<number>(800);
+  const visible = ref<boolean>(false);
+  const disableSubmit = ref<boolean>(false);
+  const registerForm = ref();
+  const emit = defineEmits(['register', 'success']);
+
+  /**
+   * 新增
+   */
+  function add() {
+    title.value = '新增';
+    visible.value = true;
+    nextTick(() => {
+      registerForm.value.add();
+    });
+  }
+  
+  /**
+   * 编辑
+   * @param record
+   */
+  function edit(record) {
+    title.value = disableSubmit.value ? '详情' : '编辑';
+    visible.value = true;
+    nextTick(() => {
+      registerForm.value.edit(record);
+    });
+  }
+  
+  /**
+   * 确定按钮点击事件
+   */
+  function handleOk() {
+    registerForm.value.submitForm();
+  }
+
+  /**
+   * form保存回调事件
+   */
+  function submitCallback() {
+    handleCancel();
+    emit('success');
+  }
+
+  /**
+   * 取消按钮回调事件
+   */
+  function handleCancel() {
+    visible.value = false;
+  }
+
+  defineExpose({
+    add,
+    edit,
+    disableSubmit,
+  });
+</script>
+
+<style lang="less">
+  /**隐藏样式-modal确定按钮 */
+  .jee-hidden {
+    display: none !important;
+  }
+</style>
+<style lang="less" scoped></style>

+ 1 - 1
src/views/publicComponents/SelectPurchaseOrderMainModal.vue

@@ -72,7 +72,7 @@
                             <a-form-item label="产品编码(product code)" >
                                 <j-input placeholder="请输入" v-model:value="queryParams.productCode"></j-input>
                             </a-form-item>
-                        </a-col>                  
+                        </a-col>
                     </template>
                     <a-col :md="6" :sm="8">
                         <span style="float: left;overflow: hidden;" class="table-page-search-submitButtons">

+ 9 - 2
src/views/publicComponents/SelectPurchaseOrderModal.vue

@@ -448,7 +448,7 @@
         pagination.value.current =1;
         pagination.value.pageSize = 100; 
     }
-    function getTable(formData){
+    function getTable(formData,st){
         visible.value = true
         if(formData.projectName&&formData.projectName!==''){
             fatherProject.value = formData.project
@@ -460,7 +460,14 @@
         }else{
             fatherSourceCode.value = ''
         }
-        getListUrl.value = '/purCode/purOrder/selectPurOrderDetailAlert'
+		if(st == 'pur'){
+			//售后使用弹框
+			getListUrl.value = '/purCode/purOrder/selectPurOrderDetailAfter'
+
+		}else{
+			
+			getListUrl.value = '/purCode/purOrder/selectPurOrderDetailAlert'
+		}
         loadData()
     }
     function changeBillDate(prop){

+ 1 - 1
src/views/purchase/purchaseInquiryForm/purchaseInquiryFormList.vue

@@ -184,7 +184,7 @@
       <template #bodyCell="{ column, record, index, text }"> </template>
     </BasicTable>
     <!-- 表单区域 -->
-    <PurchaseInquiryFormModal @register="registerModal" @success="handleSuccess" />>
+    <PurchaseInquiryFormModal @register="registerModal" @success="handleSuccess" />
     <SysEmailDraftModal ref="registerModal2" @success="handleSuccess2"></SysEmailDraftModal>
   </div>
 </template>

+ 12 - 4
src/views/purchase/purchaseOrder/PurchaseOrderForm.data.ts

@@ -259,11 +259,11 @@ export const purchaseOrderProductColumns: JVxeColumn[] = [
     defaultValue: '',
   },
   {
-    title: '型号(model)',
-    key: 'model',
-    type: JVxeTypes.input,
+    title: '产品编码(code)',
+    key: 'productCode',
+    type: JVxeTypes.normal,
     placeholder: '请输入${title}',
-    width: '200px',
+    width: '120px',
     defaultValue: '',
   },
   {
@@ -274,6 +274,14 @@ export const purchaseOrderProductColumns: JVxeColumn[] = [
     width: '200px',
     defaultValue: '',
   },
+  {
+    title: '型号(model)',
+    key: 'model',
+    type: JVxeTypes.input,
+    placeholder: '请输入${title}',
+    width: '200px',
+    defaultValue: '',
+  },
   {
     title: '订货号(orderno)',
     key: 'orderno',

+ 55 - 7
src/views/purchase/purchaseOrder/components/AfterPurchaseOrderFormForm.vue

@@ -309,9 +309,9 @@
         <a-button type="primary" style="margin-right: 1%; margin-bottom: 1%" @click="selectVirtualProducts" :disabled="disabled">
           选择虚拟产品(select virtual products)</a-button
         >
-      <!-- <a-button type="primary" style="margin-right: 1%; margin-bottom: 1%" @click="selectOrder" :disabled="disabled">
+      <a-button type="primary" style="margin-right: 1%; margin-bottom: 1%" @click="selectOrder" :disabled="disabled">
           自定义采购售后(select Order products)</a-button
-        > -->
+        >
        <!-- <a-button
           type="primary"
           style="margin-right: 1%; margin-bottom: 1%"
@@ -370,7 +370,7 @@
     <BaseShipArchiveAccessoriesModal ref="BaseShipArchiveAccessoriesModalRef" />
     <SelectSaleOrderModal ref="SelectSaleOrderModalRef" @select-sale-order="addFormSaleOrder" />
     <SelectSupplierQuotation ref="SelectSupplierQuotationRef" @select-supplier-quatation-confirm="addFromQuotation" />
-    <SelectPurchaseOrderModal ref="SelectPurchaseOrderModalRef" @select-purchase-order-mian="addOrderDetailList" />
+    <SelectPurchaseOrderModal ref="SelectPurchaseOrderModalRef" @select-purchase-order="addOrderDetailList" />
   </a-spin>
   <a-modal v-model:visible="modalVisible" title="请输入报价选定单号(注:该操作无法撤回)" @ok="chooseQuote" :confirm-loading="confirmLoading" 
 	:mask-closable="false"
@@ -395,7 +395,7 @@
     queryPurVersonProductListByMainId,
     getExchangeRate
   } from '../PurchaseOrderyForm.api';
-  import SelectPurchaseOrderModal from '../../../publicComponents/SelectPurchaseOrderMainModal.vue';
+  import SelectPurchaseOrderModal from '../../../publicComponents/SelectPurchaseOrderModal.vue';
   import { JVxeTable } from '/@/components/jeecg/JVxeTable';
   import { purchaseOrderShipColumns, purchaseOrderProductColumns } from '../PurchaseOrderForm.data';
   import SelectPrpductModal from '../../../publicComponents/SelectPrpductModal.vue';
@@ -766,6 +766,10 @@
           status == 'quotation'
             ? '/purCode/purQuotationSelection/queryPurQuotationSelectionShipByMainId'
             : '/saleCode/saleOrder/querySaleOrderShipByMainId';
+			
+			if(status == 'pur'){
+				url ='/purCode/purOrder/queryPurOrderShipByMainId'
+			}
         defHttp.get({ url: url, params }, { isTransformResponse: false }).then((res) => {
           if (res) {
             PurOrderFormShipFormShipTable.dataSource = res.result;
@@ -774,18 +778,62 @@
       }
 	  
 	  function selectOrder() {
-	    SelectPurchaseOrderModalRef.value.getTable(formData);
+	    SelectPurchaseOrderModalRef.value.getTable(formData,'pur');
 	  }
 	  
 	  function addOrderDetailList(data) {
-	    console.log("==============");
-	    console.log(data);
+		console.log("=======================")
+		console.log(data)
+		data.map((item) => {
+		  item.model = item.childModel;
+		  item.sourceId = item.childId;
+		  item.afterId = item.childId;
+		  item.sourceType = 'Pur' + item.childId;
+		  item.sourceCode = item.billCode;
+		  item.taxPriceOriginal = -item.taxPriceOriginal;
+		  item.quantity = -item.quantity;
+		  item.taxAmount = -item.taxAmount.toFixed(2);
+		  item.arrivalQuantity = 0;
+		  item.notes = '';
+		});
+		var xTable = purOrderFormShipFormProductTableRef.value!.getXTable();
+		var arrProduct = xTable.data.concat(data);
+		purOrderFormShipFormProductTable.dataSource = arrProduct;
+		notAllowEdit.value = true;
+		if (formData.sourceCode2.includes(data[0].billCode)) {
+		  formData.sourceCode2 = formData.sourceCode2;
+		} else {
+		  formData.sourceCode2 = formData.sourceCode2 == '' ? data[0].billCode : formData.sourceCode2 + ',' + data[0].billCode;
+		}
+		formData.afterId = data[0].afterId;
+		if (formData.sourceCode == '') {
+		  formData.project = data[0].project;
+		  formData.projectName = data[0].projectName;
+		  formData.supplierName = data[0].supplierName;
+		  formData.supplier = data[0].supplier;
+		  formData.priority = data[0].priority;
+		  formData.productionClass = data[0].productionClass;
+		  formData.model = data[0].headModel;
+		  formData.maker = data[0].maker;
+		  formData.packagebRequirement = data[0].packagebRequirement;
+		  formData.delivery = data[0].delivery;
+		  formData.paymentTerms = data[0].paymentTerms;
+		  formData.warrantyPeriod = data[0].warrantyPeriod;
+		  formData.warrantyTerms = data[0].warrantyTerms;
+		  formData.isExport = data[0].isExport;
+		  formData.exchangeRate = data[0].exchangeRate;
+		  formData.currency = data[0].currency;
+		  formData.tradeTerms = data[0].tradeTerms;
+		  formData.attachs = data[0].attachs;
+		  getShipList(data[0].headId, 'pur');
+		}
 	  }
 	  
       function addFormSaleOrder(data) {
         data.map((item) => {
           item.model = item.childModel;
           item.sourceId = item.childId;
+		  item.afterId = item.childId;
           item.sourceType = 'Sale' + item.childId;
           item.sourceCode = item.billCode;
           item.taxPrice = item.taxPriceGys;

+ 8 - 0
src/views/purchase/selectionQuotationForm/SelectionQuotationForm.data.ts

@@ -428,6 +428,14 @@ export const SelectQuotationFormProductColumns: JVxeColumn[] = [
       defaultValue:'',  
       width:"200px",
     },
+    {
+      title: '数量(quantity)',
+      key: 'quantity',
+      type: JVxeTypes.normal,
+      placeholder: '请输入${title}',
+      defaultValue:'',  
+      width:"200px",
+    },
     {
       title: '折后单价(price)',
       key: 'taxPrice',

+ 11 - 0
src/views/purchase/selectionQuotationForm/selectionQuotationFormList.vue

@@ -196,6 +196,11 @@
         let rangerQuery = await setRangeQuery();
         return Object.assign(params, rangerQuery);
       },
+	  rowClassName(record: any ,index: number){
+	  	if(record.submit == 2){
+	  		return 'low-score-row'
+	  	}
+	  }
     },
     exportConfig: {
       name: '采购报价单选定',
@@ -372,6 +377,12 @@
     return queryParamClone;
   }
 </script>
+<style>
+	.low-score-row td{
+	  /* background-color: #fff0dd !important; */
+	  background-color: #fff1dd !important;
+	}
+</style>
 <style lang="less" scoped>
   .jeecg-basic-table-form-container {
     padding: 0;

+ 2 - 2
src/views/saleCode/quotation/components/quotationFormForm.vue

@@ -203,7 +203,7 @@
             </a-col>
             <a-col :span="12">
               <a-form-item
-                label="毛利率(grossMargin)"
+                label="毛利率(NET)"
                 v-bind="validateInfos.grossMarginHead"
                 id="quotationFormForm-grossMarginHead"
                 name="grossMarginHead"
@@ -323,7 +323,7 @@
         >
         <a-button type="primary" @click="chooseSupplier" :disabled="disabled"> 选择供应商报价选定(select supplier quotation selection)</a-button>
         <a-button type="primary" @click="setSonList" style="margin-left: 1%; margin-bottom: 1%" :disabled="disabled">
-          配置毛利率(Configure gross margin)</a-button
+          配置毛利率(Configure NET)</a-button
         >
         <a-button type="primary" @click="setSonListDiscount" style="margin-left: 1%; margin-bottom: 1%" :disabled="disabled">
           配置折扣(Configure discount)</a-button

+ 16 - 0
src/views/saleCode/quotation/quotation.vue

@@ -294,6 +294,12 @@
         let rangerQuery = await setRangeQuery();
         return Object.assign(params, rangerQuery);
       },
+	  
+	  rowClassName(record: any ,index: number){
+	  	if(record.status == 2){
+	  		return 'low-score-row'
+	  	}
+	  }
     },
     exportConfig: {
       name: '销售报价单',
@@ -556,7 +562,15 @@
     return queryParamClone;
   }
 </script>
+<style>
+	
+	.low-score-row td{
+	  /* background-color: #fff0dd !important; */
+	  background-color: #fff1dd !important;
+	}
+</style>
 <style lang="less" scoped>
+
   .jeecg-basic-table-form-container {
     padding: 0;
     .table-page-search-submitButtons {
@@ -564,6 +578,8 @@
       margin-bottom: 8px;
       white-space: nowrap;
     }
+	
+	
     .query-group-cust {
       min-width: 100px !important;
     }

+ 11 - 1
src/views/saleCode/quotation/quotationForm.data.ts

@@ -151,7 +151,17 @@ export const columns: BasicColumn[] = [
       }else if(t.text==2){
         return '待审批'
       }
-    }
+    },
+	// customCell: column => {
+ //      if (column.status == 0) {
+ //        return {
+ //          style: {
+ //            'background-color': 'red'
+ //          }
+ //        };
+ //      }
+ //    }
+
    },
    {
       title: '供应商技术资料(attachs)',