diff --git a/src/components/DialogWithMenu.vue b/src/components/DialogWithMenu.vue
index 6233c58..a3141aa 100644
--- a/src/components/DialogWithMenu.vue
+++ b/src/components/DialogWithMenu.vue
@@ -24,17 +24,21 @@
@click="handleAddParam()"
>+ 添加
-
- 上传
+
+
+
+ 上传
+
+
+
+
@@ -50,6 +54,7 @@
{{ tab.name }}
+
@@ -114,7 +119,9 @@
-
+
+
+
-
-
附件
+
+
+
+
+ 文件列表
+
+
+ -
+ {{ file.name }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -171,7 +201,7 @@
import { pick as __pick } from "@/utils/filters";
import SmallDialog from "@/components/SmallDialog.vue";
import BaseListTable from "@/components/BaseListTable.vue";
-
+import Cookies from "js-cookie";
import "quill/dist/quill.core.css";
import "quill/dist/quill.snow.css";
import "quill/dist/quill.bubble.css";
@@ -314,6 +344,7 @@ export default {
attrPage: 1,
attrSize: 5,
attrTotal: 0,
+ fileList: [{ name: "1.png" }, { name: "2.png" }],
};
},
computed: {
@@ -328,26 +359,16 @@ export default {
filteredTableProps() {
return this.detailMode ? this.configs.table.props.filter((v) => v.prop !== "operations") : this.configs.table.props;
},
+ uploadHeaders() {
+ return {
+ token: Cookies.get("token") || "",
+ };
+ },
+ uploadUrl() {
+ return this.configs.menu.find((item) => item.key === "attachment")?.actionUrl || "#";
+ },
},
- watch: {
- // "dataForm.parentId": function (val, old) {
- // if (val && val !== "0") {
- // // 如果不是 '无' 选项,就锁定 typeDictValue(物料类别),和 typeId(物料类型)
- // this.$http.get(`/pms/material/${val}`).then(({ data: res }) => {
- // if (res.code === 0) {
- // const { typeDictValue, typeId } = res.data;
- // this.dataForm.typeDictValue = typeDictValue;
- // this.dataForm.typeId = typeId;
- // this.disableXXX = true;
- // }
- // });
- // } else {
- // this.dataForm.typeDictValue = null;
- // this.dataForm.typeId = null;
- // this.disableXXX = false;
- // }
- // },
- },
+
methods: {
disableCondition(prop) {
return this.detailMode || (this.disableXXX && this.autoDisabledList.indexOf(prop) !== -1);
@@ -397,6 +418,18 @@ export default {
if (res && res.code === 0) {
const dataFormKeys = Object.keys(this.dataForm);
this.dataForm = __pick(res.data, dataFormKeys);
+ if ("files" in res.data) {
+ console.log("[DialogWithMenu] fileList===>", res.data.files, this.fileList);
+ /** 返回的文件列表 */
+ this.fileList = res.data.files
+ ? res.data.files.map((file) => ({
+ id: file.id,
+ name: file.fileUrl.split("/").pop(),
+ url: file.fileUrl,
+ typeCode: file.typeCode,
+ }))
+ : [];
+ }
}
this.loadingStatus = false;
});
@@ -408,10 +441,45 @@ export default {
},
/** handlers */
- triggerUpload() {
- // 出发 upload 界面
+ handleFileClick(type) {
+ switch (type) {
+ case "view":
+ break;
+ case "download": {
+ }
+ case "delete": {
+ }
+ }
},
+ handleUploadSuccess(response, file, fileList) {
+ console.log("[DialogWithMenu] uploadedFileList", response, file, fileList, this.uploadedFileList);
+
+ if (response.code === 0) {
+ const uploadedFile = response.data[0];
+ const fileItem = {
+ id: uploadedFile.id,
+ name: uploadedFile.fileUrl.split("/").pop(),
+ url: uploadedFile.fileUrl,
+ typeCode: file.typeCode,
+ };
+
+ /** 通知 */
+ this.$notify({
+ title: "成功",
+ message: "上传成功",
+ type: "success",
+ });
+
+ this.fileList.push(fileItem);
+ // this.uploadedFileList.push(fileItem);
+ // this.$emit("update-file-list", this.uploadedFileList);
+ this.updateFileList(this.fileList)
+ }
+ },
+ updateFileList(list) {
+ // this.$http.put()
+ },
handleComponentModelUpdate(propName, { subject, payload: { data } }) {
this.dataForm[propName] = JSON.stringify(data);
console.log("[DialogJustForm] handleComponentModelUpdate", this.dataForm[propName]);
@@ -623,4 +691,41 @@ export default {
right: 0;
z-index: 10000;
}
+
+ul,
+li {
+ padding: 0;
+ margin: 0;
+ list-style: none;
+}
+
+.file-list {
+ max-height: 20vh;
+ overflow-y: auto;
+ margin-top: 12px;
+ width: 240px;
+ display: flex;
+ flex-direction: column;
+ background-color: #ccc;
+}
+
+.file-list > li {
+ padding: 8px;
+ display: flex;
+ justify-content: space-between;
+}
+
+.file-operations {
+ display: flex;
+}
+
+.file-icon {
+ margin-right: 8px;
+ font-size: 16px;
+ line-height: 1;
+ display: flex;
+ place-content: center;
+ width: 16px;
+ height: 16px;
+}
diff --git a/src/views/modules/pms/product/config.js b/src/views/modules/pms/product/config.js
index 1487687..6f17e23 100644
--- a/src/views/modules/pms/product/config.js
+++ b/src/views/modules/pms/product/config.js
@@ -1,116 +1,146 @@
-import TableOperaionComponent from '@/components/noTemplateComponents/operationComponent'
-import TableTextComponent from '@/components/noTemplateComponents/detailComponent'
-import StatusComponent from '@/components/noTemplateComponents/statusComponent'
-import { timeFilter, dictFilter } from '@/utils/filters'
+import TableOperaionComponent from "@/components/noTemplateComponents/operationComponent";
+import TableTextComponent from "@/components/noTemplateComponents/detailComponent";
+import StatusComponent from "@/components/noTemplateComponents/statusComponent";
+import { timeFilter, dictFilter } from "@/utils/filters";
export default function () {
-
const tableProps = [
- { type: 'index', label: '序号' },
+ { type: "index", label: "序号" },
{ prop: "createTime", label: "添加时间", filter: timeFilter },
- { prop: 'name', label: '产品名称' },
- { prop: 'code', label: '产品编码' },
- { prop: 'typeDictValue', label: '产品类型', filter: dictFilter('product_type') },
- { prop: 'specifications', label: '规格' },
- { prop: 'unitDictValue', label: '单位', filter: dictFilter('unit') },
- { prop: 'weight', label: '重量', filter: val => val ? val + ' kg' : '-' },
- { prop: 'processTime', label: '产线完成单位产品用时', width: 200, filter: val => val + ' s' },
- { prop: 'remark', label: '备注' },
- { prop: 'description', label: '附件信息', subcomponent: TableTextComponent, buttonContent: '查看附件' },
+ { prop: "name", label: "产品名称" },
+ { prop: "code", label: "产品编码" },
+ { prop: "typeDictValue", label: "产品类型", filter: dictFilter("product_type") },
+ { prop: "specifications", label: "规格" },
+ { prop: "unitDictValue", label: "单位", filter: dictFilter("unit") },
+ { prop: "weight", label: "重量", filter: (val) => (val ? val + " kg" : "-") },
+ { prop: "processTime", label: "产线完成单位产品用时", width: 200, filter: (val) => val + " s" },
+ { prop: "remark", label: "备注" },
+ { prop: "description", label: "附件信息", subcomponent: TableTextComponent, buttonContent: "查看附件" },
{
- prop: 'operations',
- name: '操作',
- fixed: 'right',
+ prop: "operations",
+ name: "操作",
+ fixed: "right",
width: 120,
subcomponent: TableOperaionComponent,
- options: ['edit', { name: 'delete', permission: 'pms:product:delete' }]
- }
- ]
-
+ options: ["edit", { name: "delete", permission: "pms:product:delete" }],
+ },
+ ];
const headFormFields = [
{
- label: '关键字',
- prop: 'key',
+ label: "关键字",
+ prop: "key",
input: true,
- default: { value: '' },
- bind: { placeholder: '请输入产品名称或编码' }
+ default: { value: "" },
+ bind: { placeholder: "请输入产品名称或编码" },
},
{
button: {
- type: 'primary',
- name: '查询'
- }
+ type: "primary",
+ name: "查询",
+ },
},
{
button: {
- type: 'plain',
- name: '新增',
- permission: 'pms:product:save'
- }
- }
- ]
+ type: "plain",
+ name: "新增",
+ permission: "pms:product:save",
+ },
+ },
+ ];
-
- const dictList = JSON.parse(localStorage.getItem('dictList') || {})
+ const dictList = JSON.parse(localStorage.getItem("dictList") || {});
const dialogConfigs = {
- menu: [{ name: '产品信息', key: 'info' }, { name: '产品属性信息', key: 'attr', onlyEditMode: true }, { name: '附件', key: 'attachment', onlyEditMode: true }],
+ menu: [
+ { name: "产品信息", key: "info" },
+ { name: "产品属性信息", key: "attr", onlyEditMode: true },
+ {
+ name: "附件",
+ key: "attachment",
+ onlyEditMode: true,
+ actionUrl: window.SITE_CONFIG["apiURL"] + "/pms/attachment/uploadFileFormData?typeCode=ProductAttachment",
+ },
+ ],
form: {
rows: [
[
- { input: true, label: '产品名称/砖型名称', prop: 'name', rules: { required: true, message: 'not empty', trigger: 'blur' }, elparams: { placeholder: '请输入设备名称' } },
- { input: true, label: '产品编码/砖型编码', prop: 'code', rules: { required: true, message: 'not empty', trigger: 'blur' }, elparams: { placeholder: '请输入设备编码' } },
+ {
+ input: true,
+ label: "产品名称/砖型名称",
+ prop: "name",
+ rules: { required: true, message: "not empty", trigger: "blur" },
+ elparams: { placeholder: "请输入设备名称" },
+ },
+ {
+ input: true,
+ label: "产品编码/砖型编码",
+ prop: "code",
+ rules: { required: true, message: "not empty", trigger: "blur" },
+ elparams: { placeholder: "请输入设备编码" },
+ },
// { input: true, label: '版本号', prop: 'version', elparams: { placeholder: '请输入版本号' } },
{
select: true,
- label: '产品类型',
- prop: 'typeDictValue',
- options: 'product_type' in dictList ? dictList['product_type'].map(item => ({ value: item.dictValue, label: item.dictLabel })) : [],
- elparams: { placeholder: '选择一个产品类型' }
+ label: "产品类型",
+ prop: "typeDictValue",
+ options: "product_type" in dictList ? dictList["product_type"].map((item) => ({ value: item.dictValue, label: item.dictLabel })) : [],
+ elparams: { placeholder: "选择一个产品类型" },
},
],
[
// { input: true, label: '单位平方数', prop: 'code', rules: { required: true, message: 'not empty', trigger: 'blur' }, elparams: { placeholder: '请输入设备名称编码' } },
{
select: true,
- label: '单位',
- prop: 'unitDictValue',
- options: 'unit' in dictList ? dictList['unit'].map(item => ({ value: item.dictValue, label: item.dictLabel })) : [],
- elparams: { placeholder: '选择单位' }
+ label: "单位",
+ prop: "unitDictValue",
+ options: "unit" in dictList ? dictList["unit"].map((item) => ({ value: item.dictValue, label: item.dictLabel })) : [],
+ elparams: { placeholder: "选择单位" },
+ },
+ {
+ input: true,
+ label: "规格",
+ prop: "specifications",
+ rules: { required: true, message: "not empty", trigger: "blur" },
+ elparams: { placeholder: "请输入规格" },
+ },
+ {
+ input: true,
+ label: "产线完成单位产品用时(s)",
+ prop: "processTime",
+ rules: { required: true, message: "not empty", trigger: "blur" },
+ elparams: { placeholder: "请输入规格" },
},
- { input: true, label: '规格', prop: 'specifications', rules: { required: true, message: 'not empty', trigger: 'blur' }, elparams: { placeholder: '请输入规格' } },
- { input: true, label: '产线完成单位产品用时(s)', prop: 'processTime', rules: { required: true, message: 'not empty', trigger: 'blur' }, elparams: { placeholder: '请输入规格' } },
],
- [{ textarea: true, label: '备注', prop: 'remark', elparams: { placeholder: '备注' } }],
+ [{ textarea: true, label: "备注", prop: "remark", elparams: { placeholder: "备注" } }],
],
operations: [
- { name: 'add', label: '保存', type: 'primary', permission: 'pms:product:save', showOnEdit: false },
- { name: 'update', label: '更新', type: 'primary', permission: 'pms:product:update', showOnEdit: true },
- { name: 'reset', label: '重置', type: 'warning', showAlways: true },
+ { name: "add", label: "保存", type: "primary", permission: "pms:product:save", showOnEdit: false },
+ { name: "update", label: "更新", type: "primary", permission: "pms:product:update", showOnEdit: true },
+ { name: "reset", label: "重置", type: "warning", showAlways: true },
// { name: 'cancel', label: '取消', showAlways: true },
],
},
table: {
// extraParams: ['stepId'],
- extraParams: 'productId',
+ extraParams: "productId",
props: [
- { type: 'index', label: '序号' },
+ { type: "index", label: "序号" },
{ prop: "createTime", label: "添加时间", filter: timeFilter },
// { prop: 'productId', label: '产品ID' },
- { prop: 'name', label: '属性名称', isEditField: true },
- { prop: 'value', label: '属性值', isEditField: true },
- { prop: 'remark', label: '备注', isEditField: true },
+ { prop: "name", label: "属性名称", isEditField: true },
+ { prop: "value", label: "属性值", isEditField: true },
+ { prop: "remark", label: "备注", isEditField: true },
{
- prop: 'operations',
- name: '操作',
- fixed: 'right',
+ prop: "operations",
+ name: "操作",
+ fixed: "right",
width: 120,
subcomponent: TableOperaionComponent,
options: [
- { name: 'edit', permission: 'pms:productArrt:update' },
- { name: 'delete', permission: 'pms:productArrt:delete' },
- ]
- }
+ { name: "edit", permission: "pms:productArrt:update" },
+ { name: "delete", permission: "pms:productArrt:delete" },
+ ],
+ },
],
data: [
// TOOD 暂时用不到,但获取可以考虑把拉取接口数据的函数迁移到此文件(没有太大必要)
@@ -118,25 +148,34 @@ export default function () {
},
subDialog: {
- extraParam: 'productId',
+ extraParam: "productId",
forceAttachCode: true, // 产品属性新增必填 code 字段......
rows: [
[
- { input: true, label: '属性名称', prop: 'name', rules: { required: true, message: 'not empty', trigger: 'blur' }, elparams: { placeholder: '请输入属性名称' } },
- { input: true, label: '属性值', prop: 'value', rules: { required: true, message: 'not empty', trigger: 'blur' }, elparams: { placeholder: '请输入属性值' } },
+ {
+ input: true,
+ label: "属性名称",
+ prop: "name",
+ rules: { required: true, message: "not empty", trigger: "blur" },
+ elparams: { placeholder: "请输入属性名称" },
+ },
+ {
+ input: true,
+ label: "属性值",
+ prop: "value",
+ rules: { required: true, message: "not empty", trigger: "blur" },
+ elparams: { placeholder: "请输入属性值" },
+ },
],
- [
- { textarea: true, label: '备注', prop: 'remark', elparams: { placeholder: '添加备注' } },
- ]
+ [{ textarea: true, label: "备注", prop: "remark", elparams: { placeholder: "添加备注" } }],
],
operations: [
- { name: 'add', label: '保存', type: 'primary', permission: 'pms:productArrt:save', showOnEdit: false },
- { name: 'update', label: '更新', type: 'primary', permission: 'pms:productArrt:update', showOnEdit: true },
+ { name: "add", label: "保存", type: "primary", permission: "pms:productArrt:save", showOnEdit: false },
+ { name: "update", label: "更新", type: "primary", permission: "pms:productArrt:update", showOnEdit: true },
],
},
};
-
return {
dialogConfigs,
tableConfig: {
@@ -145,13 +184,13 @@ export default function () {
},
headFormConfigs: {
rules: null, // 名称是由 BaseSearchForm.vue 组件固定的
- fields: headFormFields // 名称是由 BaseSearchForm.vue 组件固定的
+ fields: headFormFields, // 名称是由 BaseSearchForm.vue 组件固定的
},
urls: {
- base: '/pms/product',
- page: '/pms/product/page',
- subase: '/pms/productArrt',
- subpage: '/pms/productArrt/page',
- }
- }
-}
\ No newline at end of file
+ base: "/pms/product",
+ page: "/pms/product/page",
+ subase: "/pms/productArrt",
+ subpage: "/pms/productArrt/page",
+ },
+ };
+}