From 02f85f84ce3d2212736e231c376dd084a7153783 Mon Sep 17 00:00:00 2001
From: 石广澎 <shiguangpeng@163.com>
Date: 星期四, 30 十一月 2023 15:09:15 +0800
Subject: [PATCH] feat: 库存管理 出库管理、采购管理、报废管理 新增时物品查询增加机构限制
---
admin-web/src/main.js | 3
admin-web/src/views/stock/transfer/transferissue/detail.vue | 225 ++++++---
admin-web/src/views/stock/transfer/transferApplication/edit.vue | 62 +-
admin-web/src/views/stock/scrap/itemScrapping/detail.vue | 4
admin-web/src/views/stock/scrap/itemScrapping/edit.vue | 56 +
admin-web/src/styles/store.scss | 2
admin-web/src/views/departmentitem/itemdis/distribution/detail.vue | 63 +-
admin-web/src/views/stock/accessStock/outbound/detail.vue | 65 ++
admin-web/src/views/stock/procure/purchaseOrder/edit.vue | 43 +
admin-web/src/store/modules/user.js | 398 ++++++++--------
admin-web/src/views/stock/ledger/inventoryAlert/edit.vue | 173 ++++---
admin-web/src/views/stock/transfer/transferApplication/detail.vue | 201 +++++--
admin-web/src/views/departmentitem/itemdis/distribution/edit.vue | 58 -
admin-web/src/views/stock/index.scss | 3
admin-web/src/utils/base.js | 18
admin-web/src/views/departmentitem/itemdis/distribution/index.vue | 1
admin-web/src/views/stock/accessStock/outbound/edit.vue | 59 +-
admin-web/src/views/dashboard/index.vue | 1
18 files changed, 816 insertions(+), 619 deletions(-)
diff --git a/admin-web/src/main.js b/admin-web/src/main.js
index c678513..48cc6fa 100644
--- a/admin-web/src/main.js
+++ b/admin-web/src/main.js
@@ -33,7 +33,7 @@
import './directive/num';
import searchInfo from '@/utils/changeColor';
import exportExcel from '@/utils/exportExcel'; // 瀵煎嚭
-import {downLoad, previewDoc} from '@/utils/base';
+import {downLoad} from '@/utils/base';
import '@/mock'
Vue.config.devtools = true;
@@ -44,7 +44,6 @@
});
Vue.prototype.exportExcelUtils = exportExcel;
-Vue.prototype.previewDoc = previewDoc;
Vue.prototype.downLoad = downLoad;
Vue.prototype.$searchInfo = searchInfo;
Vue.use(VueLazyload, {
diff --git a/admin-web/src/store/modules/user.js b/admin-web/src/store/modules/user.js
index 4a42577..5020517 100644
--- a/admin-web/src/store/modules/user.js
+++ b/admin-web/src/store/modules/user.js
@@ -17,223 +17,225 @@
import {encrypt} from '@/utils/jsencrypt'
const state = {
- info: getUser(),
- userInfo:getUserDetail(),//鐢ㄦ埛璇︾粏淇℃伅
- token: getToken(),
- userId:'',
- name: '',
- avatar: '',
- introduction: '',
- roles: [],
- isLogin: Cookies.get('isLogin'),
- permissions: [],
- myButtonPermission:[],
- captcha: {
- captchaVerification: '',
- secretKey: '',
- token: '',
- }, //婊戝潡楠岃瘉token
+ info: getUser(),
+ userInfo: getUserDetail(),//鐢ㄦ埛璇︾粏淇℃伅
+ token: getToken(),
+ userId: '',
+ name: '',
+ avatar: '',
+ introduction: '',
+ roles: [],
+ isLogin: Cookies.get('isLogin'),
+ permissions: [],
+ myButtonPermission: [],
+ captcha: {
+ captchaVerification: '',
+ secretKey: '',
+ token: '',
+ }, //婊戝潡楠岃瘉token
};
const mutations = {
- SET_USER_INFO:(state, info)=>{
- // 璁剧疆璇︾粏淇℃伅
- state.userInfo = info
- setUserDetail(info)
- },
- SET_MYBUTTONPERMISSION: (state, myButtonPermission) => {
- state.myButtonPermission = myButtonPermission
- },
- SET_TOKEN: (state, token) => {
- state.token = token;
- setToken(token)
- },
- SET_USERINFO: (state, user) =>{
- // 淇濆瓨鐢ㄦ埛淇℃伅
- state.info = user
- setUserInfo(user)
- },
- SET_ISLOGIN: (state, isLogin) => {
- state.isLogin = isLogin;
- Cookies.set(isLogin);
- },
- SET_INTRODUCTION: (state, introduction) => {
- state.introduction = introduction;
- },
- SET_USERID: (state, id) => {
- state.userId = id;
- },
- SET_NAME: (state, name) => {
- state.name = name;
- },
- SET_AVATAR: (state, avatar) => {
- state.avatar = avatar;
- },
- SET_ROLES: (state, roles) => {
- state.roles = roles;
- },
- SET_PERMISSIONS: (state, permissions) => {
- state.permissions = permissions;
- },
- SET_CAPTCHA: (state, captcha) => {
- state.captcha = captcha;
- }
+ SET_USER_INFO: (state, info) => {
+ // 璁剧疆璇︾粏淇℃伅
+ state.userInfo = info
+ setUserDetail(info)
+ },
+ SET_MYBUTTONPERMISSION: (state, myButtonPermission) => {
+ state.myButtonPermission = myButtonPermission
+ },
+ SET_TOKEN: (state, token) => {
+ state.token = token;
+ setToken(token)
+ },
+ SET_USERINFO: (state, user) => {
+ // 淇濆瓨鐢ㄦ埛淇℃伅
+ state.info = user
+ setUserInfo(user)
+ },
+ SET_ISLOGIN: (state, isLogin) => {
+ state.isLogin = isLogin;
+ Cookies.set(isLogin);
+ },
+ SET_INTRODUCTION: (state, introduction) => {
+ state.introduction = introduction;
+ },
+ SET_USERID: (state, id) => {
+ state.userId = id;
+ },
+ SET_NAME: (state, name) => {
+ state.name = name;
+ },
+ SET_AVATAR: (state, avatar) => {
+ state.avatar = avatar;
+ },
+ SET_ROLES: (state, roles) => {
+ state.roles = roles;
+ },
+ SET_PERMISSIONS: (state, permissions) => {
+ state.permissions = permissions;
+ },
+ SET_CAPTCHA: (state, captcha) => {
+ state.captcha = captcha;
+ }
};
const actions = {
- // user login
- login({ commit }, userInfo) {
- // const { account, pwd, key, code, wxCode } = userInfo;
- const username = userInfo.account.trim()
- // const password = userInfo.password
- const password = encrypt(userInfo.password)
- const code = userInfo.code
- const uuid = userInfo.uuid
- const loginType = userInfo.loginType
- const verifyType = userInfo.verifyType
- Loading.service();
- return new Promise((resolve, reject) => {
- // login(userInfo)
- login(username, password, code, uuid, loginType, verifyType)
- .then((data) => {
- let loadingInstance = Loading.service();
- loadingInstance.close();
- commit('SET_TOKEN', data.token);
- commit('SET_USERINFO', data.userInfo);
- getCurInfo().then(res=>{
- commit('SET_USER_INFO',res)
- })
- resolve();
- })
- .catch((error) => {
- reject(error);
+ // user login
+ login({commit}, userInfo) {
+ // const { account, pwd, key, code, wxCode } = userInfo;
+ const username = userInfo.account.trim()
+ // const password = userInfo.password
+ const password = encrypt(userInfo.password)
+ const code = userInfo.code
+ const uuid = userInfo.uuid
+ const loginType = userInfo.loginType
+ const verifyType = userInfo.verifyType
+ Loading.service();
+ return new Promise((resolve, reject) => {
+ // login(userInfo)
+ login(username, password, code, uuid, loginType, verifyType)
+ .then((data) => {
+ let loadingInstance = Loading.service();
+ loadingInstance.close();
+ commit('SET_TOKEN', data.token);
+ commit('SET_USERINFO', data.userInfo);
+ getCurInfo().then(res => {
+ commit('SET_USER_INFO', res)
+ resolve();
+ }).catch((error) => {
+ reject(error);
+ })
+ })
+ .catch((error) => {
+ reject(error);
+ });
});
- });
- },
+ },
- // 鐭俊鏄惁鐧诲綍
- isLogin({ commit }, userInfo) {
- return new Promise((resolve, reject) => {
- isLoginApi()
- .then(async (res) => {
- commit('SET_ISLOGIN', res.isLogin);
- resolve(res);
- })
- .catch((res) => {
- commit('SET_ISLOGIN', false);
- reject(res);
+ // 鐭俊鏄惁鐧诲綍
+ isLogin({commit}, userInfo) {
+ return new Promise((resolve, reject) => {
+ isLoginApi()
+ .then(async (res) => {
+ commit('SET_ISLOGIN', res.isLogin);
+ resolve(res);
+ })
+ .catch((res) => {
+ commit('SET_ISLOGIN', false);
+ reject(res);
+ });
});
- });
- },
+ },
- // get user info
- getInfo({ commit, state }) {
- return new Promise((resolve, reject) => {
- getInfo(state.token)
- .then(data => {
- if (!data) {
- reject('Verification failed, please Login again.');
- }
- let roles = data.roleIds;
- if (!roles || roles.length <= 0) {
- reject('getInfo: roles must be a non-null array!');
- }
- // 鑾峰彇骞惰缃慨鏀瑰瘑鐮佺殑鐘舵��
- setCPass(data.force_change_pass)
- if( data.force_change_pass ){
- router.push({ path: '/resetPwd' });
- reject(data);
- }
- commit('SET_USERID', data.id);
- commit('SET_ROLES', roles);
- commit('SET_NAME', data.account);
- commit('SET_AVATAR', 'http://kaifa.crmeb.net/system/images/admin_logo.png');
- commit('SET_INTRODUCTION', data.realName);
- commit('SET_PERMISSIONS', data.permissions); //鏉冮檺鏍囪瘑
- resolve(data);
- })
- .catch((error) => {
- reject(error);
+ // get user info
+ getInfo({commit, state}) {
+ return new Promise((resolve, reject) => {
+ getInfo(state.token)
+ .then(data => {
+ if (!data) {
+ reject('Verification failed, please Login again.');
+ }
+ let roles = data.roleIds;
+ if (!roles || roles.length <= 0) {
+ reject('getInfo: roles must be a non-null array!');
+ }
+ // 鑾峰彇骞惰缃慨鏀瑰瘑鐮佺殑鐘舵��
+ setCPass(data.force_change_pass)
+ if (data.force_change_pass) {
+ router.push({path: '/resetPwd'});
+ reject(data);
+ }
+ commit('SET_USERID', data.id);
+ commit('SET_ROLES', roles);
+ commit('SET_NAME', data.account);
+ commit('SET_AVATAR', 'http://kaifa.crmeb.net/system/images/admin_logo.png');
+ commit('SET_INTRODUCTION', data.realName);
+ commit('SET_PERMISSIONS', data.permissions); //鏉冮檺鏍囪瘑
+ resolve(data);
+ })
+ .catch((error) => {
+ reject(error);
+ });
});
- });
- },
+ },
- // user logout
- logout({ commit, state, dispatch }) {
- Loading.service();
- return new Promise((resolve, reject) => {
- logout(state.token)
- .then(() => {
- let loadingInstance = Loading.service();
- loadingInstance.close();
- commit('SET_TOKEN', '');
- commit('SET_ROLES', []);
- commit('SET_PERMISSIONS', []);
- commit('SET_CONNECTION_CLEAR', null) // 鏂紑閾炬帴
- removeToken();
- resetRouter();
- // localStorage.clear();
- Cookies.remove('storeStaffList');
- Cookies.remove('JavaInfo');
- localStorage.clear('sidebarRouters');
- sessionStorage.removeItem('token');
- // reset visited views and cached views
- // to fixed https://github.com/PanJiaChen/vue-element-admin/issues/2485
- dispatch('tagsView/delAllViews', null, { root: true });
+ // user logout
+ logout({commit, state, dispatch}) {
+ Loading.service();
+ return new Promise((resolve, reject) => {
+ logout(state.token)
+ .then(() => {
+ let loadingInstance = Loading.service();
+ loadingInstance.close();
+ commit('SET_TOKEN', '');
+ commit('SET_ROLES', []);
+ commit('SET_PERMISSIONS', []);
+ commit('SET_CONNECTION_CLEAR', null) // 鏂紑閾炬帴
+ removeToken();
+ resetRouter();
+ // localStorage.clear();
+ Cookies.remove('storeStaffList');
+ Cookies.remove('JavaInfo');
+ localStorage.clear('sidebarRouters');
+ sessionStorage.removeItem('token');
+ // reset visited views and cached views
+ // to fixed https://github.com/PanJiaChen/vue-element-admin/issues/2485
+ dispatch('tagsView/delAllViews', null, {root: true});
- resolve();
- })
- .catch((error) => {
- reject(error);
+ resolve();
+ })
+ .catch((error) => {
+ reject(error);
+ });
});
- });
- },
+ },
- // remove token
- resetToken({ commit }) {
- return new Promise((resolve) => {
- commit('SET_TOKEN', '');
- commit('SET_ROLES', []);
- removeToken();
- resolve();
- });
- },
- // // 璁剧疆token
- // setToken({ commit }, state) {
- // return new Promise((resolve) => {
- // commit('SET_TOKEN', state.token);
- // // Cookies.set('JavaInfo', JSON.stringify(state));
- // setToken(data.token);
- // resolve();
- // });
- // },
+ // remove token
+ resetToken({commit}) {
+ return new Promise((resolve) => {
+ commit('SET_TOKEN', '');
+ commit('SET_ROLES', []);
+ removeToken();
+ resolve();
+ });
+ },
+ // // 璁剧疆token
+ // setToken({ commit }, state) {
+ // return new Promise((resolve) => {
+ // commit('SET_TOKEN', state.token);
+ // // Cookies.set('JavaInfo', JSON.stringify(state));
+ // setToken(data.token);
+ // resolve();
+ // });
+ // },
- // dynamically modify permissions
- changeRoles({ commit, dispatch }, role) {
- return new Promise(async (resolve) => {
- // const token = role + '-token';
- //
- // commit('SET_TOKEN', token);
- // // setToken(token);
- //
- const { roles } = await dispatch('getInfo');
- // resetRouter();
- // generate accessible routes map based on roles
- const accessRoutes = await dispatch('permission/generateRoutes', roles, { root: true });
- // dynamically add accessible routes
- router.addRoutes(accessRoutes);
+ // dynamically modify permissions
+ changeRoles({commit, dispatch}, role) {
+ return new Promise(async (resolve) => {
+ // const token = role + '-token';
+ //
+ // commit('SET_TOKEN', token);
+ // // setToken(token);
+ //
+ const {roles} = await dispatch('getInfo');
+ // resetRouter();
+ // generate accessible routes map based on roles
+ const accessRoutes = await dispatch('permission/generateRoutes', roles, {root: true});
+ // dynamically add accessible routes
+ router.addRoutes(accessRoutes);
- // reset visited views and cached views
- dispatch('tagsView/delAllViews', null, { root: true });
+ // reset visited views and cached views
+ dispatch('tagsView/delAllViews', null, {root: true});
- resolve();
- });
- },
+ resolve();
+ });
+ },
};
export default {
- namespaced: true,
- state,
- mutations,
- actions,
+ namespaced: true,
+ state,
+ mutations,
+ actions,
};
diff --git a/admin-web/src/styles/store.scss b/admin-web/src/styles/store.scss
index 9cd1dc6..40df8c4 100644
--- a/admin-web/src/styles/store.scss
+++ b/admin-web/src/styles/store.scss
@@ -187,6 +187,8 @@
cursor: pointer;
.img {
width: 100%;
+ height: 100%;
+ object-fit: cover;
}
}
diff --git a/admin-web/src/utils/base.js b/admin-web/src/utils/base.js
index b2f7f05..74c10b5 100644
--- a/admin-web/src/utils/base.js
+++ b/admin-web/src/utils/base.js
@@ -23,24 +23,6 @@
return getBaseUrl() + '/pc/fin/file/uploadMore'
}
-// 棰勮鏂囦欢
-export function previewDoc(obj) {
- const routeUrl = this.$router.resolve({url: '/webOffice/preview'})
- let url = obj.url
- const wordLIst = ['doc', 'docm', 'docx', 'docxf', 'dot', 'dotm', 'dotx', 'epub', 'fodt', 'fb2', 'htm', 'html', 'mht', 'odt', 'oform', 'ott', 'oxps', 'pdf', 'rtf', 'txt', 'djvu', 'xml', 'xps', 'csv', 'fods', 'ods', 'ots', 'xls', 'xlsb', 'xlsm', 'xlsx', 'xlt', 'xltm', 'xltx', 'fodp', 'odp', 'otp', 'pot', 'potm', 'potx', 'pps', 'ppsm', 'ppsx', 'ppt', 'pptm', 'pptx']
- const arr = url.split('.')
- if (arr.length === 2) {
- if (wordLIst.includes(arr[arr.length - 1])) {
- if (obj.url.indexOf('http') !== 0) {
- url = SettingIplatform.ftpUrl + url
- }
- const newWindow = window.open(routeUrl.href + '?url=' + encodeURIComponent(url) + '&docName=' + encodeURIComponent(encodeURIComponent(obj.fileName)), '_blank')
- if (newWindow) newWindow.opener = null
- } else {
- Message.warning('鏂囦欢鏍煎紡涓嶆敮鎸侀瑙堬紒')
- }
- }
-}
// 涓嬭浇鏂囦欢
export function downLoad(obj) {
diff --git a/admin-web/src/views/dashboard/index.vue b/admin-web/src/views/dashboard/index.vue
index 7a12ff2..25a5676 100644
--- a/admin-web/src/views/dashboard/index.vue
+++ b/admin-web/src/views/dashboard/index.vue
@@ -182,6 +182,7 @@
};
},
created() {
+ console.log(this.userInfo)
this.getAuditList()
this.getWarningList()
getGoodsNumPrice().then(res => {
diff --git a/admin-web/src/views/departmentitem/itemdis/distribution/detail.vue b/admin-web/src/views/departmentitem/itemdis/distribution/detail.vue
index 81209db..b5f0479 100644
--- a/admin-web/src/views/departmentitem/itemdis/distribution/detail.vue
+++ b/admin-web/src/views/departmentitem/itemdis/distribution/detail.vue
@@ -1,44 +1,44 @@
<template>
- <win-lg class="stock-detail" :title="setting.title" @close="close" :width="'800px'" :loading="loading">
+ <win-md class="stock-detail" :title="setting.title" @close="close" :width="'800px'" :loading="loading">
<el-row :gutter="20">
<el-col :span="8">
<span>鍒嗗彂鍗曞彿锛�</span>
- <span>{{detail.businessFormCode}}</span>
+ <span>{{ detail.businessFormCode }}</span>
</el-col>
<el-col :span="8">
<span>鎵�灞炴満鏋勶細</span>
- <span>{{detail.outAgencyName}}</span>
+ <span>{{ detail.outAgencyName }}</span>
</el-col>
<el-col :span="8">
<span>閮ㄩ棬锛�</span>
- <span>{{detail.inWarehouseName}}</span>
+ <span>{{ detail.inWarehouseName }}</span>
</el-col>
</el-row>
<el-row :gutter="20" style="margin-top: 20px">
<el-col :span="8">
<span>鍒嗗彂浜猴細</span>
- <span>{{detail.outOperatorName}}</span>
+ <span>{{ detail.outOperatorName }}</span>
</el-col>
<el-col :span="8">
<span>鍒嗗彂鏃堕棿锛�</span>
- <span>{{detail.createTime|formatTime}}</span>
+ <span>{{ detail.createTime|formatTime }}</span>
</el-col>
<el-col :span="8">
<span>棰嗗彇浜猴細</span>
- <span>{{detail.inOperatorName}}</span>
+ <span>{{ detail.inOperatorName }}</span>
</el-col>
</el-row>
<el-row :gutter="20" style="margin-top: 20px">
<el-col :span="8">
<span>鑱旂郴鐢佃瘽锛�</span>
- <span>{{detail.tel}}</span>
+ <span>{{ detail.tel }}</span>
</el-col>
</el-row>
<el-row :gutter="20" style="margin-top: 20px">
<el-col class="img-row" :span="24">
<span>鍒嗗彂鎵嬬画锛�</span>
<div class="img-box" v-for="(item, index) in fileList" :key="index" @click="handlePreview(item)">
- <img class="img" :src="getUrl(item.path)" alt="" />
+ <img class="img" :src="getUrl(item.path)" alt=""/>
</div>
</el-col>
</el-row>
@@ -60,13 +60,13 @@
<el-form>
<el-row class="card3" v-for="(mItem, mIndex) in goodsItem.models" :key="mIndex">
<el-col style="padding: 10px 0" :span="10">
- <el-form-item label="瑙勬牸鍨嬪彿1:" style="margin-bottom: 0">
+ <el-form-item label="瑙勬牸鍨嬪彿1:" style="margin-bottom: 0">
{{ mItem.baseGoodsModelsName }}
</el-form-item>
</el-col>
<el-col style="padding: 10px 0" :span="4">
<el-form-item label="鍗曚綅:" style="margin-bottom: 0" label-width="80">
- {{mItem.unit}}
+ {{ mItem.unit }}
</el-form-item>
</el-col>
<!--A绫诲晢鍝� -->
@@ -74,17 +74,17 @@
<el-row v-for="(user, u) in mItem.useInfo" :key="u">
<el-col :span="6">
<el-form-item label="鍒嗗彂鏁伴噺:" style="margin-bottom: 0" label-width="80">
- {{user.num}}
+ {{ user.num }}
</el-form-item>
</el-col>
<el-col :span="6">
<el-form-item label="浣跨敤浜�:" style="margin-bottom: 0" label-width="80">
- {{user.name}}
+ {{ user.name }}
</el-form-item>
</el-col>
<el-col :span="6">
<el-form-item label="鑱旂郴鐢佃瘽:" style="margin-bottom: 0" label-width="80">
- {{user.tel}}
+ {{ user.tel }}
</el-form-item>
</el-col>
</el-row>
@@ -92,7 +92,7 @@
<!--BC绫诲晢鍝� -->
<el-col style="padding: 10px 0" :span="10" v-else>
<el-form-item label="鍒嗗彂鏁伴噺:" prop="counts" style="margin-bottom: 0" label-width="80">
- {{mItem.counts}}
+ {{ mItem.counts }}
</el-form-item>
</el-col>
</el-row>
@@ -102,19 +102,19 @@
<div id="uploadPreviewImages" style="display: none">
<span v-for="(src, index) in fileList" :key="index">
<img
- v-if="checkImg(src.name)"
- class="v-img"
- :src="src.url"
- :alt="src.name"
- style="width: 100px; height: 100px"
+ v-if="checkImg(src.name)"
+ class="v-img"
+ :src="src.url"
+ :alt="src.name"
+ style="width: 100px; height: 100px"
/>
</span>
</div>
- </win-lg>
+ </win-md>
</template>
<script>
import {transferDetail} from '@/api/stock/transfer';
-import winLg from '@/components/win/win-lg';
+import winMd from '@/components/win/win-md';
import * as DateFormatter from '@/utils/DateFormatter';
import {getDownUrl} from '@/utils/base';
import Viewer from 'viewerjs';
@@ -129,16 +129,17 @@
return de
}
},
- components: { winLg },
+ components: {winMd},
props: {
setting: {
type: Object,
- default: () => {},
+ default: () => {
+ },
},
},
data() {
return {
- loading:false,
+ loading: true,
fileList: [],
detail: {
baseCategoryName: '',
@@ -165,8 +166,9 @@
}
},
created() {
- transferDetail({ id: this.setting.id }).then((res) => {
+ transferDetail({id: this.setting.id}).then((res) => {
this.detail = res;
+ this.loading = false
this.fileList = this.detail.procureDoc ? JSON.parse(this.detail.procureDoc) : [];
this.$nextTick(() => {
this.initPreviewImg();
@@ -226,18 +228,11 @@
</script>
<style lang="scss" scoped>
@import url(../../../../styles/store.scss);
+
.card3 {
padding: 10px;
margin-top: 10px;
border-radius: 2px;
background: #ffffff;
-}
-.img-box{
- width: 100px;
- height: 100px;
-}
-.img-box .img{
- width: 100px;
- height: 100px;
}
</style>
diff --git a/admin-web/src/views/departmentitem/itemdis/distribution/edit.vue b/admin-web/src/views/departmentitem/itemdis/distribution/edit.vue
index f84c322..0bf076a 100644
--- a/admin-web/src/views/departmentitem/itemdis/distribution/edit.vue
+++ b/admin-web/src/views/departmentitem/itemdis/distribution/edit.vue
@@ -1,11 +1,11 @@
<template>
- <win-md class="stock-edit" title="鐗╁搧鍒嗗彂" @close="close" width="900px">
- <el-form v-loading="loading" class="form" ref="ruleForm" :model="formData" :rules="rules" label-width="120px">
+ <win-md class="stock-edit" title="鐗╁搧鍒嗗彂" @close="close" width="900px" :loading="loading">
+ <el-form class="form" ref="ruleForm" :model="formData" :rules="rules" label-width="120px">
<div class="main-w">
<el-row :gutter="24" class="headerHeight">
<el-col :span="12">
<el-form-item label="閮ㄩ棬" prop="departmentId">
- <el-select ref="department" v-model="formData.departmentId" placeholder="璇烽�夋嫨" style="width: 100%">
+ <el-select ref="department" v-model="formData.departmentId" clearable placeholder="璇烽�夋嫨" style="width: 100%">
<el-option v-for="item in departmentOptions" :key="item.id" :label="item.name" :value="item.id"
clearable/>
</el-select>
@@ -75,7 +75,7 @@
>
<el-select
v-model="goodsItem.baseGoodsTemplateId"
- placeholder="璇烽�夋嫨鐗╁搧"
+ :placeholder="goodsItem.baseCategoryId?'璇烽�夋嫨鐗╁搧':'璇峰厛閫夋嫨鐗╁搧鍒嗙被'"
filterable
clearable
:disabled="!goodsItem.baseCategoryId"
@@ -97,11 +97,11 @@
<el-form-item
label="瑙勬牸鍨嬪彿"
:prop="`transferGoods.${goodsIndex}.modelsIds`"
- :rules="{required: true,message: '璇烽�夋嫨',trigger: 'change',}">
+ :rules="{required: true,message: '璇烽�夋嫨瑙勬牸鍨嬪彿',trigger: 'change',}">
<el-select
v-model="goodsItem.modelsIds"
multiple
- placeholder="璇烽�夋嫨鐗╁搧瑙勬牸鍨嬪彿"
+ :placeholder="goodsItem.baseCategoryId?'璇烽�夋嫨瑙勬牸鍨嬪彿':'璇峰厛閫夋嫨鐗╁搧鍚嶇О'"
:disabled="!goodsItem.baseCategoryId"
@change="modelChange($event, goodsIndex)"
@remove-tag="modelRemoveTag($event, goodsIndex)"
@@ -290,17 +290,7 @@
}
callback();
},
- loading: false,
- buyTypeOptions: [
- {
- label: '闆嗛噰',
- value: '1',
- },
- {
- label: '鑷噰',
- value: '2',
- },
- ],
+ loading: true,
fileList: [],
departmentOptions: [], // 閮ㄩ棬鍒楄〃
categoryOptions: [], // 鐗╁搧鍒嗙被鍒楄〃
@@ -342,7 +332,7 @@
createTime: [{required: true, message: '璇烽�夋嫨鍒嗗彂鏃堕棿', trigger: 'change'}],
procureDoc: [{required: true, message: '璇蜂笂浼犲鎵规墜缁�', trigger: 'change'}],
baseCategoryIds: [{required: true, message: '璇烽�夋嫨', trigger: 'change'}],
- baseGoodsTemplateId: [{validator: checkGoodsTemplateId, trigger: ['blur', 'change']}],
+ baseGoodsTemplateId: [{required: true, message: '璇烽�夋嫨', trigger: 'change'},{validator: checkGoodsTemplateId, trigger: ['blur', 'change']}],
modelsIds: [{required: true, message: '璇烽�夋嫨', trigger: 'change'}],
transferGoods: [
{
@@ -369,7 +359,6 @@
title: '涓婁紶',
max: 20, // 鏈�澶уぇ灏忥紝鍗曚綅M
num: 10, // 鏀寔涓婁紶鍥剧墖涓暟
- accept: '.jpg,.png', // 闄愬埗鏍煎紡
tip: '', // 鎻愮ず 榛樿锛歚鍙兘涓婁紶${this.defaultSettings.num}涓�${this.defaultSettings.accept}鏂囦欢锛屼笖涓嶈秴杩�${this.defaultSettings.max}kb`
uploadUrl: getUploadUrl(), // 涓婁紶璺緞
multiple: true, // 鏄惁鏀寔鎵归噺涓婁紶
@@ -386,34 +375,13 @@
},
methods: {
async init() {
- this.getdeptmentList();
- this.getgoodsTemplate();
- this.getgoodsModel();
+ await this.getdeptmentList();
// 鑾峰彇鐗╁搧鍒嗙被鍒楄〃
const treeRes = await getTree();
this.categoryOptions = this.removeEmptyChildren(treeRes);
- /*if (this.setting.id) {
- const detail = await procureDetail({ id: this.setting.id });
- this.formData = Object.assign(this.formData, detail);
- if (this.formData.procureDoc) {
- this.fileList = JSON.parse(this.formData.procureDoc);
- }
- this.$set(this.formData, 'buyType', this.formData.buyType.toString());
- this.formData.procureTime = this.formData.procureTime.toString();
- this.formData.transferGoods.map((item, index) => {
- this.$set(
- this.formData.transferGoods[index],
- 'modelsIds',
- item.models.map((v) => v.baseGoodsModelsId),
- );
- this.getgoodsTemplate(item.baseCategoryId, index);
- this.getgoodsModel(item.baseGoodsTemplateId, index);
- item.models.forEach((child, childIndex) => {
- this.$set(this.formData.transferGoods[index].models[childIndex], 'priceYuan', child.price / 100);
- });
- return item;
- });
- }*/
+ this.loading = false
+ this.getgoodsTemplate();
+ this.getgoodsModel();
},
// 鑾峰彇鍏ュ簱浠撳簱鍒楄〃
@@ -568,7 +536,6 @@
// 鎻愪氦
handleSubmit() {
console.log('formData', this.formData);
- if(this.loading) return
this.$refs['ruleForm'].validate((valid) => {
if (valid) {
this.formData.transferGoods.map(goods => {
@@ -585,6 +552,7 @@
this.formData.departmentName = this.$refs.department.selected.currentLabel
this.formData.outAgencyId = this.userInfo.tenantId
+ if(this.loading) return
this.loading = true
transferAdd(this.formData)
.then((res) => {
diff --git a/admin-web/src/views/departmentitem/itemdis/distribution/index.vue b/admin-web/src/views/departmentitem/itemdis/distribution/index.vue
index 8be3bbe..9b4f879 100644
--- a/admin-web/src/views/departmentitem/itemdis/distribution/index.vue
+++ b/admin-web/src/views/departmentitem/itemdis/distribution/index.vue
@@ -172,6 +172,7 @@
qryType: 1,
pageNum: this.pageNum,
pageSize: this.pageSize,
+ outAgencyId: this.userInfo.tenantId,
...this.filterFrom,
}).then((res) => {
this.list = res.datas;
diff --git a/admin-web/src/views/stock/accessStock/outbound/detail.vue b/admin-web/src/views/stock/accessStock/outbound/detail.vue
index 0f6f7c3..9b49569 100644
--- a/admin-web/src/views/stock/accessStock/outbound/detail.vue
+++ b/admin-web/src/views/stock/accessStock/outbound/detail.vue
@@ -24,10 +24,12 @@
<span>{{ detail.dealTime | formatTime }}</span>
</el-col>
</el-row>
- <el-row v-if="detail.procureDoc" :gutter="20" style="margin-top: 20px">
+ <el-row v-if="fileList && fileList.length" :gutter="20" style="margin-top: 20px">
<el-col class="img-row" :span="24">
<span>鍑哄簱鎵嬬画锛�</span>
- <div class="img-box"></div>
+ <div class="img-box" v-for="(item, index) in fileList" :key="index" @click="handlePreview(item)">
+ <img class="img" :src="getUrl(item.path)" alt=""/>
+ </div>
</el-col>
</el-row>
<div class="goods-card" v-for="(goodsItem, goodsIndex) in detail.fromOutputGoods" :key="goodsIndex">
@@ -64,6 +66,17 @@
</el-table-column>
</el-table>
</div>
+ <div id="uploadPreviewImages" style="display: none">
+ <span v-for="(src, index) in fileList" :key="index">
+ <img
+ v-if="checkImg(src.name)"
+ class="v-img"
+ :src="src.url"
+ :alt="src.name"
+ style="width: 100px; height: 100px"
+ />
+ </span>
+ </div>
</win-md>
</template>
<script>
@@ -71,6 +84,11 @@
import winMd from '@/components/win/win-md';
import * as DateFormatter from '@/utils/DateFormatter';
+import {getDownUrl} from "@/utils/base";
+import Viewer from 'viewerjs';
+import 'viewerjs/dist/viewer.css';
+
+let viewer = null;
export default {
components: { winMd },
@@ -83,6 +101,7 @@
data() {
return {
loading:true,
+ fileList: [],
detail: {
categoryName: '',
businessFormCode: '',
@@ -107,10 +126,50 @@
created() {
outputDetail({ id: this.setting.id }).then((res) => {
this.detail = res;
- this.loading = false
+ this.fileList = this.detail.doc ? JSON.parse(this.detail.doc) : [];
+ this.loading = false;
+ this.$nextTick(() => {
+ this.initPreviewImg();
+ });
});
},
methods: {
+ initPreviewImg() {
+ if (viewer != null) {
+ viewer.destroy();
+ }
+ const ViewerDom = document.querySelector('#uploadPreviewImages');
+ viewer = new Viewer(ViewerDom, {});
+ },
+ handlePreview(file) {
+ if (!this.checkImg(file.name)) {
+ return false;
+ }
+ let index = 0;
+ for (let i = 0; i < this.fileList.length; i++) {
+ const f = this.fileList[i];
+ if (this.checkImg(f.name)) {
+ if (file.id == f.id) {
+ break;
+ }
+ index++;
+ }
+ }
+ viewer.view(index);
+ },
+ checkImg(name) {
+ const suffix = name.substring(name.lastIndexOf('.'), name.length);
+ const imgArray = ['.jpg', '.jpeg', '.png', '.bmp'];
+ return imgArray.indexOf(suffix) >= 0;
+
+ },
+ getUrl(path) {
+ if (path.substr(0, 7).toLowerCase() == 'http://' || path.substr(0, 8).toLowerCase() == 'https://') {
+ return path;
+ } else {
+ return getDownUrl() + path;
+ }
+ },
close() {
this.$emit('close')
},
diff --git a/admin-web/src/views/stock/accessStock/outbound/edit.vue b/admin-web/src/views/stock/accessStock/outbound/edit.vue
index e7d1cd4..079826e 100644
--- a/admin-web/src/views/stock/accessStock/outbound/edit.vue
+++ b/admin-web/src/views/stock/accessStock/outbound/edit.vue
@@ -5,7 +5,7 @@
<el-row :gutter="24" class="headerHeight">
<el-col :span="12">
<el-form-item label="鍑哄簱浠撳簱" prop="warehouseId">
- <el-select v-model="formData.warehouseId" placeholder="璇烽�夋嫨" style="width: 100%">
+ <el-select v-model="formData.warehouseId" placeholder="璇烽�夋嫨" clearable style="width: 100%">
<el-option
v-for="item in warehouseOptions"
:key="item.id"
@@ -20,6 +20,7 @@
<el-date-picker
v-model="formData.dealTime"
type="datetime"
+ clearable
value="yyyy-MM-dd HH:mm:ss"
value-format="yyyyMMddHHmmss"
placeholder="璇烽�夋嫨鏃ユ湡"
@@ -31,7 +32,7 @@
</el-row>
<el-row :gutter="24" class="headerHeight">
<el-col :span="24">
- <el-form-item label="鍑哄簱鎵嬬画" prop="procureDoc">
+ <el-form-item label="鍑哄簱鎵嬬画" prop="doc">
<upload ref="uploadRef" :settings="uploadSettings" @on-change="uploadChange"></upload>
</el-form-item>
</el-col>
@@ -41,7 +42,7 @@
<el-col :span="12">
<el-form-item
label="鐗╁搧鍒嗙被"
- :prop="`goods[${goodsIndex}].baseCategoryIds`"
+ :prop="`goods.${goodsIndex}.baseCategoryId`"
:rules="{
required: true,
message: '璇烽�夋嫨',
@@ -49,9 +50,13 @@
}"
>
<el-cascader
- v-model="goodsItem.baseCategoryIds"
+ v-model="goodsItem.baseCategoryId"
:options="categoryOptions"
- :props="{ value: 'id' }"
+ placeholder="璇烽�夋嫨鐗╁搧鍒嗙被"
+ :props="{ value: 'id',emitPath: false }"
+ :show-all-levels="false"
+ filterable
+ clearable
@change="categoryChange($event, goodsIndex)"
style="width: 100%"
></el-cascader>
@@ -60,13 +65,14 @@
<el-col :span="12">
<el-form-item
label="鐗╁搧鍚嶇О"
- :prop="`goods[${goodsIndex}].baseGoodsTemplateId`"
+ :prop="`goods.${goodsIndex}.baseGoodsTemplateId`"
:rules="rules.baseGoodsTemplateId"
>
<el-select
v-model="goodsItem.baseGoodsTemplateId"
- placeholder="璇峰厛鎷╃墿鍝佸垎绫�"
+ :placeholder="goodsItem.baseCategoryId?'璇烽�夋嫨鐗╁搧':'璇峰厛閫夋嫨鐗╁搧鍒嗙被'"
filterable
+ clearable
:disabled="!goodsItem.baseCategoryId"
style="width: 100%"
@change="goodsTemplateChange($event, goodsIndex)"
@@ -85,20 +91,22 @@
<el-col :span="12">
<el-form-item
label="瑙勬牸鍨嬪彿"
- :prop="`goods[${goodsIndex}].modelsIds`"
+ :prop="`goods.${goodsIndex}.modelsIds`"
:rules="{
required: true,
- message: '璇烽�夋嫨',
+ message: '璇烽�夋嫨瑙勬牸鍨嬪彿',
trigger: 'change',
}"
>
<el-select
v-model="goodsItem.modelsIds"
multiple
- placeholder="璇峰厛鎷╃墿鍝佸悕绉�"
+ clearable
+ :placeholder="goodsItem.baseCategoryId?'璇烽�夋嫨瑙勬牸鍨嬪彿':'璇峰厛閫夋嫨鐗╁搧鍚嶇О'"
:disabled="!goodsItem.baseCategoryId"
@change="modelChange($event, goodsIndex)"
@remove-tag="modelRemoveTag($event, goodsIndex)"
+ @clear="modelRemoveTag(-1, goodsIndex)"
style="width: 100%"
>
<el-option
@@ -131,8 +139,7 @@
<template slot-scope="scope">
<el-form-item
label-width="0"
- style="margin-bottom: 0"
- :prop="`goods[${goodsIndex}].models[${scope.$index}].counts`"
+ :prop="`goods.${goodsIndex}.models.${scope.$index}.counts`"
:rules="rules.counts"
>
<el-input
@@ -213,7 +220,7 @@
formData: {
warehouseId: '', // 鍑哄簱浠撳簱id
dealTime: '', // 鍑哄簱鏃堕棿
- procureDoc: '',
+ doc: '',
goods: [],
},
goodsItem: {
@@ -233,13 +240,12 @@
unit: null, //鍗曚綅
},
rules: {
- warehouseId: [{ required: true, message: '璇烽�夋嫨', trigger: 'change' }],
- dealTime: [{ required: true, message: '璇烽�夋嫨', trigger: 'change' }],
- buyType: [{ required: true, message: '璇烽�夋嫨', trigger: 'change' }],
-
- baseCategoryIds: [{ required: true, message: '璇烽�夋嫨', trigger: 'change' }],
- baseGoodsTemplateId: [{ validator: checkGoodsTemplateId, trigger: ['blur', 'change'] }],
- modelsIds: [{ required: true, message: '璇烽�夋嫨', trigger: 'change' }],
+ warehouseId: [{ required: true, message: '璇烽�夋嫨浠撳簱', trigger: 'change' }],
+ dealTime: [{ required: true, message: '璇烽�夋嫨鏃堕棿', trigger: 'change' }],
+ doc: [{required: true, message: '璇蜂笂浼犲鎵规墜缁�', trigger: 'change'}],
+ baseCategoryId: [{ required: true, message: '璇烽�夋嫨鐗╁搧鍒嗙被', trigger: 'change' }],
+ baseGoodsTemplateId: [{ required: true, message: '璇烽�夋嫨鐗╁搧', trigger: 'change' },{ validator: checkGoodsTemplateId, trigger: ['blur', 'change'] }],
+ modelsIds: [{ required: true, message: '璇烽�夋嫨瑙勬牸鍨嬪彿', trigger: 'change' }],
counts: [{ required: true, message: '璇疯緭鍏�', trigger: 'change' }],
},
@@ -247,7 +253,6 @@
title: '涓婁紶',
max: 20, // 鏈�澶уぇ灏忥紝鍗曚綅M
num: 10, // 鏀寔涓婁紶鍥剧墖涓暟
- accept: '.jpg,.png', // 闄愬埗鏍煎紡
tip: '', // 鎻愮ず 榛樿锛歚鍙兘涓婁紶${this.defaultSettings.num}涓�${this.defaultSettings.accept}鏂囦欢锛屼笖涓嶈秴杩�${this.defaultSettings.max}kb`
uploadUrl: getUploadUrl(), // 涓婁紶璺緞
multiple: true, // 鏄惁鏀寔鎵归噺涓婁紶
@@ -304,7 +309,7 @@
// 鑾峰彇鐗╁搧鍚嶇О鍒楄〃
async getgoodsTemplate(id, index) {
- await goodsTemplate({ categoryId: id || '' }).then((res) => {
+ await goodsTemplate({ agencyId: this.userInfo.tenantId, categoryId: id || '' }).then((res) => {
if (index || index == 0) {
this.$set(this.formData.goods[index], 'goodsOptions', res);
} else {
@@ -350,10 +355,8 @@
this.formData.goods[index].modelsOptions = [];
this.formData.goods[index].modelsIds = [];
this.formData.goods[index].models = [];
-
- this.formData.goods[index].baseCategoryId = e[e.length - 1];
// 鏍规嵁閫変腑鍒嗙被璇锋眰鐗╁搧鍚嶇О鍒楄〃
- this.getgoodsTemplate(e[e.length - 1], index);
+ this.getgoodsTemplate(e, index);
},
// 鐗╁搧鍚嶇О鍒楄〃閫夋嫨
@@ -390,6 +393,10 @@
// 瑙勬牸鍨嬪彿绉婚櫎
modelRemoveTag(e, index) {
+ if(e===-1){
+ this.formData.goods[index].models = []
+ return
+ }
let arr = this.formData.goods[index].models;
let delIndex = arr.findIndex((v) => v.baseGoodsModelsId == e);
this.formData.goods[index].models.splice(delIndex, 1);
@@ -398,7 +405,7 @@
// 涓婁紶
uploadChange() {
let arr = this.$refs.uploadRef.fileList;
- this.formData.procureDoc = JSON.stringify(arr);
+ this.formData.doc = JSON.stringify(arr);
},
// 鐐瑰嚮鏂板鐗╁搧
diff --git a/admin-web/src/views/stock/index.scss b/admin-web/src/views/stock/index.scss
index 9cd1dc6..324f67b 100644
--- a/admin-web/src/views/stock/index.scss
+++ b/admin-web/src/views/stock/index.scss
@@ -187,12 +187,13 @@
cursor: pointer;
.img {
width: 100%;
+ height: 100%;
+ object-fit: cover;
}
}
.goods-card {
position: relative;
- background: #f6f6f6;
padding: 20px;
box-sizing: border-box;
border-radius: 4px;
diff --git a/admin-web/src/views/stock/ledger/inventoryAlert/edit.vue b/admin-web/src/views/stock/ledger/inventoryAlert/edit.vue
index 37e396f..acbd321 100644
--- a/admin-web/src/views/stock/ledger/inventoryAlert/edit.vue
+++ b/admin-web/src/views/stock/ledger/inventoryAlert/edit.vue
@@ -1,28 +1,31 @@
<template>
- <win-md :title="`${setting.title}棰勮璁剧疆`" @close="close" :width="'800px'">
+ <win-md :title="`${setting.title}棰勮璁剧疆`" @close="close" :width="'800px'" :loading="loading">
<el-form ref="ruleForm" :model="formData" :rules="rules" class="demo-ruleForm" label-width="100px">
<el-row :gutter="24">
<el-col :span="12">
- <el-form-item label="鍏ュ簱浠撳簱" prop="baseWarehouseId">
+ <el-form-item label="棰勮浠撳簱" prop="baseWarehouseId">
<el-select
- v-model="formData.baseWarehouseId"
- placeholder="璇烽�夋嫨"
- style="width: 100%"
- :disabled="type == 'edit'"
+ v-model="formData.baseWarehouseId"
+ placeholder="璇烽�夋嫨棰勮浠撳簱"
+ style="width: 100%"
+ :disabled="type == 'edit'"
>
- <el-option v-for="item in warehouses" :key="item.id" :label="item.warehouseName" :value="item.id" />
+ <el-option v-for="item in warehouses" :key="item.id" :label="item.warehouseName" :value="item.id"/>
</el-select>
</el-form-item>
</el-col>
<el-col :span="12">
- <el-form-item label="鐗╁搧鍒嗙被" prop="baseCategoryIds">
+ <el-form-item label="鐗╁搧鍒嗙被" prop="baseCategoryId">
<el-cascader
- v-model="formData.baseCategoryIds"
- :options="categoryOptions"
- :props="{ value: 'id' }"
- @change="categoryChange"
- style="width: 100%"
- :disabled="type == 'edit'"
+ v-model="formData.baseCategoryId"
+ :options="categoryOptions"
+ :props="{ value: 'id',emitPath: false }"
+ :show-all-levels="false"
+ filterable
+ clearable
+ @change="categoryChange"
+ style="width: 100%"
+ :disabled="type == 'edit'"
></el-cascader>
</el-form-item>
</el-col>
@@ -31,18 +34,19 @@
<el-col :span="12">
<el-form-item label="鐗╁搧鍚嶇О" prop="baseGoodsTemplateId">
<el-select
- :value="formData.baseGoodsTemplateId"
- placeholder="璇峰厛鎷╃墿鍝佸垎绫�"
- filterable
- :disabled="!formData.baseCategoryId || type == 'edit'"
- @change="goodsTemplateChange"
- style="width: 100%"
+ :value="formData.baseGoodsTemplateId"
+ :placeholder="formData.baseCategoryId?'璇烽�夋嫨鐗╁搧':'璇峰厛閫夋嫨鐗╁搧鍒嗙被'"
+ filterable
+ clearable
+ :disabled="!formData.baseCategoryId || type == 'edit'"
+ @change="goodsTemplateChange"
+ style="width: 100%"
>
<el-option
- v-for="item in goodsTemplatelOptions"
- :key="item.id"
- :label="item.goodsName"
- :value="item.id"
+ v-for="item in goodsTemplatelOptions"
+ :key="item.id"
+ :label="item.goodsName"
+ :value="item.id"
/>
</el-select>
</el-form-item>
@@ -50,15 +54,17 @@
<el-col :span="12">
<el-form-item label="瑙勬牸鍨嬪彿" prop="modelsIds">
<el-select
- v-model="formData.modelsIds"
- multiple
- :disabled="!formData.baseGoodsTemplateId || type == 'edit'"
- placeholder="璇峰厛鎷╃墿鍝佸悕绉�"
- @change="modelChange"
- @remove-tag="modelRemoveTag"
- style="width: 100%"
+ v-model="formData.modelsIds"
+ multiple
+ clearable
+ :disabled="!formData.baseGoodsTemplateId || type == 'edit'"
+ :placeholder="formData.baseCategoryId?'璇烽�夋嫨瑙勬牸鍨嬪彿':'璇峰厛閫夋嫨鐗╁搧鍚嶇О'"
+ @change="modelChange"
+ @remove-tag="modelRemoveTag"
+ @clear="modelRemoveTag(-1)"
+ style="width: 100%"
>
- <el-option v-for="item in modelsOptions" :key="item.id" :label="item.modelName" :value="item.id" />
+ <el-option v-for="item in modelsOptions" :key="item.id" :label="item.modelName" :value="item.id"/>
</el-select>
</el-form-item>
</el-col>
@@ -84,10 +90,10 @@
<el-table-column prop="lowerLimit" label="淇濆簳搴撳瓨" align="center">
<template slot-scope="scope">
<el-form-item
- v-if="scope.row.lowerLimit || scope.row.upperLimit"
- label-width="0"
- :prop="`models[${scope.$index}].lowerLimit`"
- :rules="rules.lowerLimit"
+ v-if="scope.row.lowerLimit || scope.row.upperLimit"
+ label-width="0"
+ :prop="`models[${scope.$index}].lowerLimit`"
+ :rules="rules.lowerLimit"
>
<el-input v-model.number="scope.row.lowerLimit"></el-input>
</el-form-item>
@@ -97,10 +103,10 @@
<el-table-column prop="upperLimit" label="灏侀《搴撳瓨" align="center">
<template slot-scope="scope">
<el-form-item
- v-if="scope.row.lowerLimit || scope.row.upperLimit"
- label-width="0"
- :prop="`models[${scope.$index}].upperLimit`"
- :rules="rules.upperLimit"
+ v-if="scope.row.lowerLimit || scope.row.upperLimit"
+ label-width="0"
+ :prop="`models[${scope.$index}].upperLimit`"
+ :rules="rules.upperLimit"
>
<el-input v-model.number="scope.row.upperLimit"></el-input>
</el-form-item>
@@ -110,8 +116,8 @@
</el-table>
</el-form>
<div slot="footer" align="center" class="dialog-footer">
- <my-button name="鍙栨秷" site="form" @click="close" />
- <my-button name="淇濆瓨" site="form" @click="save" />
+ <my-button name="鍙栨秷" site="form" @click="close"/>
+ <my-button name="淇濆瓨" site="form" @click="save"/>
</div>
</win-md>
</template>
@@ -131,15 +137,17 @@
import {findParentIds} from '@/utils/index';
export default {
- components: { winMd, myButton },
+ components: {winMd, myButton},
props: {
setting: {
type: Object,
- default: () => {},
+ default: () => {
+ },
},
},
data() {
return {
+ loading: true,
type: '',
warehouses: [], // 鍏ュ簱浠撳簱鍒楄〃
agencyOptions: [], // 璋冩嫧鏈烘瀯
@@ -156,16 +164,17 @@
models: [],
},
rules: {
- baseCategoryIds: [{ required: true, message: '璇烽�夋嫨', trigger: 'blur' }],
- baseGoodsTemplateId: [{ required: true, message: '璇烽�夋嫨', trigger: 'blur' }],
- modelsIds: [{ required: true, message: '璇烽�夋嫨', trigger: 'blur' }],
+ baseWarehouseId: [{required: true, message: '璇烽�夋嫨棰勮浠撳簱', trigger: 'change'}],
+ baseCategoryId: [{required: true, message: '璇烽�夋嫨鐗╁搧鍒嗙被', trigger: 'change'}],
+ baseGoodsTemplateId: [{required: true, message: '璇烽�夋嫨鐗╁搧', trigger: 'change'}],
+ modelsIds: [{required: true, message: '璇烽�夋嫨瑙勬牸鍨嬪彿', trigger: 'change'}],
lowerLimit: [
- { required: true, message: '璇疯緭鍏�', trigger: 'blur' },
- { type: 'number', message: '璇疯緭鍏ユ暟瀛楀��', trigger: 'blur' },
+ {required: true, message: '璇疯緭鍏�', trigger: 'blur'},
+ {type: 'number', message: '璇疯緭鍏ユ暟瀛楀��', trigger: 'blur'},
],
upperLimit: [
- { required: true, message: '璇疯緭鍏�', trigger: 'blur' },
- { type: 'number', message: '璇疯緭鍏ユ暟瀛楀��', trigger: 'blur' },
+ {required: true, message: '璇疯緭鍏�', trigger: 'blur'},
+ {type: 'number', message: '璇疯緭鍏ユ暟瀛楀��', trigger: 'blur'},
],
},
};
@@ -178,13 +187,14 @@
},
methods: {
async init() {
+ await this.getWarehouseList();
+ await this.getCategoryTree();
if (this.setting.id) {
this.type = 'edit';
- const detail = await warningConfigGetById({ id: this.setting.id });
- await this.getCategoryTree();
+ const detail = await warningConfigGetById({id: this.setting.id});
this.formData = Object.assign({}, detail);
// 鍒嗙被鍙嶆樉
- let res = await queryGoodsModelInfo({ baseGoodsModelsId: this.formData.baseGoodsModelsId });
+ let res = await queryGoodsModelInfo({baseGoodsModelsId: this.formData.baseGoodsModelsId});
this.formData.baseCategoryId = res[0].categoryId;
this.formData.baseCategoryIds = findParentIds(this.categoryOptions, this.formData.baseCategoryId);
// 鐗╁搧鍚嶇О鍙嶆樉
@@ -193,24 +203,22 @@
this.getgoodsModel(this.formData.baseGoodsTemplateId);
this.formData.modelsIds = [this.formData.baseGoodsModelsId];
this.getWarehouseList();
- } else {
- this.getWarehouseList();
- this.getCategoryTree();
}
+ this.loading = false
},
// 鑾峰彇鍏ュ簱浠撳簱鍒楄〃
getWarehouseList() {
- selectTenantWarehouse({ agencyId: this.userInfo.tenantId })
- .then((res) => {
- this.warehouses = res;
- if (this.warehouses.length && !this.formData.baseWarehouseId) {
- // 榛樿閫変腑绗竴涓粨搴�
- this.formData.baseWarehouseId = this.warehouses[0].id;
- }
- })
- .catch((err) => {
- console.log('err', err);
- });
+ selectTenantWarehouse({agencyId: this.userInfo.tenantId})
+ .then((res) => {
+ this.warehouses = res;
+ if (this.warehouses.length && !this.formData.baseWarehouseId) {
+ // 榛樿閫変腑绗竴涓粨搴�
+ this.formData.baseWarehouseId = this.warehouses[0].id;
+ }
+ })
+ .catch((err) => {
+ console.log('err', err);
+ });
},
getCategoryTree() {
@@ -224,14 +232,14 @@
// 鑾峰彇鐗╁搧鍚嶇О鍒楄〃
getgoodsTemplate(id) {
- goodsTemplate({ categoryId: id || '', agencyId: this.userInfo.tenantId }).then((res) => {
+ goodsTemplate({categoryId: id || '', agencyId: this.userInfo.tenantId}).then((res) => {
this.goodsTemplatelOptions = res;
});
},
// 瑙勬牸鍨嬪彿
getgoodsModel(id) {
- goodsModel({ goodsTemplatesId: id || '' }).then((res) => {
+ goodsModel({goodsTemplatesId: id || ''}).then((res) => {
this.modelsOptions = res;
});
},
@@ -247,23 +255,19 @@
// 鐗╁搧鍒嗙被閫夋嫨
categoryChange(e) {
- if (!e) return;
this.goodsTemplatelOptions = [];
this.modelsOptions = [];
this.formData.baseGoodsTemplateId = '';
this.formData.modelsIds = [];
this.formData.models = [];
-
- this.formData.baseCategoryId = e[e.length - 1];
// 鏍规嵁閫変腑鍒嗙被璇锋眰鐗╁搧鍚嶇О鍒楄〃
- this.getgoodsTemplate(this.formData.baseCategoryId);
+ this.getgoodsTemplate(e);
},
// 鐗╁搧鍚嶇О鍒楄〃閫夋嫨
goodsTemplateChange(e) {
this.formData.modelsIds = [];
this.formData.models = [];
-
this.formData.baseGoodsTemplateId = e;
// 鏍规嵁閫変腑鐗╁搧鍚嶇Оid鑾峰彇瑙勬牸鍨嬪彿鍒楄〃
this.getgoodsModel(e);
@@ -286,24 +290,31 @@
let str = JSON.stringify(arr);
e.forEach((item, index) => {
if (str && !str.includes(item)) {
- arr.push({ baseGoodsModelsId: item, lowerLimit: null, upperLimit: null });
+ arr.push({baseGoodsModelsId: item, lowerLimit: null, upperLimit: null});
}
});
},
// 瑙勬牸鍨嬪彿绉婚櫎
modelRemoveTag(e) {
+ if (e === -1) {
+ this.formData.models = []
+ return
+ }
let delIndex = this.formData.models.findIndex((v) => v.baseGoodsModelsId == e);
this.formData.models.splice(delIndex, 1);
},
- getEditInfo(id) {},
+ getEditInfo(id) {
+ },
close() {
this.$emit('close');
},
save() {
this.$refs.ruleForm.validate((valid) => {
if (valid) {
+ if (this.loading) return
+ this.loading = true;
if (this.setting.id) {
// 缂栬緫鎺ュ彛
const params = {
@@ -312,9 +323,13 @@
upperLimit: this.formData.upperLimit,
};
warningConfigUpd(params).then((res) => {
+ this.loading = false;
this.$message.success('淇濆瓨鎴愬姛锛�');
this.close();
this.$emit('search');
+ }).catch((err) => {
+ this.loading = false;
+ this.$message.error('淇濆瓨澶辫触');
});
} else {
const params = {
@@ -324,9 +339,13 @@
modelConfigStr: JSON.stringify(this.formData.models),
};
warningConfigAdd(params).then((res) => {
+ this.loading = false;
this.$message.success('淇濆瓨鎴愬姛锛�');
this.close();
this.$emit('search');
+ }).catch((err) => {
+ this.loading = false;
+ this.$message.error('淇濆瓨澶辫触');
});
}
} else {
diff --git a/admin-web/src/views/stock/procure/purchaseOrder/edit.vue b/admin-web/src/views/stock/procure/purchaseOrder/edit.vue
index e1482dc..b934681 100644
--- a/admin-web/src/views/stock/procure/purchaseOrder/edit.vue
+++ b/admin-web/src/views/stock/procure/purchaseOrder/edit.vue
@@ -5,7 +5,7 @@
<el-row :gutter="24" class="headerHeight">
<el-col :span="12">
<el-form-item label="鍏ュ簱浠撳簱" prop="warehouseId">
- <el-select v-model="formData.warehouseId" placeholder="璇烽�夋嫨" style="width: 100%">
+ <el-select v-model="formData.warehouseId" placeholder="璇烽�夋嫨" clearable style="width: 100%">
<el-option v-for="item in warehouses" :key="item.id" :label="item.warehouseName" :value="item.id"/>
</el-select>
</el-form-item>
@@ -15,6 +15,7 @@
<el-date-picker
v-model="formData.procureTime"
type="datetime"
+ clearable
value="yyyy-MM-dd HH:mm:ss"
value-format="yyyyMMddHHmmss"
placeholder="璇烽�夋嫨鏃ユ湡"
@@ -45,17 +46,20 @@
<el-col :span="12">
<el-form-item
label="鐗╁搧鍒嗙被"
- :prop="`procureGoods[${goodsIndex}].baseCategoryIds`"
+ :prop="`procureGoods.${goodsIndex}.baseCategoryId`"
:rules="{
required: true,
- message: '璇烽�夋嫨',
+ message: '璇烽�夋嫨鐗╁搧鍒嗙被',
trigger: 'change',
}"
>
<el-cascader
- v-model="goodsItem.baseCategoryIds"
+ v-model="goodsItem.baseCategoryId"
:options="categoryOptions"
- :props="{ value: 'id' }"
+ :props="{ value: 'id',emitPath: false }"
+ :show-all-levels="false"
+ filterable
+ clearable
@change="categoryChange($event, goodsIndex)"
style="width: 100%"
></el-cascader>
@@ -64,13 +68,14 @@
<el-col :span="12">
<el-form-item
label="鐗╁搧鍚嶇О"
- :prop="`procureGoods[${goodsIndex}].baseGoodsTemplateId`"
+ :prop="`procureGoods.${goodsIndex}.baseGoodsTemplateId`"
:rules="rules.baseGoodsTemplateId"
>
<el-select
v-model="goodsItem.baseGoodsTemplateId"
- placeholder="璇峰厛鎷╃墿鍝佸垎绫�"
+ :placeholder="goodsItem.baseCategoryId?'璇烽�夋嫨鐗╁搧':'璇峰厛閫夋嫨鐗╁搧鍒嗙被'"
filterable
+ clearable
:disabled="!goodsItem.baseCategoryId"
style="width: 100%"
@change="goodsTemplateChange($event, goodsIndex)"
@@ -89,20 +94,22 @@
<el-col :span="12">
<el-form-item
label="瑙勬牸鍨嬪彿"
- :prop="`procureGoods[${goodsIndex}].modelsIds`"
+ :prop="`procureGoods.${goodsIndex}.modelsIds`"
:rules="{
required: true,
- message: '璇烽�夋嫨',
+ message: '璇烽�夋嫨瑙勬牸鍨嬪彿',
trigger: 'change',
}"
>
<el-select
v-model="goodsItem.modelsIds"
multiple
- placeholder="璇峰厛鎷╃墿鍝佸悕绉�"
+ clearable
+ :placeholder="goodsItem.baseCategoryId?'璇烽�夋嫨瑙勬牸鍨嬪彿':'璇峰厛閫夋嫨鐗╁搧鍚嶇О'"
:disabled="!goodsItem.baseCategoryId"
@change="modelChange($event, goodsIndex)"
@remove-tag="modelRemoveTag($event, goodsIndex)"
+ @clear="modelRemoveTag(-1, goodsIndex)"
style="width: 100%"
>
<el-option
@@ -305,7 +312,7 @@
procureDoc: [{required: true, message: '璇蜂笂浼�', trigger: 'change'}],
baseCategoryIds: [{required: true, message: '璇烽�夋嫨', trigger: 'change'}],
- baseGoodsTemplateId: [{validator: checkGoodsTemplateId, trigger: ['blur', 'change']}],
+ baseGoodsTemplateId: [{required: true, message: '璇烽�夋嫨', trigger: 'change'},{validator: checkGoodsTemplateId, trigger: ['blur', 'change']}],
modelsIds: [{required: true, message: '璇烽�夋嫨', trigger: 'change'}],
priceYuan: [{validator: checkPrice, trigger: 'blur'}],
counts: [{validator: checkCounts, trigger: 'blur'}],
@@ -332,6 +339,8 @@
methods: {
async init() {
await this.getWarehouseList();
+ await this.getgoodsTemplate();
+ await this.getgoodsModel();
// 鑾峰彇鐗╁搧鍒嗙被鍒楄〃
const treeRes = await getTree();
@@ -359,9 +368,6 @@
});
return item;
});
- } else {
- await this.getgoodsTemplate();
- await this.getgoodsModel();
}
this.loading = false;
},
@@ -397,7 +403,7 @@
// 鑾峰彇鐗╁搧鍚嶇О鍒楄〃
async getgoodsTemplate(id, index) {
- await goodsTemplate({categoryId: id || ''}).then((res) => {
+ await goodsTemplate({agencyId: this.userInfo.tenantId, categoryId: id || ''}).then((res) => {
if (index || index == 0) {
this.$set(this.formData.procureGoods[index], 'goodsOptions', res);
} else {
@@ -444,9 +450,8 @@
this.formData.procureGoods[index].modelsIds = [];
this.formData.procureGoods[index].models = [];
- this.formData.procureGoods[index].baseCategoryId = e[e.length - 1];
// 鏍规嵁閫変腑鍒嗙被璇锋眰鐗╁搧鍚嶇О鍒楄〃
- this.getgoodsTemplate(e[e.length - 1], index);
+ this.getgoodsTemplate(e, index);
},
// 鐗╁搧鍚嶇О鍒楄〃
@@ -475,6 +480,10 @@
// 瑙勬牸鍨嬪彿绉婚櫎
modelRemoveTag(e, index) {
+ if(e===-1){
+ this.formData.procureGoods[index].models = []
+ return
+ }
let arr = this.formData.procureGoods[index].models;
let delIndex = arr.findIndex((v) => v.baseGoodsModelsId == e);
this.formData.procureGoods[index].models.splice(delIndex, 1);
diff --git a/admin-web/src/views/stock/scrap/itemScrapping/detail.vue b/admin-web/src/views/stock/scrap/itemScrapping/detail.vue
index 7806613..5b81842 100644
--- a/admin-web/src/views/stock/scrap/itemScrapping/detail.vue
+++ b/admin-web/src/views/stock/scrap/itemScrapping/detail.vue
@@ -1,5 +1,5 @@
<template>
- <win-md class="stock-detail" :title="setting.title" @close="close" :width="'800px'">
+ <win-md class="stock-detail" :title="setting.title" @close="close" :width="'800px'" :loading="loading">
<el-row :gutter="20">
<el-col :span="8">
<span>鎶ュ簾鍗曞彿锛�</span>
@@ -85,6 +85,7 @@
},
data() {
return {
+ loading: true,
scrapReasonOptions: [],
fileList: [],
detail: {
@@ -110,6 +111,7 @@
created() {
scrappedDetail({ id: this.setting.id }).then((res) => {
this.detail = res;
+ this.loading = false
this.fileList = this.detail.uploadFiles ? JSON.parse(this.detail.uploadFiles) : [];
this.$nextTick(() => {
this.initPreviewImg();
diff --git a/admin-web/src/views/stock/scrap/itemScrapping/edit.vue b/admin-web/src/views/stock/scrap/itemScrapping/edit.vue
index 98b1f00..5fda39f 100644
--- a/admin-web/src/views/stock/scrap/itemScrapping/edit.vue
+++ b/admin-web/src/views/stock/scrap/itemScrapping/edit.vue
@@ -1,6 +1,6 @@
<template>
<win-md class="stock-edit" :title="`${setting.title}鎶ュ簾`" @close="close" :width="'800px'">
- <el-form class="form" ref="ruleForm" :model="formData" :rules="rules" label-width="120px">
+ <el-form v-loading="loading" class="form" ref="ruleForm" :model="formData" :rules="rules" label-width="120px">
<div class="main-w">
<el-row :gutter="24" class="headerHeight">
<el-col :span="12">
@@ -26,6 +26,7 @@
<el-form-item label="鎶ュ簾鏃堕棿" prop="dealTime">
<el-date-picker
v-model="formData.dealTime"
+ clearable
type="datetime"
value="yyyy-MM-dd HH:mm:ss"
value-format="yyyyMMddHHmmss"
@@ -48,17 +49,20 @@
<el-col :span="12">
<el-form-item
label="鐗╁搧鍒嗙被"
- :prop="`scrappedGoodsInfo[${goodsIndex}].baseCategoryIds`"
+ :prop="`scrappedGoodsInfo.${goodsIndex}.baseCategoryId`"
:rules="{
required: true,
- message: '璇烽�夋嫨',
+ message: '璇烽�夋嫨鐗╁搧鍒嗙被',
trigger: 'change',
}"
>
<el-cascader
- v-model="goodsItem.baseCategoryIds"
+ v-model="goodsItem.baseCategoryId"
:options="categoryOptions"
- :props="{ value: 'id' }"
+ :props="{ value: 'id',emitPath: false }"
+ :show-all-levels="false"
+ filterable
+ clearable
@change="categoryChange($event, goodsIndex)"
style="width: 100%"
></el-cascader>
@@ -67,13 +71,14 @@
<el-col :span="12">
<el-form-item
label="鐗╁搧鍚嶇О"
- :prop="`scrappedGoodsInfo[${goodsIndex}].baseGoodsTemplateId`"
+ :prop="`scrappedGoodsInfo.${goodsIndex}.baseGoodsTemplateId`"
:rules="rules.baseGoodsTemplateId"
>
<el-select
v-model="goodsItem.baseGoodsTemplateId"
- placeholder="璇峰厛鎷╃墿鍝佸垎绫�"
+ :placeholder="goodsItem.baseCategoryId?'璇烽�夋嫨鐗╁搧':'璇峰厛閫夋嫨鐗╁搧鍒嗙被'"
filterable
+ clearable
:disabled="!goodsItem.baseCategoryId"
style="width: 100%"
@change="goodsTemplateChange($event, goodsIndex)"
@@ -95,17 +100,19 @@
:prop="`scrappedGoodsInfo[${goodsIndex}].modelsIds`"
:rules="{
required: true,
- message: '璇烽�夋嫨',
+ message: '璇烽�夋嫨瑙勬牸鍨嬪彿',
trigger: 'change',
}"
>
<el-select
v-model="goodsItem.modelsIds"
multiple
- placeholder="璇峰厛鎷╃墿鍝佸悕绉�"
+ clearable
+ :placeholder="goodsItem.baseCategoryId?'璇烽�夋嫨瑙勬牸鍨嬪彿':'璇峰厛閫夋嫨鐗╁搧鍚嶇О'"
:disabled="!goodsItem.baseCategoryId"
@change="modelChange($event, goodsIndex)"
@remove-tag="modelRemoveTag($event, goodsIndex)"
+ @clear="modelRemoveTag(-1, goodsIndex)"
style="width: 100%"
>
<el-option
@@ -209,7 +216,7 @@
callback();
};
return {
- loading: false,
+ loading: true,
fileList: [],
warehouses: [], // 鎶ュ簾浠撳簱鍒楄〃
categoryOptions: [], // 鐗╁搧鍒嗙被鍒楄〃
@@ -236,8 +243,8 @@
dealTime: [{ required: true, message: '璇烽�夋嫨', trigger: 'change' }],
buyType: [{ required: true, message: '璇烽�夋嫨', trigger: 'change' }],
uploadFiles: [{ required: true, message: '璇蜂笂浼�', trigger: 'change' }],
- baseCategoryIds: [{ required: true, message: '璇烽�夋嫨', trigger: 'change' }],
- baseGoodsTemplateId: [{ validator: checkGoodsTemplateId, trigger: ['blur', 'change'] }],
+ baseCategoryId: [{ required: true, message: '璇烽�夋嫨', trigger: 'change' }],
+ baseGoodsTemplateId: [{ required: true, message: '璇烽�夋嫨', trigger: 'change' },{ validator: checkGoodsTemplateId, trigger: ['blur', 'change'] }],
modelsIds: [{ required: true, message: '璇烽�夋嫨', trigger: 'change' }],
},
@@ -261,9 +268,7 @@
},
methods: {
async init() {
- this.getWarehouseList();
- this.getgoodsTemplate();
- this.getgoodsModel();
+ await this.getWarehouseList();
await this.getCategoryTree();
this.formData.scrappedGoodsInfo.push(JSON.parse(JSON.stringify(this.goodsItem)));
this.formData.operatorId = this.userInfo.id;
@@ -271,6 +276,9 @@
this.formData.agencyId = this.userInfo.tenantId;
this.formData.agencyName = this.userInfo.tenantName;
this.formData.warehouseType = 0;
+ this.getgoodsTemplate();
+ this.getgoodsModel();
+ this.loading = false
getDicts('SCRAP_REASON').then((res) => {
this.scrapReasonOptions = res;
});
@@ -282,8 +290,8 @@
},
// 鑾峰彇鎶ュ簾浠撳簱鍒楄〃
- getWarehouseList() {
- selectTenantWarehouse({ agencyId: this.userInfo.tenantId })
+ async getWarehouseList() {
+ await selectTenantWarehouse({ agencyId: this.userInfo.tenantId })
.then((res) => {
this.warehouses = res;
if (this.warehouses.length && !this.formData.warehouseId) {
@@ -309,7 +317,7 @@
// 鑾峰彇鐗╁搧鍚嶇О鍒楄〃
getgoodsTemplate(id, index) {
- goodsTemplate({ categoryId: id || '' }).then((res) => {
+ goodsTemplate({ agencyId: this.userInfo.tenantId, categoryId: id || '' }).then((res) => {
if (index || index == 0) {
this.$set(this.formData.scrappedGoodsInfo[index], 'goodsOptions', res);
} else {
@@ -355,10 +363,8 @@
this.formData.scrappedGoodsInfo[index].modelsOptions = [];
this.formData.scrappedGoodsInfo[index].modelsIds = [];
this.formData.scrappedGoodsInfo[index].scrappedGoodsList = [];
-
- this.formData.scrappedGoodsInfo[index].baseCategoryId = e[e.length - 1];
// 鏍规嵁閫変腑鍒嗙被璇锋眰鐗╁搧鍚嶇О鍒楄〃
- this.getgoodsTemplate(e[e.length - 1], index);
+ this.getgoodsTemplate(e, index);
},
// 鐗╁搧鍚嶇О鍒楄〃
@@ -394,6 +400,10 @@
// 瑙勬牸鍨嬪彿绉婚櫎
modelRemoveTag(e, index) {
+ if(e===-1){
+ this.formData.scrappedGoodsInfo[index].scrappedGoodsList = []
+ return
+ }
let arr = this.formData.scrappedGoodsInfo[index].scrappedGoodsList;
let delIndex = arr.findIndex((v) => v.baseGoodsModelsId == e);
this.formData.scrappedGoodsInfo[index].scrappedGoodsList.splice(delIndex, 1);
@@ -419,13 +429,17 @@
handleSubmit() {
this.$refs['ruleForm'].validate((valid) => {
if (valid) {
+ if (this.loading) return
+ this.loading = true;
scrappedAdd(this.formData)
.then((res) => {
+ this.loading = false;
this.$message.success('淇濆瓨鎴愬姛锛�');
this.close();
this.$emit('search');
})
.catch((err) => {
+ this.loading = false;
console.log('create err', err);
this.$message.error('淇濆瓨澶辫触');
});
diff --git a/admin-web/src/views/stock/transfer/transferApplication/detail.vue b/admin-web/src/views/stock/transfer/transferApplication/detail.vue
index aa1a128..f4c453a 100644
--- a/admin-web/src/views/stock/transfer/transferApplication/detail.vue
+++ b/admin-web/src/views/stock/transfer/transferApplication/detail.vue
@@ -1,76 +1,87 @@
<template>
<win-md class="stock-detail" :title="setting.title" @close="close" :width="'800px'" :loading="loading">
- <div v-loading="loading">
- <el-row :gutter="20">
- <el-col :span="8">
- <span>璋冩嫧鍗曞彿锛�</span>
- <span>{{ detail.businessFormCode }}</span>
- </el-col>
- <el-col :span="8">
- <span>璋冩嫧鏈烘瀯锛�</span>
- <span>{{ detail.outAgencyName }}</span>
- </el-col>
- <el-col :span="8">
- <span>鎺ユ敹鏈烘瀯锛�</span>
- <span>{{ detail.inAgencyName }}</span>
- </el-col>
- </el-row>
- <el-row :gutter="20" style="margin-top: 20px">
- <el-col :span="8">
- <span>鐢宠璋冩嫧鏃堕棿锛�</span>
- <span>{{ detail.createTime | formatTime }}</span>
- </el-col>
- <el-col :span="8">
- <span>鐘舵�侊細</span>
- <span>{{ getStatesLabel(detail.states) }}</span>
- </el-col>
- <el-col :span="8">
- <span>璋冩嫧鏃堕棿锛�</span>
- <span>{{ detail.outputTime | formatTime }}</span>
- </el-col>
- </el-row>
- <el-row v-if="fileList && fileList.length" :gutter="20" style="margin-top: 20px">
- <el-col class="img-row" :span="24">
- <span>璋冩嫧鎵嬬画鐓х墖锛�</span>
+
+ <el-row :gutter="20">
+ <el-col :span="8">
+ <span>璋冩嫧鍗曞彿锛�</span>
+ <span>{{ detail.businessFormCode }}</span>
+ </el-col>
+ <el-col :span="8">
+ <span>璋冩嫧鏈烘瀯锛�</span>
+ <span>{{ detail.outAgencyName }}</span>
+ </el-col>
+ <el-col :span="8">
+ <span>鎺ユ敹鏈烘瀯锛�</span>
+ <span>{{ detail.inAgencyName }}</span>
+ </el-col>
+ </el-row>
+ <el-row :gutter="20" style="margin-top: 20px">
+ <el-col :span="8">
+ <span>鐢宠璋冩嫧鏃堕棿锛�</span>
+ <span>{{ detail.createTime | formatTime }}</span>
+ </el-col>
+ <el-col :span="8">
+ <span>鐘舵�侊細</span>
+ <span>{{ getStatesLabel(detail.states) }}</span>
+ </el-col>
+ <el-col :span="8">
+ <span>璋冩嫧鏃堕棿锛�</span>
+ <span>{{ detail.outputTime | formatTime }}</span>
+ </el-col>
+ </el-row>
+ <el-row v-if="fileList && fileList.length" :gutter="20" style="margin-top: 20px">
+ <el-col class="img-row" :span="24">
+ <span>璋冩嫧鎵嬬画鐓х墖锛�</span>
<div class="img-box" v-for="(item, index) in fileList" :key="index" @click="handlePreview(item)">
- <img class="img" :src="getUrl(item.path)" alt="" />
+ <img class="img" :src="getUrl(item.path)" alt=""/>
</div>
+ </el-col>
+ </el-row>
+ <div class="goods-card" v-for="(goodsItem, goodsIndex) in detail.formTransferGoods" :key="goodsIndex">
+ <el-row :gutter="20">
+ <el-col :span="12">
+ <span>鐗╁搧鍒嗙被锛�</span>
+ <span>{{ goodsItem.categoryName }}</span>
+ </el-col>
+ <el-col :span="12">
+ <span>鐗╁搧鍚嶇О锛�</span>
+ <span>{{ goodsItem.goodsName }}</span>
</el-col>
</el-row>
- <div class="goods-card" v-for="(goodsItem, goodsIndex) in detail.formTransferGoods" :key="goodsIndex">
- <el-row :gutter="20">
- <el-col :span="12">
- <span>鐗╁搧鍒嗙被锛�</span>
- <span>{{ goodsItem.categoryName }}</span>
- </el-col>
- <el-col :span="12">
- <span>鐗╁搧鍚嶇О锛�</span>
- <span>{{ goodsItem.goodsName }}</span>
- </el-col>
- </el-row>
- <el-table :data="goodsItem.models" :stripe="true" style="margin-top: 20px">
- <el-table-column prop="baseGoodsModelsName" label="瑙勬牸鍨嬪彿" align="center">
- <template slot-scope="scope">
- {{ scope.row.baseGoodsModelsName }}
- </template>
- </el-table-column>
- <el-table-column label="鍗曚綅" align="center">
- <template slot-scope="scope">
- {{ scope.row.unit }}
- </template>
- </el-table-column>
- <el-table-column prop="counts" label="璋冩嫧鏁伴噺" align="center">
- <template slot-scope="scope">
- {{ scope.row.counts }}
- </template>
- </el-table-column>
- <el-table-column prop="price" label="閲戦" align="center">
- <template slot-scope="scope">
- {{ scope.row.price }}
- </template>
- </el-table-column>
- </el-table>
- </div>
+ <el-table :data="goodsItem.models" :stripe="true" style="margin-top: 20px">
+ <el-table-column prop="baseGoodsModelsName" label="瑙勬牸鍨嬪彿" align="center">
+ <template slot-scope="scope">
+ {{ scope.row.baseGoodsModelsName }}
+ </template>
+ </el-table-column>
+ <el-table-column label="鍗曚綅" align="center">
+ <template slot-scope="scope">
+ {{ scope.row.unit }}
+ </template>
+ </el-table-column>
+ <el-table-column prop="counts" label="璋冩嫧鏁伴噺" align="center">
+ <template slot-scope="scope">
+ {{ scope.row.counts }}
+ </template>
+ </el-table-column>
+ <el-table-column prop="price" label="閲戦" align="center">
+ <template slot-scope="scope">
+ {{ scope.row.price }}
+ </template>
+ </el-table-column>
+ </el-table>
+ </div>
+
+ <div id="uploadPreviewImages" style="display: none">
+ <span v-for="(src, index) in fileList" :key="index">
+ <img
+ v-if="checkImg(src.name)"
+ class="v-img"
+ :src="src.url"
+ :alt="src.name"
+ style="width: 100px; height: 100px"
+ />
+ </span>
</div>
</win-md>
</template>
@@ -79,21 +90,28 @@
import * as DateFormatter from '@/utils/DateFormatter';
import winMd from '@/components/win/win-md';
import transfer from '../../../mixins/transfer';
+import {getDownUrl} from "@/utils/base";
+import Viewer from 'viewerjs';
+import 'viewerjs/dist/viewer.css';
+
+let viewer = null;
+
export default {
mixins: [transfer],
- components: { winMd },
+ components: {winMd},
props: {
setting: {
type: Object,
- default: () => {},
+ default: () => {
+ },
},
},
data() {
return {
loading: true,
detail: {},
- fileList:[]
+ fileList: []
};
},
filters: {
@@ -103,13 +121,54 @@
},
},
created() {
- transferDetail({ id: this.setting.id }).then((res) => {
+ transferDetail({id: this.setting.id}).then((res) => {
this.detail = res;
this.fileList = this.detail.procureDoc ? JSON.parse(this.detail.procureDoc) : [];
this.loading = false;
+ this.$nextTick(() => {
+ this.initPreviewImg();
+ });
});
},
methods: {
+ initPreviewImg() {
+ if (viewer != null) {
+ viewer.destroy();
+ }
+ const ViewerDom = document.querySelector('#uploadPreviewImages');
+ viewer = new Viewer(ViewerDom, {});
+ },
+ handlePreview(file) {
+ if (!this.checkImg(file.name)) {
+ return false;
+ }
+ let index = 0;
+ for (let i = 0; i < this.fileList.length; i++) {
+ const f = this.fileList[i];
+ if (this.checkImg(f.name)) {
+ if (file.id == f.id) {
+ break;
+ }
+ index++;
+ }
+ }
+ viewer.view(index);
+ },
+ checkImg(name) {
+ const suffix = name.substring(name.lastIndexOf('.'), name.length);
+ const imgArray = ['.jpg', '.jpeg', '.png', '.bmp'];
+ if (imgArray.indexOf(suffix) < 0) {
+ return false;
+ }
+ return true;
+ },
+ getUrl(path) {
+ if (path.substr(0, 7).toLowerCase() == 'http://' || path.substr(0, 8).toLowerCase() == 'https://') {
+ return path;
+ } else {
+ return getDownUrl() + path;
+ }
+ },
close() {
this.$emit('close');
},
diff --git a/admin-web/src/views/stock/transfer/transferApplication/edit.vue b/admin-web/src/views/stock/transfer/transferApplication/edit.vue
index 94e6779..a61c829 100644
--- a/admin-web/src/views/stock/transfer/transferApplication/edit.vue
+++ b/admin-web/src/views/stock/transfer/transferApplication/edit.vue
@@ -1,6 +1,6 @@
<template>
<win-md class="stock-edit" title="璋冩嫧鐢宠" @close="close" :width="'800px'">
- <el-form class="form" ref="ruleForm" :model="formData" :rules="rules" label-width="120px">
+ <el-form v-loading="loading" class="form" ref="ruleForm" :model="formData" :rules="rules" label-width="120px">
<div class="main-w">
<el-row :gutter="24" class="headerHeight">
<el-col :span="12">
@@ -11,10 +11,11 @@
</el-form-item>
</el-col>
<el-col :span="12">
- <el-form-item label="璋冩嫧鏃堕棿" prop="createTime">
+ <el-form-item label="璋冩嫧鏃堕棿" clearable prop="createTime">
<el-date-picker
v-model="formData.createTime"
type="datetime"
+ clearable
value="yyyy-MM-dd HH:mm:ss"
value-format="yyyyMMddHHmmss"
placeholder="璇烽�夋嫨鏃ユ湡"
@@ -27,7 +28,7 @@
<el-row :gutter="24" class="headerHeight">
<el-col :span="24">
<el-form-item label="璋冩嫧鎵嬬画" prop="procureDoc">
- <upload :settings="uploadSettings" @on-change="uploadChange"></upload>
+ <upload ref="uploadRef" :settings="uploadSettings" @on-change="uploadChange"></upload>
</el-form-item>
</el-col>
</el-row>
@@ -36,17 +37,20 @@
<el-col :span="12">
<el-form-item
label="鐗╁搧鍒嗙被"
- :prop="`transferGoods[${goodsIndex}].baseCategoryIds`"
+ :prop="`transferGoods.${goodsIndex}.baseCategoryId`"
:rules="{
required: true,
- message: '璇烽�夋嫨',
+ message: '璇烽�夋嫨鐗╁搧鍒嗙被',
trigger: 'change',
}"
>
<el-cascader
- v-model="goodsItem.baseCategoryIds"
+ v-model="goodsItem.baseCategoryId"
:options="categoryOptions"
- :props="{ value: 'id' }"
+ :props="{ value: 'id',emitPath: false }"
+ :show-all-levels="false"
+ filterable
+ clearable
@change="categoryChange($event, goodsIndex)"
style="width: 100%"
></el-cascader>
@@ -55,13 +59,14 @@
<el-col :span="12">
<el-form-item
label="鐗╁搧鍚嶇О"
- :prop="`transferGoods[${goodsIndex}].baseGoodsTemplateId`"
+ :prop="`transferGoods.${goodsIndex}.baseGoodsTemplateId`"
:rules="rules.baseGoodsTemplateId"
>
<el-select
v-model="goodsItem.baseGoodsTemplateId"
- placeholder="璇峰厛鎷╃墿鍝佸垎绫�"
+ :placeholder="goodsItem.baseCategoryId?'璇烽�夋嫨鐗╁搧':'璇峰厛閫夋嫨鐗╁搧鍒嗙被'"
filterable
+ clearable
:disabled="!goodsItem.baseCategoryId"
style="width: 100%"
@change="goodsTemplateChange($event, goodsIndex)"
@@ -90,10 +95,12 @@
<el-select
v-model="goodsItem.modelsIds"
multiple
- placeholder="璇峰厛鎷╃墿鍝佸悕绉�"
+ clearable
+ :placeholder="goodsItem.baseCategoryId?'璇烽�夋嫨瑙勬牸鍨嬪彿':'璇峰厛閫夋嫨鐗╁搧鍚嶇О'"
:disabled="!goodsItem.baseCategoryId"
@change="modelChange($event, goodsIndex)"
@remove-tag="modelRemoveTag($event, goodsIndex)"
+ @clear="modelRemoveTag(-1, goodsIndex)"
style="width: 100%"
>
<el-option
@@ -199,12 +206,13 @@
callback();
};
return {
- loading: false,
+ loading: true,
agencyOptions: [], // 璋冩嫧鏈烘瀯
categoryOptions: [], // 鐗╁搧鍒嗙被鍒楄〃
modelList: [], //鍨嬪彿鍒楄〃
formData: {
transferBusinessType: 0, // 鍗曟嵁绫诲瀷銆�0浠撳簱璋冩嫧锛�1閮ㄩ棬鍒嗗彂锛�2閮ㄩ棬鐗╁搧鍥為��
+ procureDoc: '',
outAgencyId: '', // 璋冩嫧鏈烘瀯id
createTime: '', // 璋冩嫧鏃堕棿
transferGoods: [],
@@ -228,9 +236,9 @@
rules: {
outAgencyId: [{ required: true, message: '璇烽�夋嫨', trigger: 'change' }],
createTime: [{ required: true, message: '璇烽�夋嫨', trigger: 'change' }],
-
+ procureDoc: [{ required: true, message: '璇蜂笂浼犺皟鎷ㄦ墜缁�', trigger: 'change' }],
baseCategoryIds: [{ required: true, message: '璇烽�夋嫨', trigger: 'change' }],
- baseGoodsTemplateId: [{ validator: checkGoodsTemplateId, trigger: ['blur', 'change'] }],
+ baseGoodsTemplateId: [{ required: true, message: '璇烽�夋嫨', trigger: 'change' },{ validator: checkGoodsTemplateId, trigger: ['blur', 'change'] }],
modelsIds: [{ required: true, message: '璇烽�夋嫨', trigger: 'change' }],
counts: [
{ required: true, message: '璇疯緭鍏�', trigger: 'change' },
@@ -242,12 +250,11 @@
title: '涓婁紶',
max: 20, // 鏈�澶уぇ灏忥紝鍗曚綅M
num: 2, // 鏀寔涓婁紶鍥剧墖涓暟
- accept: '.jpg,.png', // 闄愬埗鏍煎紡
tip: '', // 鎻愮ず 榛樿锛歚鍙兘涓婁紶${this.defaultSettings.num}涓�${this.defaultSettings.accept}鏂囦欢锛屼笖涓嶈秴杩�${this.defaultSettings.max}kb`
uploadUrl: getUploadUrl(), // 涓婁紶璺緞
multiple: true, // 鏄惁鏀寔鎵归噺涓婁紶
disabled: false, // 鏄惁绂佺敤
- type: 'text', // text/picture
+ type: 'picture', // text/picture
},
};
},
@@ -259,15 +266,16 @@
},
methods: {
async init() {
- this.handegetParentTenant();
+ await this.handegetParentTenant();
+ await this.getCategoryTree();
+ this.loading = false
this.getgoodsTemplate();
this.getgoodsModel();
- this.getCategoryTree();
},
// 鑾峰彇涓婄骇鏈烘瀯
- handegetParentTenant() {
- getParentTenant().then((res) => {
+ async handegetParentTenant() {
+ await getParentTenant().then((res) => {
if (res.id != this.userInfo.tenantId) {
this.agencyOptions = [res];
this.formData.outAgencyId = res.id;
@@ -343,10 +351,8 @@
this.formData.transferGoods[index].modelsOptions = [];
this.formData.transferGoods[index].modelsIds = [];
this.formData.transferGoods[index].models = [];
-
- this.formData.transferGoods[index].baseCategoryId = e[e.length - 1];
// 鏍规嵁閫変腑鍒嗙被璇锋眰鐗╁搧鍚嶇О鍒楄〃
- this.getgoodsTemplate(e[e.length - 1], index);
+ this.getgoodsTemplate(e, index);
},
// 鐗╁搧鍚嶇О鍒楄〃閫夋嫨
@@ -382,6 +388,10 @@
// 瑙勬牸鍨嬪彿绉婚櫎
modelRemoveTag(e, index) {
+ if(e===-1){
+ this.formData.transferGoods[index].models = []
+ return
+ }
let arr = this.formData.transferGoods[index].models;
let delIndex = arr.findIndex((v) => v.baseGoodsModelsId == e);
this.formData.transferGoods[index].models.splice(delIndex, 1);
@@ -389,7 +399,8 @@
// 涓婁紶
uploadChange(e) {
- console.log('uploadChange', e);
+ let arr = this.$refs.uploadRef.fileList;
+ this.formData.procureDoc = JSON.stringify(arr);
},
// 鐐瑰嚮鏂板鐗╁搧
@@ -420,14 +431,17 @@
handleSubmit() {
this.$refs['ruleForm'].validate((valid) => {
if (valid) {
- console.log('this.formData', this.formData);
+ if(this.loading) return
+ this.loading = true
transferAdd(this.formData)
.then((res) => {
+ this.loading = false
this.$message.success('淇濆瓨鎴愬姛锛�');
this.close();
this.$emit('search');
})
.catch((err) => {
+ this.loading = false
console.log('edit err', err);
this.$message.error('淇濆瓨澶辫触');
});
diff --git a/admin-web/src/views/stock/transfer/transferissue/detail.vue b/admin-web/src/views/stock/transfer/transferissue/detail.vue
index 0294b76..696d12c 100644
--- a/admin-web/src/views/stock/transfer/transferissue/detail.vue
+++ b/admin-web/src/views/stock/transfer/transferissue/detail.vue
@@ -1,84 +1,94 @@
<template>
- <win-md class="stock-detail" :title="setting.title" @close="close" :width="'1100px'">
- <div v-loading="loading">
- <el-row :gutter="20">
- <el-col :span="6">
- <span>璋冩嫧鍗曞彿锛�</span>
- <span>{{ detail.businessFormCode }}</span>
- </el-col>
- <el-col :span="6">
- <span>璋冩嫧鏈烘瀯锛�</span>
- <span>{{ detail.outAgencyName }}</span>
- </el-col>
- <el-col :span="6">
- <span>璋冩嫧浜猴細</span>
- <span>{{ detail.outOperatorName || '-' }}</span>
- </el-col>
- <el-col :span="6">
- <span>鎺ユ敹鏈烘瀯锛�</span>
- <span>{{ detail.inAgencyName }}</span>
- </el-col>
- </el-row>
- <el-row :gutter="20" style="margin-top: 20px">
- <el-col :span="6">
- <span>鐢宠浜猴細</span>
- <span>{{ detail.operatorName }}</span>
- </el-col>
- <el-col :span="6">
- <span>鐢宠璋冩嫧鏃堕棿锛�</span>
- <span>{{ detail.createTime | formatTime }}</span>
- </el-col>
- <el-col :span="6">
- <span>鐘舵�侊細</span>
- <span>{{ getStatesLabel(detail.states) }}</span>
- </el-col>
- <el-col :span="6">
- <span>璋冩嫧鏃堕棿锛�</span>
- <span>{{ detail.outputTime | formatTime }}</span>
- </el-col>
- </el-row>
- <el-row v-if="fileList && fileList.length" :gutter="20" style="margin-top: 20px">
- <el-col class="img-row" :span="24">
- <span>璋冩嫧鎵嬬画鐓х墖锛�</span>
+ <win-md class="stock-detail" :loading="loading" :title="setting.title" @close="close" :width="'1100px'">
+ <el-row :gutter="20">
+ <el-col :span="6">
+ <span>璋冩嫧鍗曞彿锛�</span>
+ <span>{{ detail.businessFormCode }}</span>
+ </el-col>
+ <el-col :span="6">
+ <span>璋冩嫧鏈烘瀯锛�</span>
+ <span>{{ detail.outAgencyName }}</span>
+ </el-col>
+ <el-col :span="6">
+ <span>璋冩嫧浜猴細</span>
+ <span>{{ detail.outOperatorName || '-' }}</span>
+ </el-col>
+ <el-col :span="6">
+ <span>鎺ユ敹鏈烘瀯锛�</span>
+ <span>{{ detail.inAgencyName }}</span>
+ </el-col>
+ </el-row>
+ <el-row :gutter="20" style="margin-top: 20px">
+ <el-col :span="6">
+ <span>鐢宠浜猴細</span>
+ <span>{{ detail.operatorName }}</span>
+ </el-col>
+ <el-col :span="6">
+ <span>鐢宠璋冩嫧鏃堕棿锛�</span>
+ <span>{{ detail.createTime | formatTime }}</span>
+ </el-col>
+ <el-col :span="6">
+ <span>鐘舵�侊細</span>
+ <span>{{ getStatesLabel(detail.states) }}</span>
+ </el-col>
+ <el-col :span="6">
+ <span>璋冩嫧鏃堕棿锛�</span>
+ <span>{{ detail.outputTime | formatTime }}</span>
+ </el-col>
+ </el-row>
+ <el-row v-if="fileList && fileList.length" :gutter="20" style="margin-top: 20px">
+ <el-col class="img-row" :span="24">
+ <span>璋冩嫧鎵嬬画鐓х墖锛�</span>
<div class="img-box" v-for="(item, index) in fileList" :key="index" @click="handlePreview(item)">
- <img class="img" :src="getUrl(item.path)" alt="" />
+ <img class="img" :src="getUrl(item.path)" alt=""/>
</div>
+ </el-col>
+ </el-row>
+ <div class="goods-card" v-for="(goodsItem, goodsIndex) in detail.formTransferGoods" :key="goodsIndex">
+ <el-row :gutter="20">
+ <el-col :span="12">
+ <span>鐗╁搧鍒嗙被锛�</span>
+ <span>{{ goodsItem.categoryName }}</span>
+ </el-col>
+ <el-col :span="12">
+ <span>鐗╁搧鍚嶇О锛�</span>
+ <span>{{ goodsItem.goodsName }}</span>
</el-col>
</el-row>
- <div class="goods-card" v-for="(goodsItem, goodsIndex) in detail.formTransferGoods" :key="goodsIndex">
- <el-row :gutter="20">
- <el-col :span="12">
- <span>鐗╁搧鍒嗙被锛�</span>
- <span>{{ goodsItem.categoryName }}</span>
- </el-col>
- <el-col :span="12">
- <span>鐗╁搧鍚嶇О锛�</span>
- <span>{{ goodsItem.goodsName }}</span>
- </el-col>
- </el-row>
- <el-table :data="goodsItem.models" :stripe="true" style="margin-top: 20px">
- <el-table-column prop="baseGoodsModelsName" label="瑙勬牸鍨嬪彿" align="center">
- <template slot-scope="scope">
- {{ scope.row.baseGoodsModelsName }}
- </template>
- </el-table-column>
- <el-table-column label="鍗曚綅" align="center">
- <template slot-scope="scope">
- {{ scope.row.unit }}
- </template>
- </el-table-column>
- <el-table-column prop="counts" label="璋冩嫧鏁伴噺" align="center">
- <template slot-scope="scope">
- {{ scope.row.counts }}
- </template>
- </el-table-column>
- <el-table-column prop="price" label="閲戦" align="center">
- <template slot-scope="scope">
- {{ scope.row.price }}
- </template>
- </el-table-column>
- </el-table>
- </div>
+ <el-table :data="goodsItem.models" :stripe="true" style="margin-top: 20px">
+ <el-table-column prop="baseGoodsModelsName" label="瑙勬牸鍨嬪彿" align="center">
+ <template slot-scope="scope">
+ {{ scope.row.baseGoodsModelsName }}
+ </template>
+ </el-table-column>
+ <el-table-column label="鍗曚綅" align="center">
+ <template slot-scope="scope">
+ {{ scope.row.unit }}
+ </template>
+ </el-table-column>
+ <el-table-column prop="counts" label="璋冩嫧鏁伴噺" align="center">
+ <template slot-scope="scope">
+ {{ scope.row.counts }}
+ </template>
+ </el-table-column>
+ <el-table-column prop="price" label="閲戦" align="center">
+ <template slot-scope="scope">
+ {{ scope.row.price }}
+ </template>
+ </el-table-column>
+ </el-table>
+ </div>
+
+ <div id="uploadPreviewImages" style="display: none">
+ <span v-for="(src, index) in fileList" :key="index">
+ <img
+ v-if="checkImg(src.name)"
+ class="v-img"
+ :src="src.url"
+ :alt="src.name"
+ style="width: 100px; height: 100px"
+ />
+ </span>
</div>
</win-md>
</template>
@@ -87,21 +97,27 @@
import * as DateFormatter from '@/utils/DateFormatter';
import winMd from '@/components/win/win-md';
import transfer from '../../../mixins/transfer';
+import {getDownUrl} from "@/utils/base";
+import Viewer from 'viewerjs';
+import 'viewerjs/dist/viewer.css';
+
+let viewer = null;
export default {
mixins: [transfer],
- components: { winMd },
+ components: {winMd},
props: {
setting: {
type: Object,
- default: () => {},
+ default: () => {
+ },
},
},
data() {
return {
loading: false,
detail: {},
- fileList:[]
+ fileList: []
};
},
filters: {
@@ -112,13 +128,60 @@
},
created() {
this.loading = true;
- transferDetail({ id: this.setting.id }).then((res) => {
+ transferDetail({id: this.setting.id}).then((res) => {
this.detail = res;
- this.fileList = this.detail.procureDoc ? JSON.parse(this.detail.procureDoc) : [];
+ this.fileList = this.detail.doc ? JSON.parse(this.detail.doc) : [];
this.loading = false;
+ this.$nextTick(() => {
+ this.initPreviewImg();
+ });
});
},
methods: {
+ initPreviewImg() {
+ if (viewer != null) {
+ viewer.destroy();
+ }
+ const ViewerDom = document.querySelector('#uploadPreviewImages');
+ viewer = new Viewer(ViewerDom, {});
+ },
+ handlePreview(file) {
+ if (!this.checkImg(file.name)) {
+ return false;
+ }
+ let index = 0;
+ for (let i = 0; i < this.fileList.length; i++) {
+ const f = this.fileList[i];
+ if (this.checkImg(f.name)) {
+ if (file.id == f.id) {
+ break;
+ }
+ index++;
+ }
+ }
+ // this.fileList.forEach((f, i) => {
+ // if (file.uid == f.uid) {
+ // index = i
+ // }
+ // })
+ // document.querySelector('#uploadPreviewImages').children[0].click()
+ viewer.view(index);
+ },
+ checkImg(name) {
+ const suffix = name.substring(name.lastIndexOf('.'), name.length);
+ const imgArray = ['.jpg', '.jpeg', '.png', '.bmp'];
+ if (imgArray.indexOf(suffix) < 0) {
+ return false;
+ }
+ return true;
+ },
+ getUrl(path) {
+ if (path.substr(0, 7).toLowerCase() == 'http://' || path.substr(0, 8).toLowerCase() == 'https://') {
+ return path;
+ } else {
+ return getDownUrl() + path;
+ }
+ },
close() {
this.$emit('close');
},
--
Gitblit v1.9.1