Переглянути джерело

问题批示,问题富文本

zk 2 роки тому
батько
коміт
2a4dcee4af

+ 3 - 3
server/api/v1/system/wechat.go

@@ -71,9 +71,9 @@ func (b *WechatApi) Req(c *gin.Context) {
 			} else {
 				global.GVA_LOG.Info("用户已存在", zap.Any("err", err), zap.Any("sysUser", sysUser))
 			}
-
-			text := message.NewText("【经开创城进行时】感谢您的关注! \r\n <a href='https://open.weixin.qq.com/connect/oauth2/authorize?appid=wx66e0fbb5a735bcc4&redirect_uri=" + url.QueryEscape(
-				global.GVA_CONFIG.Wxxcx.AuthUrl) + "/wechat/auth&response_type=code&scope=snsapi_userinfo&state=STATE#wechat_redirect'>点我授权</a>")
+			text := message.NewText("【经开创城进行时】感谢您的关注!")
+			//text := message.NewText("【经开创城进行时】感谢您的关注! \r\n <a href='https://open.weixin.qq.com/connect/oauth2/authorize?appid=wx66e0fbb5a735bcc4&redirect_uri=" + url.QueryEscape(
+			//	global.GVA_CONFIG.Wxxcx.AuthUrl) + "/wechat/auth&response_type=code&scope=snsapi_userinfo&state=STATE#wechat_redirect'>点我授权</a>")
 			return &message.Reply{MsgType: message.MsgTypeText, MsgData: text}
 		}
 		if msg.Content == "授权" {

+ 2 - 2
server/main_test.go

@@ -23,8 +23,8 @@ func TestName(t *testing.T) {
 	//_, resysDictionaryDetail := dictionaryDetailService.GetSysDictionaryDetail(8)
 	//fmt.Printf("\t%v", resysDictionaryDetail)
 	var menuAA []*menu.Button
-	menuAA = append(menuAA, &menu.Button{Type: "miniprogram", Name: "小程序", URL: "http://zk1006.cn", AppID: "wx0dc3e4978f919285", PagePath: "/pages/checking"})
-	menuAA = append(menuAA, &menu.Button{Type: "view", Name: "一键授权", URL: "https://open.weixin.qq.com/connect/oauth2/authorize?appid=wx66e0fbb5a735bcc4&redirect_uri=https://cc.zjkduoduo.com/api/wechat/auth&response_type=code&scope=snsapi_userinfo&state=STATE#wechat_redirect"})
+	menuAA = append(menuAA, &menu.Button{Type: "miniprogram", Name: "经开创城小程序", URL: "http://zk1006.cn", AppID: "wx0dc3e4978f919285", PagePath: "/pages/checking"})
+	//menuAA = append(menuAA, &menu.Button{Type: "view", Name: "小程序授权登录", URL: "https://open.weixin.qq.com/connect/oauth2/authorize?appid=wx66e0fbb5a735bcc4&redirect_uri=https://cc.zjkduoduo.com/api/wechat/auth&response_type=code&scope=snsapi_userinfo&state=STATE#wechat_redirect"})
 	err := global.GVA_WECHAT.GetMenu().SetMenu(menuAA)
 	global.GVA_LOG.Info("错误", zap.Any("err", err))
 	//var dictionaryDetailService = service.ServiceGroupApp.SystemServiceGroup.DictionaryDetailService

+ 58 - 56
web/package-lock.json

@@ -8,6 +8,7 @@
 			"name": "cc",
 			"version": "2.3.5",
 			"dependencies": {
+				"@vueup/vue-quill": "^1.0.0-alpha.40",
 				"axios": "^0.19.2",
 				"core-js": "^3.6.5",
 				"echarts": "4.9.0",
@@ -2921,6 +2922,18 @@
 			"integrity": "sha512-Iu8Tbg3f+emIIMmI2ycSI8QcEuAUgPTgHwesDU1eKMLE4YC/c/sFbGc70QgMq31ijRftV0R7vCm9co6rldCeOA==",
 			"dev": true
 		},
+		"node_modules/@vueup/vue-quill": {
+			"version": "1.0.0-alpha.40",
+			"resolved": "https://registry.npmjs.org/@vueup/vue-quill/-/vue-quill-1.0.0-alpha.40.tgz",
+			"integrity": "sha512-Cn6li+LxOiPQSvmZE+F9jKGsemksQq2VDfTBdgFIlNfNv3+BcBN+DblQstj9NDV5BBF97BHmM2dk7E84yYJI+Q==",
+			"dependencies": {
+				"quill": "^1.3.7",
+				"quill-delta": "^3.6.3"
+			},
+			"peerDependencies": {
+				"vue": "^3.0.11"
+			}
+		},
 		"node_modules/@webassemblyjs/ast": {
 			"version": "1.9.0",
 			"resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.9.0.tgz",
@@ -3255,7 +3268,7 @@
 			"version": "3.1.2",
 			"resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz",
 			"integrity": "sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==",
-			"dev": true,
+			"devOptional": true,
 			"dependencies": {
 				"normalize-path": "^3.0.0",
 				"picomatch": "^2.0.4"
@@ -3443,7 +3456,7 @@
 			"version": "1.0.3",
 			"resolved": "https://registry.npmjs.org/async-each/-/async-each-1.0.3.tgz",
 			"integrity": "sha512-z/WhQ5FPySLdvREByI2vZiTWwCnF0moMJ1hK9YQwDTHKh6I7/uSckMetoRGb5UBZPC1z0jlw+n/XCgjeH7y1AQ==",
-			"dev": true
+			"devOptional": true
 		},
 		"node_modules/async-limiter": {
 			"version": "1.0.1",
@@ -3746,7 +3759,7 @@
 			"version": "2.2.0",
 			"resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz",
 			"integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==",
-			"dev": true,
+			"devOptional": true,
 			"engines": {
 				"node": ">=8"
 			}
@@ -4243,7 +4256,7 @@
 			"version": "3.5.2",
 			"resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.2.tgz",
 			"integrity": "sha512-ekGhOnNVPgT77r4K/U3GDhu+FQ2S8TnK/s2KbIGXi0SZWuwkZ2QNyfWdZW+TVfn84DpEP7rLeCt2UI6bJ8GwbQ==",
-			"dev": true,
+			"devOptional": true,
 			"dependencies": {
 				"anymatch": "~3.1.2",
 				"braces": "~3.0.2",
@@ -4264,7 +4277,7 @@
 			"version": "3.0.2",
 			"resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz",
 			"integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==",
-			"dev": true,
+			"devOptional": true,
 			"dependencies": {
 				"fill-range": "^7.0.1"
 			},
@@ -4276,7 +4289,7 @@
 			"version": "7.0.1",
 			"resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz",
 			"integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==",
-			"dev": true,
+			"devOptional": true,
 			"dependencies": {
 				"to-regex-range": "^5.0.1"
 			},
@@ -4288,7 +4301,7 @@
 			"version": "7.0.0",
 			"resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz",
 			"integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==",
-			"dev": true,
+			"devOptional": true,
 			"engines": {
 				"node": ">=0.12.0"
 			}
@@ -4297,7 +4310,7 @@
 			"version": "5.0.1",
 			"resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz",
 			"integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==",
-			"dev": true,
+			"devOptional": true,
 			"dependencies": {
 				"is-number": "^7.0.0"
 			},
@@ -7430,7 +7443,7 @@
 			"version": "5.1.2",
 			"resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz",
 			"integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==",
-			"dev": true,
+			"devOptional": true,
 			"dependencies": {
 				"is-glob": "^4.0.1"
 			},
@@ -8535,7 +8548,7 @@
 			"version": "2.1.0",
 			"resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz",
 			"integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==",
-			"dev": true,
+			"devOptional": true,
 			"dependencies": {
 				"binary-extensions": "^2.0.0"
 			},
@@ -8705,7 +8718,7 @@
 			"version": "2.1.1",
 			"resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz",
 			"integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=",
-			"dev": true,
+			"devOptional": true,
 			"engines": {
 				"node": ">=0.10.0"
 			}
@@ -8723,7 +8736,7 @@
 			"version": "4.0.1",
 			"resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.1.tgz",
 			"integrity": "sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==",
-			"dev": true,
+			"devOptional": true,
 			"dependencies": {
 				"is-extglob": "^2.1.1"
 			},
@@ -9916,7 +9929,7 @@
 			"version": "3.0.0",
 			"resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz",
 			"integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==",
-			"dev": true,
+			"devOptional": true,
 			"engines": {
 				"node": ">=0.10.0"
 			}
@@ -10483,7 +10496,7 @@
 			"version": "1.0.2",
 			"resolved": "https://registry.npmjs.org/path-dirname/-/path-dirname-1.0.2.tgz",
 			"integrity": "sha1-zDPSTVJeCZpTiMAzbG4yuRYGCeA=",
-			"dev": true
+			"devOptional": true
 		},
 		"node_modules/path-exists": {
 			"version": "4.0.0",
@@ -10575,7 +10588,7 @@
 			"version": "2.3.0",
 			"resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.0.tgz",
 			"integrity": "sha512-lY1Q/PiJGC2zOv/z391WOTD+Z02bCgsFfvxoXXf6h7kv9o+WmsmzYqrAwY63sNgOxE4xEdq0WyUnXfKeBrSvYw==",
-			"dev": true,
+			"devOptional": true,
 			"engines": {
 				"node": ">=8.6"
 			},
@@ -11727,7 +11740,7 @@
 			"version": "3.6.0",
 			"resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz",
 			"integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==",
-			"dev": true,
+			"devOptional": true,
 			"dependencies": {
 				"picomatch": "^2.2.1"
 			},
@@ -11860,7 +11873,7 @@
 			"version": "1.1.0",
 			"resolved": "https://registry.npmjs.org/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz",
 			"integrity": "sha1-wkvOKig62tW8P1jg1IJJuSN52O8=",
-			"dev": true
+			"devOptional": true
 		},
 		"node_modules/renderkid": {
 			"version": "2.0.7",
@@ -14024,7 +14037,7 @@
 			"version": "1.2.0",
 			"resolved": "https://registry.npmjs.org/upath/-/upath-1.2.0.tgz",
 			"integrity": "sha512-aZwGpamFO61g3OlfT7OQCHqhGnW43ieH9WZeP7QxN/G/jS4jfqUkZxoryvJgVPEcrl5NL/ggHsSmLMHuH64Lhg==",
-			"dev": true,
+			"devOptional": true,
 			"engines": {
 				"node": ">=4",
 				"yarn": "*"
@@ -14453,7 +14466,6 @@
 			"version": "2.0.1",
 			"resolved": "https://registry.npmjs.org/watchpack-chokidar2/-/watchpack-chokidar2-2.0.1.tgz",
 			"integrity": "sha512-nCFfBIPKr5Sh61s4LPpy1Wtfi0HE8isJ3d2Yb5/Ppw2P2B/3eVSEBjKfN0fmHJSK14+31KwMKmcrzs2GM4P0Ww==",
-			"dev": true,
 			"optional": true,
 			"dependencies": {
 				"chokidar": "^2.1.8"
@@ -14463,7 +14475,6 @@
 			"version": "2.0.0",
 			"resolved": "https://registry.npmjs.org/anymatch/-/anymatch-2.0.0.tgz",
 			"integrity": "sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw==",
-			"dev": true,
 			"optional": true,
 			"dependencies": {
 				"micromatch": "^3.1.4",
@@ -14474,7 +14485,6 @@
 			"version": "2.1.1",
 			"resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz",
 			"integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=",
-			"dev": true,
 			"optional": true,
 			"dependencies": {
 				"remove-trailing-separator": "^1.0.1"
@@ -14487,7 +14497,6 @@
 			"version": "1.13.1",
 			"resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-1.13.1.tgz",
 			"integrity": "sha512-Un7MIEDdUC5gNpcGDV97op1Ywk748MpHcFTHoYs6qnj1Z3j7I53VG3nwZhKzoBZmbdRNnb6WRdFlwl7tSDuZGw==",
-			"dev": true,
 			"optional": true,
 			"engines": {
 				"node": ">=0.10.0"
@@ -14498,7 +14507,6 @@
 			"resolved": "https://registry.npmjs.org/chokidar/-/chokidar-2.1.8.tgz",
 			"integrity": "sha512-ZmZUazfOzf0Nve7duiCKD23PFSCs4JPoYyccjUFF3aQkQadqBhfzhjkwBH2mNOG9cTBwhamM37EIsIkZw3nRgg==",
 			"deprecated": "Chokidar 2 does not receive security updates since 2019. Upgrade to chokidar 3 with 15x fewer dependencies",
-			"dev": true,
 			"optional": true,
 			"dependencies": {
 				"anymatch": "^2.0.0",
@@ -14522,7 +14530,6 @@
 			"resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.2.13.tgz",
 			"integrity": "sha512-oWb1Z6mkHIskLzEJ/XWX0srkpkTQ7vaopMQkyaEIoq0fmtFVxOthb8cCxeT+p3ynTdkk/RZwbgG4brR5BeWECw==",
 			"deprecated": "fsevents 1 will break on node v14+ and could be using insecure binaries. Upgrade to fsevents 2.",
-			"dev": true,
 			"hasInstallScript": true,
 			"optional": true,
 			"os": [
@@ -14540,7 +14547,6 @@
 			"version": "3.1.0",
 			"resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz",
 			"integrity": "sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4=",
-			"dev": true,
 			"optional": true,
 			"dependencies": {
 				"is-glob": "^3.1.0",
@@ -14551,7 +14557,6 @@
 			"version": "3.1.0",
 			"resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz",
 			"integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=",
-			"dev": true,
 			"optional": true,
 			"dependencies": {
 				"is-extglob": "^2.1.0"
@@ -14564,7 +14569,6 @@
 			"version": "1.0.1",
 			"resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-1.0.1.tgz",
 			"integrity": "sha1-dfFmQrSA8YenEcgUFh/TpKdlWJg=",
-			"dev": true,
 			"optional": true,
 			"dependencies": {
 				"binary-extensions": "^1.0.0"
@@ -14577,7 +14581,6 @@
 			"version": "2.2.1",
 			"resolved": "https://registry.npmjs.org/readdirp/-/readdirp-2.2.1.tgz",
 			"integrity": "sha512-1JU/8q+VgFZyxwrJ+SVIOsh+KywWGpds3NTqikiKpDMZWScmAYyKIgqkO+ARvNWJfXeXR1zxz7aHF4u4CyH6vQ==",
-			"dev": true,
 			"optional": true,
 			"dependencies": {
 				"graceful-fs": "^4.1.11",
@@ -17699,6 +17702,15 @@
 			"integrity": "sha512-Iu8Tbg3f+emIIMmI2ycSI8QcEuAUgPTgHwesDU1eKMLE4YC/c/sFbGc70QgMq31ijRftV0R7vCm9co6rldCeOA==",
 			"dev": true
 		},
+		"@vueup/vue-quill": {
+			"version": "1.0.0-alpha.40",
+			"resolved": "https://registry.npmjs.org/@vueup/vue-quill/-/vue-quill-1.0.0-alpha.40.tgz",
+			"integrity": "sha512-Cn6li+LxOiPQSvmZE+F9jKGsemksQq2VDfTBdgFIlNfNv3+BcBN+DblQstj9NDV5BBF97BHmM2dk7E84yYJI+Q==",
+			"requires": {
+				"quill": "^1.3.7",
+				"quill-delta": "^3.6.3"
+			}
+		},
 		"@webassemblyjs/ast": {
 			"version": "1.9.0",
 			"resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.9.0.tgz",
@@ -17983,7 +17995,7 @@
 			"version": "3.1.2",
 			"resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz",
 			"integrity": "sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==",
-			"dev": true,
+			"devOptional": true,
 			"requires": {
 				"normalize-path": "^3.0.0",
 				"picomatch": "^2.0.4"
@@ -18131,7 +18143,7 @@
 			"version": "1.0.3",
 			"resolved": "https://registry.npmjs.org/async-each/-/async-each-1.0.3.tgz",
 			"integrity": "sha512-z/WhQ5FPySLdvREByI2vZiTWwCnF0moMJ1hK9YQwDTHKh6I7/uSckMetoRGb5UBZPC1z0jlw+n/XCgjeH7y1AQ==",
-			"dev": true
+			"devOptional": true
 		},
 		"async-limiter": {
 			"version": "1.0.1",
@@ -18361,7 +18373,7 @@
 			"version": "2.2.0",
 			"resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz",
 			"integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==",
-			"dev": true
+			"devOptional": true
 		},
 		"bluebird": {
 			"version": "3.7.2",
@@ -18784,7 +18796,7 @@
 			"version": "3.5.2",
 			"resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.2.tgz",
 			"integrity": "sha512-ekGhOnNVPgT77r4K/U3GDhu+FQ2S8TnK/s2KbIGXi0SZWuwkZ2QNyfWdZW+TVfn84DpEP7rLeCt2UI6bJ8GwbQ==",
-			"dev": true,
+			"devOptional": true,
 			"requires": {
 				"anymatch": "~3.1.2",
 				"braces": "~3.0.2",
@@ -18800,7 +18812,7 @@
 					"version": "3.0.2",
 					"resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz",
 					"integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==",
-					"dev": true,
+					"devOptional": true,
 					"requires": {
 						"fill-range": "^7.0.1"
 					}
@@ -18809,7 +18821,7 @@
 					"version": "7.0.1",
 					"resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz",
 					"integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==",
-					"dev": true,
+					"devOptional": true,
 					"requires": {
 						"to-regex-range": "^5.0.1"
 					}
@@ -18818,13 +18830,13 @@
 					"version": "7.0.0",
 					"resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz",
 					"integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==",
-					"dev": true
+					"devOptional": true
 				},
 				"to-regex-range": {
 					"version": "5.0.1",
 					"resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz",
 					"integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==",
-					"dev": true,
+					"devOptional": true,
 					"requires": {
 						"is-number": "^7.0.0"
 					}
@@ -21338,7 +21350,7 @@
 			"version": "5.1.2",
 			"resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz",
 			"integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==",
-			"dev": true,
+			"devOptional": true,
 			"requires": {
 				"is-glob": "^4.0.1"
 			}
@@ -22184,7 +22196,7 @@
 			"version": "2.1.0",
 			"resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz",
 			"integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==",
-			"dev": true,
+			"devOptional": true,
 			"requires": {
 				"binary-extensions": "^2.0.0"
 			}
@@ -22304,7 +22316,7 @@
 			"version": "2.1.1",
 			"resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz",
 			"integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=",
-			"dev": true
+			"devOptional": true
 		},
 		"is-fullwidth-code-point": {
 			"version": "3.0.0",
@@ -22316,7 +22328,7 @@
 			"version": "4.0.1",
 			"resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.1.tgz",
 			"integrity": "sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==",
-			"dev": true,
+			"devOptional": true,
 			"requires": {
 				"is-extglob": "^2.1.1"
 			}
@@ -23289,7 +23301,7 @@
 			"version": "3.0.0",
 			"resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz",
 			"integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==",
-			"dev": true
+			"devOptional": true
 		},
 		"normalize-range": {
 			"version": "0.1.2",
@@ -23729,7 +23741,7 @@
 			"version": "1.0.2",
 			"resolved": "https://registry.npmjs.org/path-dirname/-/path-dirname-1.0.2.tgz",
 			"integrity": "sha1-zDPSTVJeCZpTiMAzbG4yuRYGCeA=",
-			"dev": true
+			"devOptional": true
 		},
 		"path-exists": {
 			"version": "4.0.0",
@@ -23805,7 +23817,7 @@
 			"version": "2.3.0",
 			"resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.0.tgz",
 			"integrity": "sha512-lY1Q/PiJGC2zOv/z391WOTD+Z02bCgsFfvxoXXf6h7kv9o+WmsmzYqrAwY63sNgOxE4xEdq0WyUnXfKeBrSvYw==",
-			"dev": true
+			"devOptional": true
 		},
 		"pify": {
 			"version": "4.0.1",
@@ -24774,7 +24786,7 @@
 			"version": "3.6.0",
 			"resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz",
 			"integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==",
-			"dev": true,
+			"devOptional": true,
 			"requires": {
 				"picomatch": "^2.2.1"
 			}
@@ -24879,7 +24891,7 @@
 			"version": "1.1.0",
 			"resolved": "https://registry.npmjs.org/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz",
 			"integrity": "sha1-wkvOKig62tW8P1jg1IJJuSN52O8=",
-			"dev": true
+			"devOptional": true
 		},
 		"renderkid": {
 			"version": "2.0.7",
@@ -26614,7 +26626,7 @@
 			"version": "1.2.0",
 			"resolved": "https://registry.npmjs.org/upath/-/upath-1.2.0.tgz",
 			"integrity": "sha512-aZwGpamFO61g3OlfT7OQCHqhGnW43ieH9WZeP7QxN/G/jS4jfqUkZxoryvJgVPEcrl5NL/ggHsSmLMHuH64Lhg==",
-			"dev": true
+			"devOptional": true
 		},
 		"upper-case": {
 			"version": "1.1.3",
@@ -26957,7 +26969,6 @@
 			"version": "2.0.1",
 			"resolved": "https://registry.npmjs.org/watchpack-chokidar2/-/watchpack-chokidar2-2.0.1.tgz",
 			"integrity": "sha512-nCFfBIPKr5Sh61s4LPpy1Wtfi0HE8isJ3d2Yb5/Ppw2P2B/3eVSEBjKfN0fmHJSK14+31KwMKmcrzs2GM4P0Ww==",
-			"dev": true,
 			"optional": true,
 			"requires": {
 				"chokidar": "^2.1.8"
@@ -26967,7 +26978,6 @@
 					"version": "2.0.0",
 					"resolved": "https://registry.npmjs.org/anymatch/-/anymatch-2.0.0.tgz",
 					"integrity": "sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw==",
-					"dev": true,
 					"optional": true,
 					"requires": {
 						"micromatch": "^3.1.4",
@@ -26978,7 +26988,6 @@
 							"version": "2.1.1",
 							"resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz",
 							"integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=",
-							"dev": true,
 							"optional": true,
 							"requires": {
 								"remove-trailing-separator": "^1.0.1"
@@ -26990,14 +26999,12 @@
 					"version": "1.13.1",
 					"resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-1.13.1.tgz",
 					"integrity": "sha512-Un7MIEDdUC5gNpcGDV97op1Ywk748MpHcFTHoYs6qnj1Z3j7I53VG3nwZhKzoBZmbdRNnb6WRdFlwl7tSDuZGw==",
-					"dev": true,
 					"optional": true
 				},
 				"chokidar": {
 					"version": "2.1.8",
 					"resolved": "https://registry.npmjs.org/chokidar/-/chokidar-2.1.8.tgz",
 					"integrity": "sha512-ZmZUazfOzf0Nve7duiCKD23PFSCs4JPoYyccjUFF3aQkQadqBhfzhjkwBH2mNOG9cTBwhamM37EIsIkZw3nRgg==",
-					"dev": true,
 					"optional": true,
 					"requires": {
 						"anymatch": "^2.0.0",
@@ -27018,7 +27025,6 @@
 					"version": "1.2.13",
 					"resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.2.13.tgz",
 					"integrity": "sha512-oWb1Z6mkHIskLzEJ/XWX0srkpkTQ7vaopMQkyaEIoq0fmtFVxOthb8cCxeT+p3ynTdkk/RZwbgG4brR5BeWECw==",
-					"dev": true,
 					"optional": true,
 					"requires": {
 						"bindings": "^1.5.0",
@@ -27029,7 +27035,6 @@
 					"version": "3.1.0",
 					"resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz",
 					"integrity": "sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4=",
-					"dev": true,
 					"optional": true,
 					"requires": {
 						"is-glob": "^3.1.0",
@@ -27040,7 +27045,6 @@
 							"version": "3.1.0",
 							"resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz",
 							"integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=",
-							"dev": true,
 							"optional": true,
 							"requires": {
 								"is-extglob": "^2.1.0"
@@ -27052,7 +27056,6 @@
 					"version": "1.0.1",
 					"resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-1.0.1.tgz",
 					"integrity": "sha1-dfFmQrSA8YenEcgUFh/TpKdlWJg=",
-					"dev": true,
 					"optional": true,
 					"requires": {
 						"binary-extensions": "^1.0.0"
@@ -27062,7 +27065,6 @@
 					"version": "2.2.1",
 					"resolved": "https://registry.npmjs.org/readdirp/-/readdirp-2.2.1.tgz",
 					"integrity": "sha512-1JU/8q+VgFZyxwrJ+SVIOsh+KywWGpds3NTqikiKpDMZWScmAYyKIgqkO+ARvNWJfXeXR1zxz7aHF4u4CyH6vQ==",
-					"dev": true,
 					"optional": true,
 					"requires": {
 						"graceful-fs": "^4.1.11",

+ 1 - 1
web/package.json

@@ -9,6 +9,7 @@
 		"preview": "vite preview"
 	},
 	"dependencies": {
+		"@vueup/vue-quill": "^1.0.0-alpha.40",
 		"axios": "^0.19.2",
 		"core-js": "^3.6.5",
 		"echarts": "4.9.0",
@@ -18,7 +19,6 @@
 		"mitt": "^3.0.0",
 		"path": "^0.12.7",
 		"qs": "^6.8.0",
-		"quill": "^1.3.7",
 		"screenfull": "^5.0.2",
 		"script-ext-html-webpack-plugin": "^2.1.4",
 		"spark-md5": "^3.0.1",

+ 5 - 0
web/src/main.js

@@ -15,6 +15,10 @@ import DictTag from '@/components/DictTag/index.vue'
 import { auth } from '@/directive/auth'
 import App from './App.vue'
 
+import { QuillEditor } from '@vueup/vue-quill'
+import '@vueup/vue-quill/dist/vue-quill.snow.css';
+
+
 const app = createApp(App)
 import { findSysDictionary as getDicts } from '@/api/sysDictionary'
 import DataDict from '@/utils/dict'
@@ -29,6 +33,7 @@ auth(app)
 app.config.productionTip = false
 app.config.globalProperties.$getDicts = getDicts
 app.component('DictTag', DictTag)
+app.component('QuillEditor', QuillEditor)
 app.use(DataDict, {
   metas: {
     '*': {

+ 11 - 2
web/src/view/content/norm.vue

@@ -33,7 +33,7 @@
       </el-table-column>
       <el-table-column label="操作人" prop="oper" width="120" />
       <el-table-column label="标题" prop="title" width="120" />
-      <el-table-column label="内容" prop="text" width="120" />
+      <el-table-column label="内容" :show-overflow-tooltip="true" prop="text" width="120" />
       <el-table-column label="图片" prop="imgs" width="165"  >
         <template #default="scope">
           <img :src="scope.row.imgs.split('|')[0] " width="140"/>
@@ -65,8 +65,13 @@
           <el-input v-model="formData.title" clearable placeholder="请输入" />
         </el-form-item>
         <el-form-item label="内容:">
-          <el-input type="textarea" :autosize="{ minRows: 4, maxRows: 10 }" v-model="formData.text" clearable placeholder="请输入" />
+          <QuillEditor theme="snow"
+              v-model:content="formData.text"
+              contentType="html"
+          ></QuillEditor>
         </el-form-item>
+<!--          <el-input type="textarea" :autosize="{ minRows: 4, maxRows: 10 }" v-model="formData.text" clearable placeholder="请输入" />-->
+<!--        </el-form-item>-->
         <el-form-item label="图片:">
           <el-upload
               class="upload-demo"
@@ -138,6 +143,10 @@ export default {
   },
   methods: {
   // 条件搜索前端看此方法
+    onEditorChange({editor, html, text}) {
+      // 此处三项可以自己在控制台打印
+      this.formData.text = html
+    },
     onSubmit() {
       this.page = 1
       this.pageSize = 10

+ 45 - 0
web/src/view/problemInfo/problemInfo.vue

@@ -149,6 +149,28 @@
             <el-descriptions-item span="2" label="问题备注">{{ formData.remark }}</el-descriptions-item>
           </el-descriptions>
         </el-card>
+        <el-card class="box-card" v-show="replyList.length>0">
+          <div class="el-descriptions__header el-descriptions__title">问题批示</div>
+            <el-table border stripe :data="replyList" style="width: 100%">
+              <el-table-column label="头像" prop="headerImg" >
+                <template #default="scope">
+                  <div :style="{'textAlign':'center'}">
+                    <CustomPic :pic-src="scope.row.headerImg" />
+                  </div>
+                </template>
+              </el-table-column>
+              <el-table-column label="昵称" prop="nickName" />
+              <el-table-column label="批示内容" prop="replyMsg" />
+              <el-table-column label="批示时间" prop="CreatedAt" >
+                <template #default="scope">{{ formatDate(scope.row.CreatedAt) }}</template>
+              </el-table-column>
+              <el-table-column>
+                <template #default="scope">
+                  <el-button type="danger" icon="el-icon-delete" size="mini" @click="deleteReplyRow(scope.row)">删除</el-button>
+                </template>
+              </el-table-column>
+            </el-table>
+        </el-card>
         <el-card class="box-card">
           <el-descriptions title="问题列表" :column="1" direction="vertical">
             <el-descriptions-item v-for="item in formData.matter.split('|')">
@@ -208,6 +230,11 @@ import {
   getProblemInfoList,
   exportExcel, sendUserProblemInfo, getReadCountList
 } from '@/api/problemInfo' //  此处请自行替换地址
+import {
+  deleteProblemReply,
+  getProblemReplyList
+} from '@/api/problemReply' //  此处请自行替换地址
+import CustomPic from '@/components/customPic/index.vue'
 import infoList from '@/mixins/infoList'
 import { getDict } from '@/utils/dictionary'
 import { getUserPList } from '@/api/user'
@@ -215,6 +242,7 @@ import { getUserPList } from '@/api/user'
 export default {
   name: 'ProblemInfo',
   mixins: [infoList],
+  components: { CustomPic },
   dicts: ['site_type'],
   data() {
     return {
@@ -233,6 +261,7 @@ export default {
       deleteVisible: false,
       multipleSelection: [],
       matterList: [],
+      replyList: [],
       formData: {
         oper: 0,
         handler: 0,
@@ -278,6 +307,18 @@ export default {
         this.deleteProblemInfo(row)
       })
     },
+    deleteReplyRow(row){
+      this.$confirm('确定要删除吗?', '提示', {
+        confirmButtonText: '确定',
+        cancelButtonText: '取消',
+        type: 'warning'
+      }).then(() => {
+        deleteProblemReply({ID:row.ID}).then(res=>{
+          this.closeDialog()
+          this.updateProblemInfo({ID:row.problemId})
+        })
+      })
+    },
     async handlePdf(row) {
       const href = window.location.origin
       const params = `/#/proInfo?Id=${row.ID}`
@@ -347,6 +388,10 @@ export default {
       const res = await findProblemInfo({ ID: row.ID })
       this.type = 'update'
       if (res.code === 0) {
+        await getProblemReplyList({page: 1, pageSize: 9999, problemId: row.ID }).then(res=>{
+          this.replyList=res.data.list
+          console.log(this.replyList)
+        })
         this.formData = res.data.reproblemInfo
         if (this.formData.imgs.length > 0) {
           this.formData.imgList = this.formData.imgs.split('|')

+ 10 - 2
web/yarn.lock

@@ -1541,6 +1541,14 @@
   "resolved" "https://registry.npmjs.org/@vue/web-component-wrapper/-/web-component-wrapper-1.3.0.tgz"
   "version" "1.3.0"
 
+"@vueup/vue-quill@^1.0.0-alpha.40":
+  "integrity" "sha512-Cn6li+LxOiPQSvmZE+F9jKGsemksQq2VDfTBdgFIlNfNv3+BcBN+DblQstj9NDV5BBF97BHmM2dk7E84yYJI+Q=="
+  "resolved" "https://registry.npmjs.org/@vueup/vue-quill/-/vue-quill-1.0.0-alpha.40.tgz"
+  "version" "1.0.0-alpha.40"
+  dependencies:
+    "quill" "^1.3.7"
+    "quill-delta" "^3.6.3"
+
 "@webassemblyjs/[email protected]":
   "integrity" "sha512-C6wW5L+b7ogSDVqymbkkvuW9kruN//YisMED04xzeBBqjHa2FYnmvOlS6Xj68xWQRgWvI9cIglsjFowH/RJyEA=="
   "resolved" "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.9.0.tgz"
@@ -7158,7 +7166,7 @@
   "resolved" "https://registry.npmjs.org/querystringify/-/querystringify-2.2.0.tgz"
   "version" "2.2.0"
 
-"quill-delta@^3.6.2":
+"quill-delta@^3.6.2", "quill-delta@^3.6.3":
   "integrity" "sha512-wdIGBlcX13tCHOXGMVnnTVFtGRLoP0imqxM696fIPwIf5ODIYUHIvHbZcyvGlZFiFhK5XzDC2lpjbxRhnM05Tg=="
   "resolved" "https://registry.npmjs.org/quill-delta/-/quill-delta-3.6.3.tgz"
   "version" "3.6.3"
@@ -8818,7 +8826,7 @@
   "resolved" "https://registry.npmjs.org/vue-template-es2015-compiler/-/vue-template-es2015-compiler-1.9.1.tgz"
   "version" "1.9.1"
 
-"vue@^2 || ^3.0.0-0", "vue@^3.0.0", "vue@^3.0.2", "vue@^3.2.0":
+"vue@^2 || ^3.0.0-0", "vue@^3.0.0", "vue@^3.0.11", "vue@^3.0.2", "vue@^3.2.0":
   "integrity" "sha512-x7lwdnOSkceHQUXRVVHBaZzcp6v7M2CYtSZH75zZaT1mTjB4plC4KZHKP/5jAvdqOLBHZGwDSMkWXm3YbAufrA=="
   "resolved" "https://registry.npmjs.org/vue/-/vue-3.2.8.tgz"
   "version" "3.2.8"