From d9aab92fa25860c6682debe50e10770dc7db42a0 Mon Sep 17 00:00:00 2001
From: cuikaidong <ckd2942379034@163.com>
Date: 星期四, 14 八月 2025 12:44:33 +0800
Subject: [PATCH] 组合刀模块增加
---
src/views/dnc/base/modules/ProductStructure/Document/NcDocumentAssignModal.vue | 617 +++++++++++++++++++++++++++++++++++---------------------
1 files changed, 386 insertions(+), 231 deletions(-)
diff --git a/src/views/dnc/base/modules/ProductStructure/Document/NcDocumentAssignModal.vue b/src/views/dnc/base/modules/ProductStructure/Document/NcDocumentAssignModal.vue
index f00bfda..0788c06 100644
--- a/src/views/dnc/base/modules/ProductStructure/Document/NcDocumentAssignModal.vue
+++ b/src/views/dnc/base/modules/ProductStructure/Document/NcDocumentAssignModal.vue
@@ -10,13 +10,14 @@
<a-row :gutter="24">
<a-col :md="7" :sm="7">
<a-form-item label="鏂囦欢鍚嶇О">
- <a-input placeholder="璇疯緭鍏ユ枃浠跺悕绉�" v-model="queryParam.docName"></a-input>
+ <a-input placeholder="璇疯緭鍏ユ枃浠跺悕绉�" v-model="queryParam.docName" allow-clear></a-input>
</a-form-item>
</a-col>
<a-col :md="11" :sm="11">
<a-form-item label="涓婁紶鏃堕棿">
- <a-range-picker v-model="queryParam.collectTime"></a-range-picker>
+ <a-range-picker v-model="date" value-format="YYYY-MM-DD"
+ @change="handleDateChange" allow-clear></a-range-picker>
</a-form-item>
</a-col>
@@ -29,9 +30,14 @@
<a-table :columns="columns" :data-source="dataSource" bordered :pagination="false" :loading="loading"
- :rowSelection="{selectedRowKeys: selectedRowKeys, onChange: onSelectChange}"
+ :rowSelection="{selectedRowKeys: selectedRowKeys,selectedRows:selectionRows, onChange: onSelectChange}"
+ @change="handleTableChange"
:scroll="{y:456}" :size="size" rowKey="docId">
+ <!-- 瀛楃涓茶秴闀挎埅鍙栫渷鐣ュ彿鏄剧ず-->
+ <span slot="docName" slot-scope="text">
+ <j-ellipsis :value="text"/>
+ </span>
</a-table>
</a-tab-pane>
</a-tabs>
@@ -45,26 +51,22 @@
<div style="display: flex">
<a-input placeholder="杈撳叆鍏抽敭瀛楄繘琛屾悳绱�" allowClear v-model="searchInput"
@change="handleSearchInputChange"/>
- <a-dropdown :trigger="['click']" placement="bottomCenter" style="margin: 0 8px">
- <a-menu slot="overlay">
- <a-menu-item key="1" @click="expandedKeys = allTreeKeys">灞曞紑鎵�鏈�</a-menu-item>
- <a-menu-item key="2" @click="expandedKeys = []">鍚堝苟鎵�鏈�</a-menu-item>
- </a-menu>
- <a-button>
- <a-icon type="bars"/>
- </a-button>
- </a-dropdown>
+ <a-button type="primary" @click="isExpandAllTreeNode=!isExpandAllTreeNode" style="margin: 0 8px">
+ 灞曞紑/鎶樺彔
+ </a-button>
</div>
- <!--浜у搧缁撴瀯鏍�-->
+ <!--璁惧缁撴瀯鏍�-->
<div style="overflow:auto;margin-top: 10px;height: 400px">
- <a-tree ref="tree" checkable :checkedKeys="checkedKeys" :expandedKeys.sync="expandedKeys"
- :autoExpandParent="autoExpandParent"
- :treeData="treeDataSource" @check="handleTreeNodeCheck" @expand="handleTreeExpand">
- <template slot="title" slot-scope="{ label, parentId, entity, key:treeKey,type}">
- <span v-if="label.indexOf(searchValue) > -1">{{ label.substr(0, label.indexOf(searchValue)) }}<span
- class="replaceSearch">{{ searchValue }}</span>{{ label.substr(label.indexOf(searchValue) + searchValue.length) }}</span>
- <span v-else>{{ label }}</span>
+ <a-tree blockNode checkable :checkedKeys="checkedKeys" :expandedKeys.sync="expandedKeys"
+ :autoExpandParent="autoExpandParent" @select="handleTreeNodeSelect"
+ :treeData="treeDataSource" @check="handleTreeNodeCheck" @expand="handleTreeNodeExpand">
+ <template slot="title" slot-scope="{ title, parentId, entity, key:treeKey,type}">
+ <span v-if="title.indexOf(searchValue) > -1">{{ title.substr(0, title.indexOf(searchValue)) }}<span
+ class="replaceSearch">{{
+ searchValue
+ }}</span>{{ title.substr(title.indexOf(searchValue) + searchValue.length) }}</span>
+ <span v-else>{{ title }}</span>
</template>
</a-tree>
</div>
@@ -86,229 +88,382 @@
</template>
<script>
- import { getAction } from '@/api/manage'
- import dncApi from '@/api/dnc'
- import { JeecgListMixin } from '@/mixins/JeecgListMixin'
- import ATextarea from 'ant-design-vue/es/input/TextArea'
+import { getAction } from '@/api/manage'
+import dncApi from '@/api/dnc'
+import { JeecgListMixin } from '@/mixins/JeecgListMixin'
- export default {
- name: 'NcDocumentAssignModal',
- components: { ATextarea },
- mixins: [JeecgListMixin],
- props: {
- currentDocumentInfo: {
- type: Object
- },
- size: {
- type: String
- }
+export default {
+ name: 'NcDocumentAssignModal',
+ components: {},
+ mixins: [JeecgListMixin],
+ props: {
+ currentDocumentInfo: {
+ type: Object
},
- data() {
- return {
- disableMixinCreated: true,
- visible: false,
- title: '',
- columns: [
- {
- title: '搴忓彿',
- dataIndex: 'rowIndex',
- key: 'rowIndex',
- width: 65,
- align: 'center',
- customRender: function(t, r, index) {
- return parseInt(index) + 1
- }
- },
- { title: '鏂囦欢鍚嶇О', dataIndex: 'docName', align: 'center', width: 300 },
- { title: '璁惧缂栧彿', dataIndex: 'docCode', align: 'center' },
- { title: '鍑哄簱鐘舵��', dataIndex: 'pullStatus_dictText', align: 'center' },
- { title: '鐘� 鎬�', dataIndex: 'docStatus_dictText', align: 'center' },
- { title: '涓婁紶鏃堕棿', dataIndex: 'createTime', align: 'center', width: 200 }
- ],
- searchValue: '',
- searchInput: '',
- spinning: false,
- treeDataSource: [],
- allTreeKeys: [],
- checkedKeys: [],
- expandedKeys: [],
- autoExpandParent: true,
- url: {
- list: '/nc/doc/find/list'
- }
- }
- },
- watch: {
- visible: {
- handler(value) {
- if (value) {
- this.resetData()
- this.loadData()
- this.getDocumentAssignDeviceTreeByApi()
+ size: {
+ type: String
+ }
+ },
+ data() {
+ return {
+ disableMixinCreated: true,
+ visible: false,
+ title: '',
+ columns: [
+ {
+ title: '搴忓彿',
+ dataIndex: 'rowIndex',
+ key: 'rowIndex',
+ width: 65,
+ align: 'center',
+ customRender: function(t, r, index) {
+ return parseInt(index) + 1
}
+ },
+ {
+ title: '鏂囦欢鍚嶇О',
+ dataIndex: 'docName',
+ key: 'docName',
+ align: 'center',
+ scopedSlots: { customRender: 'docName' },
+ width: 300,
+ sorter: true
+ },
+ { title: '璁惧缂栧彿', dataIndex: 'docCode', align: 'center' },
+ {
+ title: '鍑哄簱鐘舵��',
+ dataIndex: 'pullStatus_dictText',
+ key: 'pullStatus',
+ align: 'center',
+ filters: [
+ { text: '鏈嚭搴�', value: 1 },
+ { text: '宸插嚭搴�', value: 2 }
+ ]
+ },
+ {
+ title: '鐘� 鎬�',
+ dataIndex: 'docDispatchStatus_dictText',
+ key: 'docDispatchStatus',
+ align: 'center',
+ filters: [
+ { text: '缂栧埗', value: 1 },
+ { text: '鏍″', value: 2 },
+ { text: '鎵瑰噯', value: 3 },
+ { text: '璇曞垏', value: 4 },
+ { text: '瀹氬瀷', value: 5 }
+ ]
+ },
+ {
+ title: '鍒涘缓鏃堕棿',
+ dataIndex: 'createTime',
+ align: 'center',
+ width: 200,
+ sorter: true
}
- }
- },
- methods: {
- loadData() {
- this.dataSource = []
- if (!this.url.list) {
- this.$message.error('璇疯缃畊rl.list灞炴��!')
- return
- }
- var params = this.getQueryParams()//鏌ヨ鏉′欢
- if (!params) {
- return false
- }
- const { attributionType, attributionId, param } = this.currentDocumentInfo
- console.log('currentDocumentInfo', this.currentDocumentInfo)
- params.attributionType = attributionType
- params.attributionId = attributionId
- params.docClassCode = param
- console.log('params', params)
- this.loading = true
- getAction(this.url.list, params).then((res) => {
- if (res.success) this.dataSource = res.result
- else this.$message.warning(res.message)
- }).finally(() => {
- this.loading = false
- })
- },
-
- getDocumentAssignDeviceTreeByApi() {
- this.spinning = true
- this.treeDataSource = []
- dncApi.getDocumentAssignDeviceTreeApi(this.currentDocumentInfo)
- .then(res => {
- if (res.success) {
- this.dataList = []
- this.allTreeKeys = []
- this.treeDataSource = res.list
- this.generateList(this.treeDataSource)
- } else {
- this.$message.warn(res.message)
- }
- })
- .finally(() => {
- this.spinning = false
- })
- },
-
- handleAssignDocumentToDevice() {
- const param = {}
- console.log('table', this.selectedRowKeys)
- const treeCheckedDeviceKeys = []
- this.checkedKeys.forEach(checkedKey => {
- const deviceId = this.dataList.find(item => item.key === checkedKey && item.type === 2)
- if (deviceId) treeCheckedDeviceKeys.push(deviceId.key)
- })
-
- console.log('treeCheckedDeviceKeys', treeCheckedDeviceKeys)
- },
-
- /* 杈撳叆鏌ヨ鍐呭鍙樺寲鏃惰Е鍙� */
- handleSearchInputChange() {
- let search = this.searchInput
- console.log('data', this.dataList)
- console.log('search', search)
- let expandedKeys = this.dataList
- .map(item => {
- if (item.title != null) {
- if (item.title.indexOf(search) > -1) {
- return this.getParentKey(item.key, this.treeDataSource)
- }
- return null
- }
- })
- .filter((item, i, self) => item && self.indexOf(item) === i)
- Object.assign(this, {
- expandedKeys,
- searchValue: search,
- autoExpandParent: true
- })
- },
-
- /**
- * 鏍戣妭鐐瑰睍寮�鍚堝苟鏃惰Е鍙�
- * @param expandedKeys 灞曞紑椤筴ey
- */
- handleTreeExpand(expandedKeys) {
- this.expandedKeys = expandedKeys
- this.autoExpandParent = false
- },
-
- /**
- * 鏍戣妭鐐瑰閫夋閫変腑鏃惰Е鍙�
- * @param selectedKeys 閫変腑鑺傜偣key
- * @param {node} node 鑺傜偣瀵硅薄
- */
- handleTreeNodeCheck(checkedKeys, { node }) {
- let record = node.dataRef
- this.checkedKeys = checkedKeys
- },
-
- /**
- * 閫掑綊鑾峰緱杈撳叆椤圭殑鐖剁骇key
- * @param key 瀛愰」key
- * @param tree 瀛愰」
- */
- getParentKey(key, tree) {
- let parentKey
- for (let i = 0; i < tree.length; i++) {
- const node = tree[i]
- if (node.children) {
- if (node.children.some(item => item.key === key)) {
- parentKey = node.key
- console.log('parentKey', parentKey)
- } else if (
- this.getParentKey(key, node.children)) {
- parentKey = this.getParentKey(key, node.children)
- }
- }
- }
- return parentKey
- },
-
- /**
- * 閫掑綊鑾峰緱鎵�鏈夋爲鑺傜偣key
- * @param data
- */
- generateList(data) {
- for (let i = 0; i < data.length; i++) {
- data[i].key = data[i].id
- const node = data[i]
- const key = node.id
- const title = node.label
- const type = node.type
- this.dataList.push({ key, title, type })
- this.allTreeKeys.push(key)
- if (node.children) this.generateList(node.children)
- }
- },
-
- resetData() {
- this.searchInput = ''
- this.expandedKeys = []
- this.selectedRowKeys = []
- this.checkedKeys = []
+ ],
+ searchValue: '',
+ searchInput: '',
+ spinning: false,
+ treeDataSource: [],
+ allTreeKeys: [],
+ checkedKeys: [],
+ expandedKeys: [],
+ autoExpandParent: true,
+ isExpandAllTreeNode: true,
+ date: [],
+ url: {
+ list: '/nc/doc/find/list'
}
}
+ },
+ watch: {
+ visible: {
+ handler(value) {
+ if (value) {
+ this.resetData()
+ this.loadData()
+ this.getDocumentAssignDeviceTreeByApi()
+ }
+ }
+ },
+ isExpandAllTreeNode: {
+ handler(value) {
+ if (value) this.expandedKeys = this.allTreeKeys
+ else this.expandedKeys = []
+ }
+ }
+ },
+ methods: {
+ // 鑾峰彇褰撳墠宸ュ簭鎴栧伐姝ュ搴旀枃妗e垪琛�
+ loadData() {
+ this.dataSource = []
+ if (!this.url.list) {
+ this.$message.error('璇疯缃畊rl.list灞炴��!')
+ return
+ }
+ var params = this.getQueryParams()//鏌ヨ鏉′欢
+ if (!params) return false
+ const { attributionType, attributionId, param } = this.currentDocumentInfo
+ params.attributionType = attributionType
+ params.attributionId = attributionId
+ params.docClassCode = param
+ this.loading = true
+ getAction(this.url.list, params).then((res) => {
+ if (res.success) this.dataSource = res.result
+ else this.$message.warning(res.message)
+ }).finally(() => {
+ this.loading = false
+ })
+ },
+
+ // 鑾峰彇DNC璁惧鏍�
+ getDocumentAssignDeviceTreeByApi() {
+ this.spinning = true
+ this.treeDataSource = []
+ dncApi.getDeviceTreeDataApi()
+ .then(res => {
+ if (res.success) {
+ this.dataList = []
+ this.allTreeKeys = []
+ this.treeDataSource = res.result
+ this.generateList(this.treeDataSource)
+ this.expandedKeys = this.allTreeKeys
+ } else {
+ this.$message.warn(res.message)
+ }
+ })
+ .finally(() => {
+ this.spinning = false
+ })
+ },
+
+ // 鏃堕棿閫夋嫨鍣ㄩ�夋嫨瀹屾垚鍚庤Е鍙�
+ handleDateChange(value) {
+ this.queryParam.startTime = value[0]
+ this.queryParam.endTime = value[1]
+ },
+
+ /**
+ * 琛ㄦ牸鍒嗛〉銆佹帓搴忔敼鍙樸�佺瓫閫夋椂瑙﹀彂
+ * @param pagination 鍒嗛〉鍣ㄩ�夐」
+ * @param filters 绛涢�夐�夐」
+ * @param sorter 鎺掑簭閫夐」
+ */
+ handleTableChange(pagination, filters, sorter) {
+ if (sorter.order) {
+ this.isorter.column = sorter.field
+ this.isorter.order = sorter.order === 'ascend' ? 'asc' : 'desc'
+ } else {
+ this.isorter.column = 'createTime'
+ this.isorter.order = 'desc'
+ }
+ for (let key in filters) {
+ this.filters[key] = filters[key].join(',')
+ }
+ this.loadData()
+ },
+
+ // 鎸囨淳鍒拌澶囩獥鍙g偣鍑荤‘瀹氭寚娲捐澶囧悗瑙﹀彂
+ handleAssignDocumentToDevice() {
+ const {
+ checkedKeys,
+ selectedRowKeys,
+ selectionRows,
+ dataList,
+ $confirm,
+ $notification,
+ currentDocumentInfo,
+ queryParam: { applyReason },
+ $destroyAll,
+ $bus
+ } = this
+ const { attributionId, attributionType } = currentDocumentInfo
+ const paramsArray = []
+ // 杩囨护杞﹂棿key浠呮斁鍏ヨ澶噆ey
+ const treeCheckedDeviceKeys = []
+ checkedKeys.forEach(checkedKey => {
+ const device = dataList.find(item => item.key === checkedKey && item.type === 2)
+ if (device) treeCheckedDeviceKeys.push(device.key)
+ })
+
+ if (treeCheckedDeviceKeys.length === 0 || selectedRowKeys.length === 0) {
+ $notification.warning({
+ message: '娑堟伅',
+ description: '璇烽�夋嫨璁惧鎴栨枃妗�'
+ })
+ return
+ }
+
+ $confirm({
+ title: '鎻愮ず',
+ content: `纭鎻愪氦鍚楋紵`,
+ okText: '纭',
+ cancelText: '鍙栨秷',
+ onOk: () => {
+ // 鍙岄噸寰幆纭畾姣忎竴缁勮澶囦笌鏂囨。鐨勫弬鏁�
+ treeCheckedDeviceKeys.forEach(deviceId => {
+ selectionRows.forEach(({ docId, publishFileId }) => {
+ paramsArray.push({
+ docId,
+ deviceId,
+ fileId: publishFileId,
+ attributionId,
+ attributionType,
+ applyReason
+ })
+ })
+ })
+
+ paramsArray.forEach(item => {
+ dncApi.assignDocumentToDeviceApi(item)
+ .then(res => {
+ if (res.success) {
+ $bus.$emit('reloadMainBottomTableData', 'useDocumentEquipment')
+ $notification.success({
+ message: '娑堟伅',
+ description: res.message
+ })
+ } else {
+ $notification.error({
+ message: '娑堟伅',
+ description: res.message
+ })
+ }
+ })
+ .catch(err => {
+ $notification.error({
+ message: '娑堟伅',
+ description: err.message
+ })
+ })
+ .finally(() => {
+ $destroyAll()
+ })
+ })
+ },
+ onCancel: () => {
+ $destroyAll()
+ }
+ })
+ },
+
+ /* 杈撳叆鏌ヨ鍐呭鍙樺寲鏃惰Е鍙� */
+ handleSearchInputChange() {
+ let search = this.searchInput
+ console.log('data', this.dataList)
+ console.log('search', search)
+ let expandedKeys = this.dataList
+ .map(item => {
+ if (item.title != null) {
+ if (item.title.indexOf(search) > -1) {
+ return this.getParentKey(item.key, this.treeDataSource)
+ }
+ return null
+ }
+ })
+ .filter((item, i, self) => item && self.indexOf(item) === i)
+ Object.assign(this, {
+ expandedKeys,
+ searchValue: search,
+ autoExpandParent: true
+ })
+ },
+
+ /**
+ * 鏍戣妭鐐瑰睍寮�鍚堝苟鏃惰Е鍙�
+ * @param expandedKeys 灞曞紑椤筴ey
+ */
+ handleTreeNodeExpand(expandedKeys) {
+ this.expandedKeys = expandedKeys
+ this.autoExpandParent = false
+ },
+
+ /**
+ * 鏍戣妭鐐瑰閫夋閫変腑鏃惰Е鍙�
+ * @param selectedKeys 閫変腑鑺傜偣key
+ * @param {node} node 鑺傜偣瀵硅薄
+ */
+ handleTreeNodeCheck(checkedKeys, { node }) {
+ let record = node.dataRef
+ this.checkedKeys = checkedKeys
+ },
+
+ /**
+ * 鏍戣妭鐐归�変腑鏃惰Е鍙戯紙妯℃嫙鏍戣妭鐐瑰閫夋閫変腑鏃剁殑鏁堟灉锛�
+ * @param selectedKeys 閫変腑鑺傜偣key
+ * @param {node} node 鑺傜偣瀵硅薄
+ */
+ handleTreeNodeSelect(selectedKeys, { node }) {
+ node.$el.childNodes[1].click()
+ },
+
+ /**
+ * 閫掑綊鑾峰緱杈撳叆椤圭殑鐖剁骇key
+ * @param key 瀛愰」key
+ * @param tree 瀛愰」
+ */
+ getParentKey(key, tree) {
+ let parentKey
+ for (let i = 0; i < tree.length; i++) {
+ const node = tree[i]
+ if (node.children) {
+ if (node.children.some(item => item.key === key)) {
+ parentKey = node.key
+ console.log('parentKey', parentKey)
+ } else if (
+ this.getParentKey(key, node.children)) {
+ parentKey = this.getParentKey(key, node.children)
+ }
+ }
+ }
+ return parentKey
+ },
+
+ /**
+ * 閫掑綊鑾峰緱鎵�鏈夋爲鑺傜偣key
+ * @param data 璁惧鏍戞暟鎹�
+ */
+ generateList(data) {
+ for (let i = 0; i < data.length; i++) {
+ const node = data[i]
+ const key = node.key
+ const title = node.title
+ const type = node.type
+ this.dataList.push({ key, title, type })
+ this.allTreeKeys.push(key)
+ if (node.children) this.generateList(node.children)
+ }
+ },
+
+ resetData() {
+ this.searchInput = this.searchValue = ''
+ this.expandedKeys = []
+ this.selectedRowKeys = []
+ this.selectionRows = {}
+ this.checkedKeys = []
+ this.filters = {}
+ this.isorter = Object.assign({}, this.defaultSorter)
+ }
}
+}
</script>
<style scoped lang="less">
- /deep/ .ant-modal {
- .tabs-container {
- display: flex;
- justify-content: space-between;
+/deep/ .ant-modal {
+ .tabs-container {
+ display: flex;
+ justify-content: space-between;
- .replaceSearch {
- color: #40a9ff;
- font-weight: bold;
- background-color: rgb(204, 204, 204);
- }
+ .replaceSearch {
+ color: #40a9ff;
+ font-weight: bold;
+ background-color: rgb(204, 204, 204);
}
-
}
+}
+
+::-webkit-scrollbar {
+ width: 8px;
+}
</style>
\ No newline at end of file
--
Gitblit v1.9.3